【问题标题】:Cassandra append-only timeseries modelling/queryingCassandra 仅追加时间序列建模/查询
【发布时间】:2016-09-30 23:03:16
【问题描述】:

我正在对 Cassandra 中的金融股票价格存储进行建模,我需要在其中满足追溯变化的需求。 我想到了一个仅附加的数据库。

CREATE TABLE historical_data ( ticker text, eoddate timestamp, price double, created timestamp, PRIMARY KEY(ticker, eoddate) ) WITH CLUSTERING ORDER BY (eoddate DESC);"""

例如,一条记录可能是: 股票代码=AAPL,eoddate=2016-09-28,价格=123.4,创建=2016-09-28 16:30:00

一天后,有一个复古数据修复,我会插入另一条记录 股票代码=AAPL,eoddate=2016-09-28,价格=120.9,创建=2016-09-29 09:00:00

如果我想获取 AAPL 的最新系列(即过滤第一个值),那么建模/查询这些数据的最佳方法是什么? 在 SQL 中,我可以编写一个分区查询。在 CQL 中怎么样?

还是应该在应用程序级别应用过滤器?

谢谢。

【问题讨论】:

  • 您好,要正确建模,我们需要更多信息,更准确地说:基数。最多有多少个股票(当然是估计的)?每个股票有多少更新?每天/小时/分钟 1 次?数据保留策略(我想在你的情况下,数据永远不会被删除)。您的案例中的记录是可变的还是不可变的?
  • 是的,我正在尝试在 Cassandra 中创建一个不可变的、仅附加的模式模型。上面的财务收盘只是一个例子。为了便于讨论,我假设有 30k 个股票代码,并且每个股票代码很可能每天都有一个收盘价,除了极少数情况下的回顾性更改(例如,每周更新一个值),我会插入新的价值。挑战在于找到有效查询数据的方法。如果是 SQL,我会执行“按 EOD 从分区中选择(每个分区选择最新的一个)”。我将如何在 CQL 中做类似的事情?

标签: database cassandra cql finance


【解决方案1】:

如果我正确理解您的需求,那么您的桌子就很好。 使用此架构,您可以运行如下查询:

SELECT price
FROM historical_data
WHERE ticker = 'AAPL'
LIMIT 1;

它将返回股票代码 AAPL 的最新价格。

CLUSTERING ORDER BY 子句按特定ticker 的降序对数据进行物理排序,它不会对整个表进行排序。所以这个查询应该足够了。

【讨论】:

    猜你喜欢
    • 2017-04-13
    • 2017-06-23
    • 2014-03-04
    • 2014-11-18
    • 2017-04-30
    • 2016-08-29
    • 2014-05-07
    相关资源
    最近更新 更多