我有一个使用 CQL3 的数据模型,如下所示
CREATE TABLE test(
userid text,
entry_date timestamp,
attributes map<text, text>,
primary key (userid,entry_date)
);
map 包含大量数据。我需要基于 map 键进行搜索以及查询以支持基于用户 ID 和日期范围的搜索。 你能帮助我了解数据模型以及使用 datastax 驱动 api 的 java 示例吗?如果我可以转换为宽行,您能否告诉我如何使用 java 组织和获取数据。
最佳答案
首先,当您说您的 map 中包含大量数据时,这是什么意思? Collection 中有 64K 件元素的限制,因此请注意这一点。
其次,C* 表的设计应支持您的查询。如果您有多个查询,通常会产生多个表。您提供的表格将支持您对用户 ID 和日期范围的查询。对于基于您的属性的查询,您可以尝试将它们存储在 map 中:
CREATE TABLE test(
userid text,
entry_date timestamp,
attribute_key text,
attribute_value text,
PRIMARY KEY ((userid, entry_date), attribute_key)
);
此数据模型通过其键和值来划分您的 map 。通过添加 attribute_key 作为聚类列,您将获得宽行。请记住复合分区键,但您将需要 userid 和 entry_date 字段来进行查询。
关于java - 宽行的 Cassandra CQL3 java 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31723206/