2016-11-05 52 views
2

我正在测试一个应用程序,其中集合的大小将来会增长,64k是在某些情况下可能达到的限制。什么是正确的卡桑德拉收集限制?

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

this文件:

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

但是,如果你点击到CQL Limits link是很页面上,你看到这一点:

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

  • 收藏(集):收藏大小:2B(2^31);值大小:65535(2^16-1)(卡桑德拉2.1和更高,使用本机协议V3)

  • 集合(MAP):集合大小:2B(2^31);按键数:65535(2^16-1);值大小:65535(2^16-1)(卡桑德拉2.1和更高,使用 本地协议V3)

所以哪一个是什么?每个藏品64k个项目,或每个藏品20亿个项目?或者是20亿可写但不可读超过64k?

在此先感谢。

+0

虽然这是稍微偏离主题,请注意更新集合,您需要小心如何实施它以避免过多的墓碑,请参阅此技术说明:https://support.datastax.com/hc/en-us/articles/205368125 – markc

+0

感谢您的观察@markc - 我只在所有设置/列表/地图相关的查询中使用更新。这似乎更自然。 –

回答

3

你正在使用哪个版本的cassandra?

该文档是2.0和2.1。在这种情况下,您可以将多少元素放入集合中存在限制。这是64k。但是如果您使用本地协议版本3,则每个元素的大小可以为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.

如果你能有多大的项目是那么在这种情况下集合是不适用了,应使用一个特定的表(聚类列)。

我希望这会有所帮助。

+0

感谢您的回答,这是我所推断的,但我想确保。请注意,我提供的两个文档链接都是针对Cassandra 3.1的,这​​意味着文档需要更新。 –

2

如果您使用cassandra 2.1,则无法在cassandra集合中添加超过64k的itens。在这个版本中,cassandra使用16位来索引元素。否则,单个项目可以是64k(大小)或2B(取决于协议)。

+0

Oi Gustavo。蟒蛇头。你确定吗?卡桑德拉的文档似乎不明确或不太清楚。为什么他们会将版本号注释为具有更高限制(Cassandra 2.1及更高版本,使用本地协议v3)?再次感谢。 –

+1

其实它取决于cassandra的版本。 cassandra 2.1就像@ root545所说的那样。我会编辑我的答案。 –