document此列出了一些CQL限值卡桑德拉2.2。我在爲Set
和List
的數據收集限制特別感興趣。如果我已經正確解釋它,文檔指出Sets中的值限制爲65535字節。CQL列表值是否真的限制爲65535字節?
據我所知,這個限制的存在是因爲集合標識是通過存儲引擎單元的列名稱中的複合值實現的(類似於集羣列值限制),CQL限制爲那麼多字節。
考慮一個表,其中的Set
像
CREATE TABLE test.bounds (
someid text,
someorder text,
words set<text>,
PRIMARY KEY (someid, someorder)
)
與
PreparedStatement ps = session.prepare("INSERT INTO test.bounds (someid, someorder, words) VALUES (?, ?, ?)");
BoundStatement bs = ps.bind("id", "order", ImmutableSet.of(StringUtils.repeat('a', 66000)));
session.execute(bs);
這將拋出預期的異常
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: The sum of all clustering columns is too long (66024 > 65535)
現在,如果我更改表使用List
而不是Set
CREATE TABLE test.bounds (
someid text,
someorder text,
words list<text>,
PRIMARY KEY (someid, someorder)
)
,並使用
BoundStatement bs = ps.bind("id", "order", ImmutableList.of(StringUtils.repeat('a', 66000)));
我沒有收到異常。 該文件,然而,指出List
值大小也侷限於65535個字節。文檔不正確還是我誤解了?
我假定List
值被實現爲基礎存儲簡單的列值和順序通過它們的時間戳保持。