我是Cassandra的新手,正在尝试数据建模和范围查询。
出于学习目的,我想开发一个数据库,我可以在其中存储LogType和Log生成时间的日志行。我必须回答以下问题:
在日期范围之间按LogType查找日志。
我将我的数据库建模为2个列系列: 1)记录
create column family log with comparator = 'UTF8Type'
and key_validation_class = 'LexicalUUIDType'
and column_metadata=[{column_name: block, validation_class: UTF8Type}];
我打算用logid的
存储日志行 ex: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}];
在此列系列中,我将存储日志类型以及时间和日志列系列中的日志行ID:
ex: set ltype[ltype1][12307245916538][id]='7561a442-24e2-11df-8924-001ff3591711';
我想在给定日志和日期范围的类型时得到结果。
有人可以指导我如何在超级列系列上运行范围查询吗?
答案 0 :(得分:6)
关于Cassandra的时间序列数据建模的文章:
http://rubyscale.com/2011/basic-time-series-with-cassandra/
对于时间序列,你真的想要做更大的行 - 可能在每行10k-50k列附近作为起点(取决于你的负载)。如果将密钥作为“日期存储桶”的函数,则可以完全避免使用超级列:
[datetime] _ [5秒间隔](粒度再次取决于负载)
通过这种方式可以重新创建密钥,而您只是发布了一个带有所需存储桶密钥的multi_get。
数据建模的更一般概述: