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