【问题标题】:Cassandra Range QueriesCassandra 范围查询
【发布时间】:2012-01-09 00:34:10
【问题描述】:

我是 Cassandra 的新手,正在尝试数据建模和范围查询。

出于学习目的,我想开发一个数据库,我可以在其中存储日志行及其 LogType 和日志生成时间。我必须回答以下问题:

在日期范围内按 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 存储日志行的地方

例如: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';

我想在给定日志类型和日期范围时得到结果。

有人可以指导我如何在超级列族上运行范围查询吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    一篇关于 Cassandra 中时间序列数据建模的文章:

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

    对于时间序列,您确实希望做更大的行 - 可能在每行 10k-50k 列附近作为起点(取决于您的负载)。如果您将键设为“日期桶”的功能,则可以完全避免超级列:

    [datetime]_[5 秒间隔](粒度再次取决于负载)

    通过这种方式可以重新创建您的密钥,并且您只需发出一个带有所需存储桶密钥的 multi_get。

    数据建模的更一般概述:

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

    【讨论】:

    • 谢谢 zznate,link 很有帮助。
    • 谢谢 zznate,link 很有帮助。但是,我得到了其他类似的时间范围查询来回答日志行中的其他几列。那么您是否建议我使用 [columnvalue-datetimeinterval] 为每个查询的列创建不同的列族,还是有其他更好的解决方法?
    猜你喜欢
    • 2015-03-10
    • 2012-03-13
    • 2015-08-18
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多