正确的 Cassandra 集合限制是多少?

Jos*_*eca 4 cassandra

我正在测试一个应用程序,其中集合的大小将来必然会增长,并且在某些情况下可能会达到 64k 的限制。

这个问题是关于集合大小限制的,因为官方文档似乎存在矛盾。

根据文件:

如果将超过 64K 的项插入到集合中,则只有其中 64K 是可查询的,从而导致数据丢失。

但是,如果您单击该页面上的CQL 限制链接,您会看到以下内容:

  • 集合(List):集合大小:2B(2^31);值大小:65535 (2^16-1)(Cassandra 2.1 及更高版本,使用本机协议 v3)

  • 集合(Set):集合大小: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)

那么是哪一个呢?每个集合 64,000 个项目,还是每个集合 20 亿个项目?或者说 20 亿可写,但超过 64k 就无法读取?

提前致谢。

man*_*nuj 5

您使用的是哪个版本的 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.

如果您必须拥有那么多的项目,那么在这种情况下集合不再合适,应该使用特定的表(带有集群列)。

我希望这有帮助。