由于有两种方法可以支持CQL3中的宽行.一种方法是使用复合键,另一种方法是使用Map,List和Set等集合.复合键方法可以有数百万列(转换为行).这解决了我们的一些用例.
但是,如果我们使用集合,我想知道集合是否存在限制,可以存储一定数量/数量的数据(就像之前的Thrift C*一样,支持最多20亿列)
doa*_*hai 18
强烈建议仅在集合和地图中存储有限数量的数据.
原因:
集合和地图完全取自整体.您无法对集合进行"切片",因此在集合/映射中放置大量数据会在读取时对perf产生影响
列表的CQL3实现不适合在列表中间插入/删除.对于追加/前置操作,它非常快.对于索引i处的插入/移除元素,它将需要先读后读.基本上,列表的一部分将被重写,因为它们需要转移到良好的索引
Set和Map的插入/删除更具性能,因为它们使用列键进行存储/排序/索引
现在回答你的问题,是否对集合/地图中的元素数量有一个硬性限制,答案是否定的,技术上除了已经存在于Thrift中的经典2亿限制之外没有其他限制是的,它是有限的如上所述由GlynD提供至65536.
相关的JIRA CASSANDRA-5428
在版本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*本机协议仍然受到相应传输的限制.