2011-11-29 159 views
5

我是Cassandra的新手,嘗試數據建模和範圍查詢。Cassandra範圍查詢

爲了學習的目的,我想開發一個數據庫,我可以用它們的LogType和Log生成時間存儲日誌行。我必須回答以下查詢:

按日誌範圍之間的LogType查找邏輯行。

I型我的數據庫爲2列族: 1)登錄

create column family log with comparator = 'UTF8Type' 
and key_validation_class = 'LexicalUUIDType' 
and column_metadata=[{column_name: block, validation_class: UTF8Type}]; 

,我正打算存儲日誌與線的LOGID的

例如:set log['7561a442-24e2-11df-8924-001ff3591711'][blocks]='someText|11-17-2011 23:40:42|sometext';

2)

create column family ltype with column_type = 'Super' 
and comparator = 'TimeUUIDType' 
and subcomparator = 'UTF8Type' 
and column_metadata=[{column_name: id, validation_class: LexicalUUIDType}]; 

在這個c olumn家人我將存儲日誌類型與時間和日誌列族日誌行ID一起:

ex: set ltype[ltype1][12307245916538][id]='7561a442-24e2-11df-8924-001ff3591711'; 

我想定的日誌和日期範圍的類型時,得到的結果。

有人可以指導我如何運行超級列家族的範圍查詢?

回答

6

在卡桑德拉時間序列數據建模的文章:

http://rubyscale.com/2011/basic-time-series-with-cassandra/

對於時間序列,你真的想這樣做較大的行 - 大概是在每行10K-50K柱附近爲起點(取決於你的負載)。您可以完全避免超列,如果你做的關鍵是「日期桶」的功能:

[日期時間] _ [5秒的時間間隔(粒度同樣取決於負載)

這樣你的密鑰可以可以重新創建,並且您只需發出一個multi_get,其中包含您想要的存儲桶的密鑰。

一種數據建模的更一般的概述:

http://www.datastax.com/docs/0.8/ddl/index

+0

由於zznate中,[鏈接](http://rubyscale.com/2011/basic-time-series-with-cassandra/)是相當有幫助。 – user1071714

+0

感謝zznate,[鏈接](http://rubyscale.com/2011/basic-time-series-with-cassandra/)相當有幫助。但是,我還有其他類似的時間範圍查詢來回答登錄行中的其他幾列。那麼你是否建議我使用[columnvalue-datetimeinterval]爲每個查詢列創建不同的列族,或者還有其他更好的解決方法? – user1071714