首页 文章

查询Cassandra多列

提问于
浏览
2

我正在使用Cassandra来存储股票信息 . 每个'行'都有一些基本字段,如:时间,价格,收盘价,开盘价,低价,高价等 . 在这些字段的顶部,我有一个浮点型值列表,其中包含一些内部系统计算 .

对象示例:

Class stockentry

    time timestamp;
    price float;
    close float;
    open float; 
    low float; 
    high float;

    x float;
    y float;
    z float;
    xx2 float;
    xx3  float;
    xx... yy... z... 
    a lot more...

在列族中创建大量列并存储所有这些数据对于Cassandra来说没有问题 . 问题在于查询它 . 我想查询x,y,xx2等字段,这些字段包含一个非常独特的数据值(浮点数为4位小数) .

将所有这些列(100-150)添加为二级索引可能不是一个好的解决方案,并且Cassandra文档不推荐这样做 .

在使用Cassandra时,考虑到要求,推荐的数据建模是什么?

2 回答

  • 0

    Cassandra数据建模遵循 query-driven design 模式 . 这意味着,我们不是构建一个模型来自然地表示数据(就像我们在RDBMS中那样),而是设计模式来代替数据访问模式 .

    例如,如果您知道大多数查询都涉及 x 列上的 where 子句,并且按 y 列中的行排序,则可能需要创建一个其他表,其中分区键为 x ,并且群集列是 y . 例如:

    CREATE TABLE <tablename>
    "x" float,
    "y" float,
    "price" float,
    .
    .
    <rest of columns>
    .
    .
    PRIMARY KEY("x","y"));
    

    现在,在x列中查询变得非常有效,因为x的特定值的数据被存储在一起 .

    对于需要一系列值的查询(x> pricerange),最好将它们存储为聚类列 .

    不可否认,这会导致多次写入,因为列x和y中的值必须跨两个表写入 . Cassandra鼓励写作,因为在这个时代存储数据很便宜 . 从本质上讲,在Cassandra中,您可以使用额外的写入来进行快速读取 .

    因此,在设计数据模型之前,请考虑最有可能进行哪种查询并进行相应的设计 .

  • 2
    CREATE TABLE pricing(
     id blob,
     price_tag string, // open, close, high, low, ...
     time timestamp,
     value float,      // I would suggest blob with custom/thrift serialization
     PRIMARY KEY (id, price_tag, time)
    )
    

    它将随着时间的推移为不同的价格类型提供非常有效的查询

    您可以在精彩的演示文稿中找到更多信息:http://www.slideshare.net/carlyeks/nyc-big-tech-day-2013?ref=http://techblog.bluemountaincapital.com/

相关问题