Cassandra CQL3按群集密钥效率排序(带限制子句?)
我有下表(使用CQL3): 我想按tuuid排序行。但这只有在我限制碎片时才可能——我知道这是由于性能 我使用shard纯粹是为了切分,我可以将它的值范围限制在某个小范围[0-16]内,比如说。然后,我可以运行如下查询: 从测试中选择*,其中按tuuid limit L以(0,…,15)顺序分片 表中可能有数百万行,因此我想了解这种order by查询的性能特征。一般来说,性能可能非常差,但如果使用一个合理数量的limit子句(顺序为10K),这可能不会太差-即16路合并,但限制相当低Cassandra CQL3按群集密钥效率排序(带限制子句?),cassandra,query-performance,cql3,cqlsh,Cassandra,Query Performance,Cql3,Cqlsh,我有下表(使用CQL3): 我想按tuuid排序行。但这只有在我限制碎片时才可能——我知道这是由于性能 我使用shard纯粹是为了切分,我可以将它的值范围限制在某个小范围[0-16]内,比如说。然后,我可以运行如下查询: 从测试中选择*,其中按tuuid limit L以(0,…,15)顺序分片 表中可能有数百万行,因此我想了解这种order by查询的性能特征。一般来说,性能可能非常差,但如果使用一个合理数量的limit子句(顺序为10K),这可能不会太差-即16路合并,但限制相当低 任何提示
任何提示、建议或代码中的指针都将非常感谢。您的数据将根据您的列键进行排序。因此,上述查询中合并的性能问题不会因为where子句而发生,而是因为您的LIMIT子句afaik 您的列是按照tuuid的顺序插入的,因此没有性能问题 如果一次获取的行太多,我建议创建一个test_元表,每个X-insert在其中存储最新的timeuuid,以获取查询将获取的行的上限。然后,您可以将查询更改为: 从测试中选择*,其中(0,…,15)中的碎片,tuuid>x,tuuid
对于缓存等常规优化,首先请阅读how,然后请参阅。您的数据是根据列键排序的。因此,在上面的查询中,合并中的性能问题不会因为WHERE子句而发生,而是因为LIMIT子句afaik 您的列是按照tuuid的顺序插入的,因此没有性能问题 如果一次获取的行太多,我建议创建一个test_元表,每个X-insert在其中存储最新的timeuuid,以获取查询将获取的行的上限。然后,您可以将查询更改为: 从测试中选择*,其中(0,…,15)中的碎片,tuuid>x,tuuid
对于缓存等一般优化,首先,阅读how,然后,请参阅。是的,我应该详细说明-我的错误。tuuid列正好用于“where tuuid>”。其想法是我得到一批行(按tuuid asc排序)并返回它们,然后让客户端在下一次查询中使用成功处理的最后一个tuuid。但这确实意味着我需要order by tuuid子句,这将需要跨碎片合并。这是我想要了解的性能。在您对行数的评论中,我指的是逻辑行数。这将产生影响应该是宽行(PK的其余部分是列名)。是的,我应该详细说明-我的错误。tuuid列正好是用于“where tuuid>”的。我的想法是得到一批行(按tuuid asc排序)并返回它们,然后让客户端在下一次查询中使用成功处理的最后一个tuuid。但这确实意味着我需要order by tuuid子句,这将需要跨碎片合并。这是我想要了解的性能。在您对行数的评论中,我指的是逻辑行数。这将产生影响可以是宽行(PK的其余部分是列名)。
create table test (
shard text,
tuuid timeuuid,
some_data text,
status text,
primary key (shard, tuuid, some_data, status)
);