输入:表格数据文件:每个文件具有可变列数,并且这些列名对文件和/或其他文件(事先未知)可能是唯一的。这些数据预计不会改变,所以插入会很频繁,但更新很少。列和它们的参数值可以是文本的或数字的。Cassandra中的地图冗余
请求的能力:能够通过身份或范围查询给定列名和值来检索数据的行。
数据模型:在CQL
我可以模拟使用表示一个文件的一个特定的单元格值的单个表(在这种情况下的文本,但也可构造成用于数字数据的类似的表)
create table mytable(
colname text,
value text,
filename text,
rowid int,
data map<text,text>,
primary key (colname , value, filename, rowid)#partitioning on colname may not be ideal here, but will be dealt with in ways unrelated to this question
);
例如,一个文件的内容可能是:
A B C D E
i1 i2 i3 i4 i5
插入是:
insert into mytable(colname, value, data, filename, rowid) values ('A', 'i1', {'A':'i1', 'B':'i2', 'C':'i3', 'D':'i4', 'E':'i5', 'F':'i5'}, 'F1', 1);
insert into mytable(colname, value, data, filename, rowid) values ('B', 'i2', {'A':'i1', 'B':'i2', 'C':'i3', 'D':'i4', 'E':'i5', 'F':'i5'}, 'F1', 2);
insert into mytable(colname, value, data, filename, rowid) values ('C', 'i3', {'A':'i1', 'B':'i2', 'C':'i3', 'D':'i4', 'E':'i5', 'F':'i5'}, 'F1', 3);
insert into mytable(colname, value, data, filename, rowid) values ('D', 'i4', {'A':'i1', 'B':'i2', 'C':'i3', 'D':'i4', 'E':'i5', 'F':'i5'}, 'F1', 4);
insert into mytable(colname, value, data, filename, rowid) values ('E', 'i5', {'A':'i1', 'B':'i2', 'C':'i3', 'D':'i4', 'E':'i5', 'F':'i5'}, 'F1', 5);
...
SELECT data from mytable where colname=? and value=?
问题:我们确实有数据存储限制 - 在此模型中的数据值是一个行的每个列的值是相同的,从而导致大量过度的数据重复的(这是一个简单的例子,但列数能超过100个 - 意味着地图可以重复数百次)。
问题:(通过指针到例如数据或以某种方式定义地图作为不同)是否有卡桑德拉任何方式,以避免这种类型的数据复制的,而无需创建/查询第二表?或者,另一种方法可以使用相同的查询功能和结果对数据进行建模?
你有没有考虑过使用Solr来解决这个问题呢? – Sreekar
感谢您的建议@Sreekar会研究它......尤其是Solr与文本或数字数据的性能(我们的数据可能是,我们正在寻找后者有效的范围查询) – copeg