在cassandra中,可以添加到Map的最大项目数是多少?

f3temu5u  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(324)

我们已经创建了一个名为“user”的表,其中字段“books”是一个带有“type”的Map,如下所示

CREATE TABLE user (
    id uuid PRIMARY KEY,
    books map<text, frozen<book>>,
    issued frozen<map<text, boolean>>,
    createdat timestamp,
    lastmodified timestamp
);

CREATE TYPE book (
    number uuid,
    name text,
    lastmodified timestamp
);

“issued”字段的数据类型是带有布尔值的“map”。
在cassandra教程中,有这样一句话:“Map集合的最大键数是65535。”。这是否意味着我们只能在“已颁发”字段中添加65535个密钥?。
“books”字段是带有book“type”的Map。最大密钥限制是否也适用于具有“类型”的Map。或者我们可以在“type”中添加任意数量的键。我们能在“books”字段中添加超过65535个键吗?
在使用数据库进行检查时,我们能够在“books”字段下添加超过15万条记录,这是无法解释的。
在上面的“user”表中,有多少“book”类型的数据可以插入到“books”字段中?

j2cgzkjk

j2cgzkjk1#

“视情况而定”,你的有限的65535钥匙在发行是的,但也有实际的限制。整个Map必须从磁盘上读取,并在读取时放入内存中,因此在有很多Map的情况下读取非常昂贵。更好的选择实际上是创建一个如下表:

CREATE TABLE user_books (
   id uuid,
   title text,
   value book,
   PRIMARY KEY ((id), title)
)

如果书的标题是集群键,那么您可以通过一次高效的读取由用户获取所有的书,如果结果太大,驱动程序可以翻页查看结果。你也不必担心64k的限制。
另一种选择是:

CREATE TABLE user (
    id uuid,
    user_created timestamp STATIC,
    user_last_modified timestamp STATIC,
    title text,
    book_number uuid,
    book_name text,
    book_last_modified timestamp,
    issued boolean,
    PRIMARY KEY ((id), title)
);

您将在静态行中为每个用户id创建/最后修改一个,然后按标题(或图书id等)对每本书进行排序。这是假设两本发行的书有相同的密钥。这样,您就可以读取/更新单个表中的所有内容,并且不会受到收集限制和性能影响。

相关问题