2016-05-04 108 views
0

我們正在嘗試爲Cassandra構建一個數據模型,並且有一個選項可用路徑視圖而不是經典表格/列視圖來保存數據。Cassandra「路徑」數據模型

例如

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指標和參數的方式這樣的模型將具有一種基於列的存儲,其具有更好的讀取性能因爲我們幾乎不需要獲取整行,而是在時間範圍內爲每個用戶提供一列。

有沒有人有這樣的數據模型的經驗,它真的比傳統的有更好的性能?你能對此提出任何建議嗎?

+1

當你沒有描述你想要建模的數據時,我們如何回答你的數據建模? – OrangeDog

回答

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 「)。每一行都可能位於不同的節點上。
第二個模型性能較差。