列为动态时的 Cassandra 数据建模
Cassandra data modeling when columns are dynamic
我正在为 cassandra 中的数据建模而苦苦挣扎,我对不同的组织有不同的属性。由于会有任意数量的属性,我无法对模式中的动态列数进行建模。其次,当我为此使用地图时,我无法查询这些属性或为它们编制索引等。我是否遗漏了什么或者这是 cassandra 的限制?
场景
一个组织选择特定的属性来收集数据,他们可以随时更改这些属性。当它们改变时,属性的数量和属性的名称也会改变。如果以前我们收集 att1,attr2,attr3
的数据,现在我们正在收集 attr4,attr5,attr6,attr7,attr8,attr9
。对于任何组织,这都可以随时更改。此外,组织将大量搜索这些属性。
- 我们如何在 cassandra 中模拟这种情况。
- 如果这是一个限制,我们有什么 cassandra 的替代品 read/write
(主要是写,经常是读。不是update/delete)
熟练程度。
- 我们是否必须将任何其他框架与 cassandra 结合起来?像 lucene 等
提前致谢。
这种情况确实需要有关执行的查询等的更多信息。
在最简单的情况下,只需将属性名称作为现有的聚类列,如下所示:
create table tbl (
id int,
collected timestamp,
attr_name text,
attr_value int,
primary key(id, collected, attr_name);
在这种情况下,您可以select任一单独的属性
select * from tbl where id = ... and collected = ... and attr_name = 'attrX';
或者您可以 select 所有属性,只需省略 attr_name
:
select * from tbl where id = ... and collected = ...;
但只有当所有属性值都具有相同的数据类型时它才会起作用。如果它们可能不同,那么您可能需要为每种数据类型添加更多字段。
我正在为 cassandra 中的数据建模而苦苦挣扎,我对不同的组织有不同的属性。由于会有任意数量的属性,我无法对模式中的动态列数进行建模。其次,当我为此使用地图时,我无法查询这些属性或为它们编制索引等。我是否遗漏了什么或者这是 cassandra 的限制?
场景
一个组织选择特定的属性来收集数据,他们可以随时更改这些属性。当它们改变时,属性的数量和属性的名称也会改变。如果以前我们收集 att1,attr2,attr3
的数据,现在我们正在收集 attr4,attr5,attr6,attr7,attr8,attr9
。对于任何组织,这都可以随时更改。此外,组织将大量搜索这些属性。
- 我们如何在 cassandra 中模拟这种情况。
- 如果这是一个限制,我们有什么 cassandra 的替代品 read/write (主要是写,经常是读。不是update/delete) 熟练程度。
- 我们是否必须将任何其他框架与 cassandra 结合起来?像 lucene 等
提前致谢。
这种情况确实需要有关执行的查询等的更多信息。
在最简单的情况下,只需将属性名称作为现有的聚类列,如下所示:
create table tbl (
id int,
collected timestamp,
attr_name text,
attr_value int,
primary key(id, collected, attr_name);
在这种情况下,您可以select任一单独的属性
select * from tbl where id = ... and collected = ... and attr_name = 'attrX';
或者您可以 select 所有属性,只需省略 attr_name
:
select * from tbl where id = ... and collected = ...;
但只有当所有属性值都具有相同的数据类型时它才会起作用。如果它们可能不同,那么您可能需要为每种数据类型添加更多字段。