CQL3中的集合是否有一定的限制?

Eas*_*ity 12 cassandra cql3

由于有两种方法可以支持CQL3中的宽行.一种方法是使用复合键,另一种方法是使用Map,List和Set等集合.复合键方法可以有数百万列(转换为行).这解决了我们的一些用例.

但是,如果我们使用集合,我想知道集合是否存在限制,可以存储一定数量/数量的数据(就像之前的Thrift C*一样,支持最多20亿列)

doa*_*hai 18

强烈建议仅在集合和地图中存储有限数量的数据.

原因:

  1. 集合和地图完全取自整体.您无法对集合进行"切片",因此在集合/映射中放置大量数据会在读取时对perf产生影响

  2. 列表的CQL3实现不适合在列表中间插入/删除.对于追加/前置操作,它非常快.对于索引i处的插入/移除元素,它将需要先读后读.基本上,列表的一部分将被重写,因为它们需要转移到良好的索引

  3. Set和Map的插入/删除更具性能,因为它们使用列键进行存储/排序/索引

现在回答你的问题,是否对集合/地图中的元素数量有一个硬性限制,答案是否定的,技术上除了已经存在于Thrift中的经典2亿限制之外没有其他限制是的,它是有限的如上所述由GlynD提供至65536.

相关的JIRA CASSANDRA-5428


Wil*_*ice 5

在版本2.1中解决CASSANDRA-5428之后以及使用本机协议的版本3或更高版本时,修订后的非冻结 集合相关限制为:

======+==========+================+================
 TYPE | SIZE     | # KEYS         | VALUE SIZE
======+==========+================+================
 List | 2B (231)  | n/a             | 65,535 (216-1)  
 Set  | 2B (231)  | n/a             | 65,535 (216-1)  
 Map  | 2B (231)  | 65,535 (216-1)  | 65,535 (216-1)  
======+==========+================+================

通过Thrift连接的客户端和早期版本的C*本机协议仍然受到相应传输的限制.