2016-11-05 47 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所說的那樣。我會編輯我的答案。 –