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

时间:2013-09-02 12:38:06

标签: cassandra cql3

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

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

5 个答案:

答案 0 :(得分:18)

强烈建议仅在馆藏中存储有限数量的数据。地图。

原因:

  1. 完整地提取集合和地图。你不能 集合上的“切片”,因此在集合/映射中放入了大量数据 阅读时会对性能产生影响

  2. 列表的CQL3实现不具备 在列表中间插入/删除。用于追加/前置 操作,它很快。对于索引处的插入/移除元素 我,它需要一个先读后读。基本上,列表的一部分 将被重写,因为他们需要转移到良好的指数

  3. Set和Map的插入/删除因使用而更具性能 存储/排序/索引的列键

  4. 现在回答你的问题,对于集合/地图中的元素数量是否存在硬性限制,答案是否,从技术上讲,除了已经存在的经典2亿个限制之外没有其他限制节俭是的,如GlynD上面提到的那样,它被限制在65536。

    相关的JIRA CASSANDRA-5428

答案 1 :(得分:15)

答案 2 :(得分:5)

修订后的非冻结 collection-related limits,在版本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 *本机协议仍然受到相应传输的限制。

答案 3 :(得分:4)

除了http://www.datastax.com/documentation/cql/3.1/cql/cql_using/use_collections_c.html

中集合中64k项目的限制外

这些是 TWO 限制:

  

项目的最大尺寸限制为64k(未指明的短片的最大值)

     

集合中的项目数量限制为64K(未指定短片的最大值)

答案 4 :(得分:0)

集合也被序列化,因此增加了开销。参见CASSANDRA-5428。