最近,我正在努力制定一个解决方案,将用户的search log
/ query log
存储到HBase表中。
让我们简单的原始查询日志:
query timestamp req_cookie req_ip ...
数据访问模式:
我提出了以下行键设计:
<query>_<timestamp>
但是查询可能很长或编码不同,将query
直接放入rowkey
似乎是不明智的。
我正在寻求优化此架构的帮助,以前是否有人处理此场景?
答案 0 :(得分:1)
1-您可以使用时间范围进行全表扫描。如果您需要实时响应,则必须维护反向行键表<timestamp>_<query>
(首先仔细规划您的区域拆分策略)。
请注意,顺序行键前缀将获得一些 区域非常热,如果你有很多的同意,所以这是明智的 缓冲写入该表。此外,如果您获得的写入数量超过单个区域可以处理的数量,那么您将实现某种分片前缀(即时间戳的模数),尽管这会使您的 检索要复杂得多(你必须合并结果) 多次扫描)。
2-以一种总是有一个固定长度的行键的方式散列查询字符串,而不必关心编码(可能是MD5?)