【发布时间】:2012-11-21 22:11:17
【问题描述】:
我必须使用复合键作为 [timestamp,long] 创建和查询列族。还, 查询时我想触发时间戳范围查询(例如 xxx 和 yyy 之间的时间戳)这可能吗?
目前我正在做一些非常有趣的事情(我知道这不正确)。我为给定范围创建带有时间戳字符串的键,并与 long 连接。
like ,
1254345345435-1234
3423432423432-1234
1231231231231-9999
并将一组键传递给 hector api。 (所以如果我有 1 个月的日期范围并且我想要每分钟的数据,我创建 30 * 24 * 60 * [辅助键的数量 - 长])
我可以用复合键解决连接问题。但查询部分是我想要理解的。
据我了解,由于我们使用的是 RandomPartitioner,我们无法真正根据范围进行查询,因为键是 MD5 校验和。这种用例的理想设计是什么?
我的架构和要求如下:(实际csh)
CREATE TABLE report(
ts timestamp,
user_id long,
svc1 long,
svc2 long,
svc3 long,
PRIMARY KEY(ts, user_id));
select from report where ts between (123445345435 and 32423423424) and user_id is in (123,567,987)
【问题讨论】:
-
你理解正确 - 没有随机分区器的行键范围查询。
-
@tysonjh 这种情况有什么替代方案?我认为这是很常见的情况……简单的时间线图。
-
您需要根据计划查询的方式对架构进行建模,因此请使用允许查询的合适粒度对您希望范围查询的值创建反向(也称为反向、倒排)索引它们以您想要的精度。
-
我添加了一个答案,因为任何进一步的解释都会涉及到