【发布时间】: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