【问题标题】:HBase schema design in storing query log存储查询日志中的 HBase 架构设计
【发布时间】:2014-01-22 18:22:01
【问题描述】:

最近,我正在研究将用户的search log/query log 存储到 HBase 表中的解决方案。

让我们简单的原始查询日志:

query timestamp req_cookie req_ip ... 

数据访问模式:

  1. 扫描一个时间范围内的所有查询。
  2. 使用指定查询扫描所有搜索历史记录

我想出了以下行键设计:

<query>_<timestamp>

但是查询可能很长或者编码不同,把query直接放到rowkey里面是不明智的。

我正在寻求帮助以优化此架构,以前有人处理过这种情况吗?

【问题讨论】:

    标签: search schema hbase


    【解决方案1】:

    1- 您可以使用时间范围进行全表扫描。如果您需要实时响应,您必须维护一个反向行键表&lt;timestamp&gt;_&lt;query&gt;(首先仔细规划您的区域拆分策略)。

    请注意,顺序行键前缀会获取您的一些 如果您有很多同意,那么地区非常热,所以这将是明智的 缓冲对该表的写入。此外,如果您获得的写入次数超过单个区域可以处理的次数,您将实施某种分片前缀(即时间戳的模数),尽管这会使您的 检索要复杂得多(您必须合并 多次扫描)。

    2- 对查询字符串进行哈希处理,使您始终拥有一个固定长度的行键,而不必关心编码(可能是 MD5?)

    【讨论】:

    • 它将完美运行,您将获得 25 字节的行键,这不算小,但也不算太差。仅在需要较小行键的极端情况下,您可以仅从哈希中提取 4-8 个第一个字符,但随后您将从多个不同的查询中获得相同的哈希,如果您存储其中一列中的原始查询,因此您可以添加 SingleColumnValue 过滤器以丢弃不需要的查询(8 字节哈希应该足以获得最少的冲突)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多