【发布时间】:2014-01-03 21:00:13
【问题描述】:
我目前正在开发一种将用户当前位置历史存储到 HBase 表中的解决方案原型。 (假设有数亿用户)。 每个用户对位置的试用都存储在 HBase 表中。 然后将这些位置跟踪用作少数离线数据分析工作的一部分。
以下是两种主要的数据访问模式:
我应该能够从存储的位置试验中扫描特定用户的全部或部分位置(基于时间范围)。
对于离线数据分析,我应该能够扫描所有位置 一个时间范围内的所有用户。
鉴于上述要求,我想出了以下行键设计:
<uid>_<timestamp>
其中“uid”表示用户 ID,“timestamp”表示检测并保存位置的时间。
使用这种行键设计,实现访问模式 #1 很简单 - 扫描请求可以有一个开始键和结束键,并将给定的时间戳附加到特定的 uid。
但是,棘手的部分是访问模式 #2,我正在寻求 HBase 专家的帮助。 因为,我需要扫描所有用户说过去 6 个月,我最终不会使用任何键进行扫描操作。这会影响扫描整个 HBase 表。我觉得这是低效的。此外,我的数据量预计会以 2K/秒的写入负载更快地增长。
我查看了开放论坛中许多人指出的 OpenTSDB。但我无法将该解决方案与我的数据访问模式联系起来。
我正在寻求帮助以优化此架构,从而避免全表扫描。
【问题讨论】:
-
你对时间戳有限制吗?也就是说,您将只保留过去 6 个月内的最后一个时间戳?
-
是的。我可能会保留过去一年的数据。我会这样配置 TTL。
-
对于数据访问模式 #2 - 时间范围应该灵活还是固定?
-
时间范围类似于 - 过去一周或几周,过去一或几个月。
标签: hbase