如何按数据范围查询 Cassandra 中以 TimeUUID 为第一个组件的复合列?

Posted

技术标签:

【中文标题】如何按数据范围查询 Cassandra 中以 TimeUUID 为第一个组件的复合列?【英文标题】:How to query, by data range, a composite column in Cassandra with TimeUUID as the first component? 【发布时间】:2012-07-19 10:40:34 【问题描述】:

1) 插入一列

DynamicComposite dc = new DynamicComposite();
dc.add(0,TimeUUIDUtils.getUniqueTimeUUIDinMillis());

2) 尝试使用 SliceQuery 查询给定时间范围内的列

UUID afterUUID = TimeUUID.getTimeUUID((new Date (2012, 7, 17, 24, 0).getTime())); 
    UUID beforeUUID = TimeUUID.getTimeUUID((new Date (2012, 7, 20, 24, 0).getTime())); 
    startRange.add(0, afterUUID);
    endRange.addComponent(0,beforeUUID, UUIDSerializer.get(), "TimeUUIDType", AbstractComposite.ComponentEquality.GREATER_THAN_EQUAL);

在 7 月 19 日执行代码,因此该列应该匹配但什么都没有。

感谢任何帮助。

【问题讨论】:

我现在正在使用一个 Long 和一个 System.currentTimeMillis()。直到我发现原来的解决方案有问题。 【参考方案1】:

Cassandra 使用 UTC,System.currentTimeInMillis() 也是如此。使用 UTC 时间查询时,您的查询应该可以工作。

【讨论】:

以上是关于如何按数据范围查询 Cassandra 中以 TimeUUID 为第一个组件的复合列?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Cassandra 在获取数据时响应缓慢而不是拆分到不同的范围查询?

用于范围查询的 cassandra 的表定义语句?

Cassandra 数据模型

在 Cassandra 中按地图值查询

Cassandra中的双范围查询

DSE (Cassandra) - int 数据类型的范围搜索