用于活动源/新闻源/时间线的hbase数据建模

时间:2011-08-11 12:12:57

标签: data-modeling feeds hbase

我决定在项目中使用HBase将用户活动存储在社交网络中。尽管HBase有一种表达数据的简单方法(面向列)但我在决定如何表示数据时遇到了一些困难。

因此,假设您有数百万用户,并且每个用户在他们(例如,在线程中发表评论,发布内容,例如投票等)时都会生成活动。我基本上认为两种方法都有一个Activity hbase表:

  1. 密钥可以是用户参考+活动创建的时间戳,所有活动元数据的值(大部分时间固定大小)

  2. 密钥是用户引用,然后每个活动将作为新列存储在列族中。

  3. 我看到了使用第二种方法的其他类型系统(例如博客)的示例。第一种方法(固定列,仅在更改模式时才变化)更常见。

    我访问这两种方法的数据的方式有什么影响?

1 个答案:

答案 0 :(得分:2)

一般来说,你问的是你的桌子应该宽还是长。 HBase可以同时使用两者。宽表不应该有超过区域大小的行(默认为256MB) - 因此,如果为其操作存储大量数据,真正多产的用户可能会使系统崩溃。但是,如果每个操作只存储几个字节,那么将所有用户活动放在一行中将允许您通过一次获取获得完整的历史记录。但是,您将检索完整行,这可能会导致大量历史记录减速(对于> 100MB行,会导致10秒)。

使用高表和反时间戳可以让您非常快速地获取用户最近的活动(使用key =用户ID开始扫描)。

如果要按时间查询,使用时间戳作为键的结尾是一个好主意,但如果要优化对数据库的写入是一个坏主意(写入将始终位于最近的区域中)系统,导致热点)。

您可能还想考虑在密钥中添加更多信息(例如活动),以便您可以更轻松地获取特定类型的所有活动。

另一个要看的例子是OpenTSDB

相关问题