【问题标题】:Column/Cell Versioning in CassandraCassandra 中的列/单元版本控制
【发布时间】:2016-08-16 13:14:46
【问题描述】:

我正在测试 Cassandra 并试图找出单元版本控制。我正在存储金融工具价格变动 - 有点扭曲 - 我正在阅读的消息流是基于增量的。这意味着我会收到一些关键的消息(比如说股票代码和日期)。当天的第一条消息有消息时间、所有标签(假设它们是买价、卖价和许多其他信息)。一整天,我收到的消息只有已更改的标签/字段和消息时间。因此,下一条消息可能是股票代码、日期、消息时间和要价,然后是该键的另一条消息,其他标签已更改。没有改变的值不会在以后的消息中重复。存储第一条消息,然后仅存储已更改的标签的其他行是不可接受的。这将迫使客户端必须在任何给定时间点完全重新组装状态。

用户需要在某个时间点查看该键的完整状态,或最后 N 个刻度(所有标签的完整状态),或某个时间范围内的所有刻度。以下是消息传递的示例:

*消息键是 StockSymbol 和 Date(意味着具有相同 StockSymbol 和 Date 的每条消息都是对滴答的更新。假设是价格)

收到 4 条消息:

StockSymbol = 1, AskPrice= 1.00, BidPrice =1.05, Date=2016-08-15, MessageTime=1

StockSymbol = 1, AskPrice= 1.05, BidPrice =1.10, Date=2016-08-15, MessageTime=2

StockSymbol = 1,BidPrice =1.15,Date=2016-08-15,MessageTime=3

StockSymbol = 1, AskPrice= 1.10, Date=2016-08-15, MessageTime=4

所以有 4 条消息具有相同的密钥。我希望数据库看起来像这样(请注意插入中存在未更改的字段:

第 1 行:StockSymbol = 1,AskPrice= 1.00,BidPrice =1.05,Date=2016-08-15,MessageTime=1

第 2 行:StockSymbol = 1,AskPrice= 1.05,BidPrice =1.10,Date=2016-08-15,MessageTime=2

第 3 行:StockSymbol = 1,AskPrice= 1.05,BidPrice =1.15,Date=2016-08-15,MessageTime=3

第 4 行:StockSymbol = 1,AskPrice= 1.10,BidPrice =1.15,Date=2016-08-15,MessageTime=4

...或者有一种方法可以在一行中将新版本添加到已更改的列中。有点像 HBase 所做的。

每天有数十亿条此类消息。不是全部在一个键上,因此任何列都不会有数十亿个版本。也许几千。

我正在研究一堆建模选项,但我认为将帖子发布到社区也是一个好主意。

我希望这是有道理的......

谢谢。

【问题讨论】:

  • 到目前为止,我想出的唯一真正方法是批量读取 N 条消息,按键选择现有行,更新/覆盖更改的值并重新插入批处理,从而创建一个副本。最新的副本会有一个标志 LATEST = 'Y'(可能)

标签: cassandra


【解决方案1】:

我的想法是创建一个与此架构匹配的新表:

StockSymbol  PartitionKey,
Date  PartitionKey,
Type   ClusteringKey,
Value

根据您的示例数据,TYPE 字段的值将是“BidPrice”或“AskPrice”。

VALUE 字段的值将是 BidPrice (1.05) 或 AskPrice (1.00) 的值。

这允许为每个 STOCKSYMBOL、每个 DATE 和每个 TYPE 存储一个值。您将能够通过 SYMBOL 和 DATE 进行查询,以接收包含所有数据类型的单个分区。

问题是您必须按类型插入数据(每种类型调用一次)。任何时候插入数据都会覆盖该 STOCKSYMBOL、DATE 和 TYPE 的先前值。这将确保它始终是最新的信息。

【讨论】:

  • 感谢 gsteiner。问题是我需要“所有”版本,意思是这两次之间或过去某个确切时间的出价和询价的完整状态是什么?另外,为了简洁起见,我举了一个简单的例子。实际上会有 100 列。它们都出现在该键的当天第一条消息中,然后在一天中,随着特定字段的值发生变化,会发出一条新消息,其中仅包含该更改(例如 1 或 2 个字段,但可能更多)。对该数据的任何检索都应显示所有标签在该时间点的完整状态。是的,很乱。
猜你喜欢
  • 2012-09-05
  • 2013-09-05
  • 2010-10-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多