一种方法是使用您的用户 ID+站点 ID 制作复合行键
设置表格以维护给定页面所需的任意数量的日志条目,并每次将数据存储为新版本(如有必要,手动设置时间戳)。
由于 HBase 维护每个单元格的时间戳,因此您不需要单独的列来记录访问时间。
因此,您将拥有一个包含类似内容的表格
Row Page
user1:site1 www.example.com/index.html@1234567890
www.example.com/somepage.html@123456800
www.example.com/someotherpage.html@123456900
www.example.com/index.html@123457123
user1:site2 blahblah
user2:site1 etc...
要处理您的两个示例请求:
要查找所有用户行,您将执行从 userx:0 到 userx+1:0 的扫描(确保设置 maxVersion),然后从每个结果行中解析出站点 ID
要获取特定用户/站点的所有页面,只需从 userx:sitex 扫描到 userx:sitex+1。最后我检查了你不能在 get 上设置 maxVersions,所以这不是一个选项。
简而言之,列族代表您想要存储在一起的数据组......大概您会经常同时从它们读取数据。将列放在不同的族中会导致数据被单独存储,因此当您只需要一列时可以更快地读取,但您需要读取 2 个不同的位置才能获取两列。
当然,根据您的其他需求,您可能希望采取不同的方法。我强烈建议阅读大表论文以更好地理解 HBase 的结构(因为它强烈基于 bigtable)。
为了更好地了解 HBase 的内部结构,Lars George 的博客也很棒。