我们正在尝试为Cassandra构建数据模型,并且可以选择使用 path 视图而不是经典表/列视图来保存数据。
例如
CREATE TABLE data1 (
user uuid,
timestamp timeuuid,
column1 int,
column2 int
primary key (user, timestamp)
)
CREATE TABLE `data2` (
user uuid,
timestamp timeuuid,
column1 int,
column2 int
primary key (user, timestamp)
)
成为一个表格,如:
create table all_data (
user uuid,
timestamp timeuuid,
path text,
value blob
primary key (user, timestamp, path)
)
我们将数据插入
insert into all_data (user, timestamp, path, value) values (1,0,'data1.column1',1)
insert into all_data (user, timestamp, path, value) values (1,0,'data1.column2',2)
insert into all_data (user, timestamp, path, value) values (1,9,'data2.column1',7)
insert into all_data (user, timestamp, path, value) values (1,9,'data2.column1',8)
这有点类似于石墨收集statsd指标的方式,这种模型的参数是为一列提供具有更好读取性能的基于列的存储,因为我们几乎从不需要获得整行,而是每个用户一列在时间范围内。
有没有人有这种数据模型的经验,它是否真的比经典的更好?你能就此提出任何建议吗?
答案 0 :(得分:0)
取决于您追求的数据。
如果您想获得[user,timestamp]的所有列,那么您将需要使用第一个模型。一个查询(WHERE user = 1 AND timestamp = 0)将查看一个节点以检索所有列
要使用第二个模型,您必须为每个可能的用户/时间戳/路径组合执行查询。如果只有column1&如果存在column2,则需要2个查询来检索它们(WHERE user = 1 AND timestamp = 0 AND path ='data1.column1')(WHERE user = 1 AND timestamp = 0 AND path ='data1.column2')。每一行都可能位于不同的节点上
第二种模式的性能较差。