gpt4 book ai didi

Cassandra Cql 范围选择

转载 作者:行者123 更新时间:2023-12-01 07:20:22 25 4
gpt4 key购买 nike

我们来自 RDBMS 背景,我们试图做的是将现有的数据存储移植到 cassandra,以利用分布式数据库的力量。
我们的要求是存储关于键的值,可能键是时间(计划使用纪元时间)并检索键范围之间的值

对于测试,我们使用 cql 创建了 ColumnFamily 并插入了数据(通过 cqlsh ):

CREATE COLUMNFAMILY Log( KEY int PRIMARY KEY,Val1 varchar,Val2 varchar);

INSERT INTO Log (KEY,val1, val2) VALUES (1,'673153106.00','448768737.33');
INSERT INTO Log (KEY,val1, val2) VALUES (2,'673153106.50','448768737.67');
INSERT INTO Log (KEY,val1, val2) VALUES (3,'673153107.00','448768738.00');
INSERT INTO Log (KEY,val1, val2) VALUES (4,'673153107.50','448768738.33');
INSERT INTO Log (KEY,val1, val2) VALUES (5,'673153108.00','448768738.67');
INSERT INTO Log (KEY,val1, val2) VALUES (6,'673153108.50','448768739.00');
INSERT INTO Log (KEY,val1, val2) VALUES (7,'673153109.00','448768739.33');
INSERT INTO Log (KEY,val1, val2) VALUES (8,'673153109.50','448768739.67');
INSERT INTO Log (KEY,val1, val2) VALUES (9,'673153110.00','448768740.00');
INSERT INTO Log (KEY,val1, val2) VALUES (10,'673153110.50','448768740.33');

但是我们的选择未能返回正确的数据
select * from Log where KEY>4 and KEY<9;

key | val1 | val2 |
10 | 673153110.50 | 448768740.33 |
8 | 673153109.50 | 448768739.67 |

select * from Log where KEY>4 and KEY<9;

Bad Request: Start key's md5 sorts after end key's md5. This is not allowed; you probably should not specify end key at all, under RandomPartitioner



我们做错了什么吗? . 是否有任何解决方案可以使用随机分区在键范围之间选择值

最佳答案

Cassandra 禁止此类查询是有充分理由的。目前,您的所有日志条目都通过使用主键的 md5 总和均匀分布在您的节点上。支持您的查询意味着 Cassandra 必须查询所有节点、检索所有条目、将它们存储在磁盘上并对其进行排序。每当您执行此查询时都需要这样做。

如果您希望能够执行此查询,您可以使用 Order-Preserving-Partioner,但也不建议这样做,因为如果您按顺序插入数据,那么所有查询都将命中单个节点,从而导致不需要的热点。

通常的解决方案是使用复合主键(例如 index_name + timeuuid)。这将确保您的索引通过使用 indexname 的 md5sum 均匀分布在您的集群中。但是访问索引(例如 SELECT * FROM log WHERE index_name = ? AND time >= ? AND time < ? )仍然有效,因为数据已经按排序顺序存储在负责 md5sum(index_name) 的节点上。 . index_name 通常是一些可以帮助您对数据进行分区的键 - user_id 或 application_id 可能是一个不错的候选者。

如果您认为单个 index_name 的索引对于单个节点可能太大,那么您可以通过将当前年份和月份添加到 index_name 来调整先前的模式。请阅读以下两篇文章以获取更多信息:

  • Basic Time Series with Cassandra
  • Advanced Time Series with Cassandra
  • 关于Cassandra Cql 范围选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12191255/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com