我正在测试一个应用程序,其中集合的大小将来必然增长,64k是在某些情况下可能达到的限制。
这个问题与收集规模有关,因为官方文件中似乎存在矛盾。
根据this文件:
如果您将超过64K项目插入集合中,则只有64K项目 将是可查询的,导致数据丢失。
但如果您点击该页面上的CQL Limits link,您会看到:
收藏(清单):收藏规模:2B (2 ^ 31);值大小:65535(2 ^ 16-1)(Cassandra 2.1及更高版本,使用本机协议v3)
收藏(套装):收藏品大小:2B (2 ^ 31);值大小:65535(2 ^ 16-1)(Cassandra 2.1及更高版本,使用本机协议v3)
收藏(地图):收藏规模:2B (2 ^ 31);键数:65535(2 ^ 16-1);值大小:65535(2 ^ 16-1)(Cassandra 2.1及更高版本,使用 原生协议v3)
那是哪一个?每个系列64k项目,或每个集合20亿项目?或者是20亿可写但超过64k不可读?
提前致谢。
答案 0 :(得分:3)
您正在使用哪个版本的cassandra?
该文档适用于2.0和2.1。在这种情况下,您可以在集合中放置多少元素。这是64k。但是,如果使用本机协议v3,则每个元素的大小可以为2b。 检查此https://issues.apache.org/jira/browse/CASSANDRA-5428
但是如果您使用的是cassandra 2.2及更高版本,则可以将20亿个项目插入到集合中。 链接在这里。 http://docs.datastax.com/en/cql/3.3/cql/cql_using/useCollections.html
说过你不应该在集合中插入那么多项。在达到最大元素插入限制之前,您将遇到性能问题。
Collections cannot be "sliced"; Cassandra reads a collection in its entirety, impacting performance. Thus, collections should be much smaller than the maximum limits listed. The collection is not paged internally.
如果你必须拥有那么多项目,那么在那种情况下,集合不再适合,并且应该使用特定的表格(带有聚类列)。
我希望这会有所帮助。
答案 1 :(得分:2)
如果您使用cassandra 2.1,则无法在cassandra集合中添加超过64k的itens。在这个版本中,cassandra使用16位来索引元素。否则,单个项目可以是64k(大小)或2B(取决于协议)。