輸入:表格數據文件:每個文件具有可變列數,並且這些列名對文件和/或其他文件(事先未知)可能是唯一的。這些數據預計不會改變,所以插入會很頻繁,但更新很少。列和它們的參數值可以是文本的或數字的。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