使用 Cassandra Collections 可以吗?
Is it OK to use Cassandra Collections?
我看过很多博客告诉我不要使用 Cassandra COLLECTIONS。由于 UPDATE 操作也会创建 Tombstone,因此会影响性能。并且由于过多的墓碑可能导致应用程序死亡。
是否可以存储次要手机号码、用户电子邮件等更新较少的数据?
等等?
或者我是否应该使用 CSV 或 JSON 存储在 Varchar 中来避免收集?
是的,你可以使用collection
请记住 collection 有大小限制:
- Collection(列表):collection 大小:2B (2^31);值大小:65535 (2^16-1)(Apache Cassandra™ 2.1 及更高版本,使用本机协议 v3)
- Collection(套):collection尺寸:2B(2^31);值大小:65535 (2^16-1)(Apache Cassandra 2.1 及更高版本,使用本机协议 v3)
- Collection(地图):collection 大小:2B (2^31);键数:65535 (2^16-1);值大小:65535 (2^16-1)(Apache Cassandra 2.1 及更高版本,使用本机协议 v3)
对于墓碑创建测试,假设您有 table
CREATE TABLE playlists (
id uuid,
song_order int,
tags set<text>,
PRIMARY KEY(id, song_order )
);
如果您使用以下更新语句,将创建墓碑
UPDATE playlists SET tags = {'1973'}
WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204 AND song_order = 1;
但是如果你使用下面的更新语句,将不会创建逻辑删除
UPDATE playlists SET tags = tags + {'1973'}
WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204 AND song_order = 1;
我看过很多博客告诉我不要使用 Cassandra COLLECTIONS。由于 UPDATE 操作也会创建 Tombstone,因此会影响性能。并且由于过多的墓碑可能导致应用程序死亡。
是否可以存储次要手机号码、用户电子邮件等更新较少的数据? 等等?
或者我是否应该使用 CSV 或 JSON 存储在 Varchar 中来避免收集?
是的,你可以使用collection
请记住 collection 有大小限制:
- Collection(列表):collection 大小:2B (2^31);值大小:65535 (2^16-1)(Apache Cassandra™ 2.1 及更高版本,使用本机协议 v3)
- Collection(套):collection尺寸:2B(2^31);值大小:65535 (2^16-1)(Apache Cassandra 2.1 及更高版本,使用本机协议 v3)
- Collection(地图):collection 大小:2B (2^31);键数:65535 (2^16-1);值大小:65535 (2^16-1)(Apache Cassandra 2.1 及更高版本,使用本机协议 v3)
对于墓碑创建测试,假设您有 table
CREATE TABLE playlists (
id uuid,
song_order int,
tags set<text>,
PRIMARY KEY(id, song_order )
);
如果您使用以下更新语句,将创建墓碑
UPDATE playlists SET tags = {'1973'}
WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204 AND song_order = 1;
但是如果你使用下面的更新语句,将不会创建逻辑删除
UPDATE playlists SET tags = tags + {'1973'}
WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204 AND song_order = 1;