由于在CQL3中支持宽行有两种方法。一种方法是使用复合键,另一种方法是使用Map,List和Set之类的集合。复合键方法可以有数百万列(转换为行)。这解决了我们的一些用例。
但是,如果我们使用集合,我想知道集合是否存在限制,可以存储一定数量/数量的数据(就像之前的Thrift C *连续支持多达20亿列一样)< / p>
答案 0 :(得分:18)
强烈建议仅在馆藏中存储有限数量的数据。地图。
原因:
完整地提取集合和地图。你不能 集合上的“切片”,因此在集合/映射中放入了大量数据 阅读时会对性能产生影响
列表的CQL3实现不具备 在列表中间插入/删除。用于追加/前置 操作,它很快。对于索引处的插入/移除元素 我,它需要一个先读后读。基本上,列表的一部分 将被重写,因为他们需要转移到良好的指数
Set和Map的插入/删除因使用而更具性能 存储/排序/索引的列键
现在回答你的问题,对于集合/地图中的元素数量是否存在硬性限制,答案是否,从技术上讲,除了已经存在的经典2亿个限制之外没有其他限制节俭是的,如GlynD上面提到的那样,它被限制在65536。
相关的JIRA CASSANDRA-5428
答案 1 :(得分:15)
除性能问题外,还存在协议问题,限制您可以访问的项目数为65536.
答案 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。