我有一种具有动态属性的对象(记录)(多达数百个属性)。事实上我不知道该对象会有什么属性,因为它是由最终用户决定的,我想我应该使用地图类型来存储Cassandra的属性及其值。
我现在想要2种查询模式:
last
attribute<X>=<value>
条记录
attribute<x>=<value>
分组的给定attribute<y>
的所有记录,记录时间介于time range
<x>
和<y>
在设计时未确定。它随着最终用户的定义而变化。
因为集合类型不能用作主键的一部分,所以我想知道是否有任何好的方法来建模,或者我需要依赖二级索引。我不愿意使用二级索引,因为它需要查询所有Cassandra节点。
所以,我的问题是,如何根据我的要求为Cassandra建模关键空间?
进一步讨论:
P / s:我是Cassandra的新手,如果我滥用任何条款,请原谅我。
答案 0 :(得分:1)
如果我了解您的需求,您可以创建一个表格AnchorPane homePage = (AnchorPane) loader.load();
,用于存储常见属性,例如records
作为静态列,以及两个字段time
和name
来存储键值对属性。
value
按原样提供,此表只能按CREATE TABLE record (
record_id uuid,
time date static,
name string,
value string,
PRIMARY KEY (record_id)
);
进行查询。要添加更多查询复杂性,您可以使用record_id
:
MATERIALIZED VIEW
使用此结构,您可以为第一个查询模式运行查询:
CREATE MATERIALIZED VIEW record_by_attribute
AS
SELECT *
FROM record
WHERE record_id IS NOT NULL
AND name IS NOT NULL
PRIMARY KEY ((name, record_id);
对于你的第二个需求,我认为你必须创建第二个表来存储所有属性组合的聚合结果(cassandra不支持GROUP BY子句)并像我上面所说的那样查询它。
希望它可以帮到你。