【问题标题】:Ranges (intervals) request in Cassandra DB - CQLCassandra DB 中的范围(间隔)请求 - CQL
【发布时间】:2015-09-14 00:31:36
【问题描述】:

对不起,如果它是重复的,我在这里发现了一些关于时间范围的问题,但我的情况似乎有点不同,尚未讨论。

我想存储相当大的数据块(bins)(blob - 2-4Mb,这是“黑盒数据”,我无法更改其布局)以使用间隔键访问:

...
primary key ( bin_id int, from_item_id int, to_item_id int ) 
...

能够选择项目范围,就像在这个伪代码中选择包含项目间隔的所有块[110, 200]

select chunk from tb1 where chunk_id = 100500 and from_item_id >= 110 and to_item_id <= 200;

尝试运行这样的查询直接以错误结束:

code=2200 [Invalid query] message="PRIMARY KEY column "to_item_id" cannot be restricted (preceding column "from_item_id" is restricted by a non-EQ relation)"

目前我找到的唯一解决方案是使用从 item_id 到 bin_id 的反向映射来实现附加表 (tb_map),并使用 select 使查询看起来像这样:

...
– in tb_map
primary key (dummy_id, item_id)
...
select bin_id from tb_map where dummy_id = SOME_MAGIK and item_id >= 110 and item_id <= 200;

然后使用 bin_id 从带有 EQ 或 IN 运算符的 tb1 中检索块,如下所示:

select * from tb1 where bin_id in (...);

但由于插入性能问题,我不能使用此模型(应用程序应避免对附加表进行多次插入,并应避免维护额外的数据结构,但应该“像钉子一样简单”)。

留在一张桌子(或几张简单的桌子)内有什么简单的解决方案吗?我不知道如何在 C* 中建模这种行为(可能应该使用切片?),本地 C* 专家可以提供任何提示吗?

我正在使用 CQL 3.1

【问题讨论】:

标签: cassandra data-modeling cql cql3


【解决方案1】:

来自CQL3 reference

此外,对于给定的分区键,聚类列会引发行的排序,并且它们上的关系仅限于允许选择连续(用于排序)行集的关系。

在您的情况下,查询没有选择一组连续的行,因此 Cassandra 拒绝处理它。

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 2015-03-10
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多