我需要存储由userId标识的用户生成的事件.每个用户都属于由companyId标识的公司.我在HBase中提出了一个表格设计如下:
rowkey:< companyId > < 用户id > < 时间戳 >
column-family:info(封装事件属性集,如下所示)
列:< attr1 >,< attr2 > .... < attrn >
我知道这个关键设计将有助于稍后使用部分密钥扫描在companyId和/或userId上查询数据.话虽如此,我有一些问题和疑虑,并希望得到一些想法.
1-如果我们有一个读用例,读取给定时间范围的所有数据,那么使用当前设计,我们将无法使用rowKey.相反,我们必须在时间戳字段上进行全扫描和过滤行(作为attr列之一单独维护)我是否完全偏离此处?
2-如何处理重复?我知道HBase会在这种情况下创建一个新版本的行,但它是否允许稍后根据1中提到的读取用例进行读取?我知道您可以在查询时控制版本,但它是一个好的设计还是错误地重载了本机功能?
3-这涉及区域服务器热点.我们没有单一的密钥,但是如果说,一个特定的公司或用户非常活跃,我们仍然会遇到这个问题.基于服务器数量的散列和分段在这种情况下不起作用?也许如果我们在timestamp字段上哈希并将其附加到rowKey而不是原始值?但问题是,扫描密钥的时间戳组件是不可能的.我们必须在列中有一个单独的列(attr)来捕获它.有什么建议?
非常感谢您提供的任何输入(评论,链接,书籍,想法).