2016-08-16 3 views
1

Я тестирую Кассандру и пытаюсь выяснить, как управлять версиями камер. Я храню ценовые тики финансовых инструментов - с завихрением - поток сообщений, который я читаю, дельта-основан. Значение Я получу сообщение для некоторого ключа (скажем, Символ Акции и Дата). Первое сообщение дня имеет время сообщения, все теги (скажем, это цена предложения, цена запроса и многие другие части информации). В течение дня я получаю сообщения, в которых есть ТОЛЬКО те теги/поля, которые были изменены, и время сообщения. Поэтому, возможно, следующим сообщением будет «Символ запаса», «Дата», «Время сообщения» и «Спросить цену», затем изменилось другое сообщение для этого ключа с другими тегами. Ни одно из значений, которые не были изменены, повторяется в последующих сообщениях. Было бы неприемлемо хранить первое сообщение, а затем дополнительные строки только для измененных тегов. Это заставило бы клиента полностью восстановить состояние в любой момент времени.Редактирование столбцов/ячеек в Cassandra

Пользователи должны видеть, что полное состояние этого ключа в какой-то момент времени или последние N тиков (полное состояние всех тегов) или все тики за определенный промежуток времени. Вот пример того, что обмен сообщениями будет выглядеть следующим образом:

клавиша * Сообщение является StockSymbol и дата

4 (то есть каждое сообщение, которое имеет тот же StockSymbol и дата является обновлением клеща Допустим, это цена.) Получено сообщений:

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

S tockSymbol = 1, BidPrice = 1,15, Date = 2016-08-15, MessageTime = 3

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

Итак, есть 4 сообщения с одним и тем же ключом. Я хотел бы, чтобы db выглядел так (обратите внимание, что поля, которые не менялись, присутствуют на вставках:

Строка 1: StockSymbol = 1, AskPrice = 1.00, BidPrice = 1.05, Date = 2016-08-15 , MessageTime = 1

Строка 2: StockSymbol = 1, AskPrice = 1,05, BidPrice = 1.10, дата = 2016-08-15, MessageTime = 2

Строка 3: StockSymbol = 1, AskPrice = 1,05, BidPrice = 1,15, дата = 2016-08-15, MessageTime = 3

Ряд 4: StockSymbol = 1, AskPrice = 1.10, BidPrice = 1,15, дата = 2016-08-15, MessageTime = 4

... или у вас есть возможность просто добавить новую версию в столбцы, которые были изменены в одной строке. Это похоже на то, что делает HBase.

Существует миллиарды этих сообщений в день. Не все на одном ключе, поэтому не будет миллиардов версий любого столбца. Может быть, несколько тысяч.

Я вникаю в кучу вариантов моделирования, но я думал, что это хорошая идея для публикации в сообществе.

Надеюсь, это имеет смысл ...

спасибо.

+0

И до сих пор единственным реальным способом, с которым я столкнулся, является чтение N сообщений в пакете, выбор существующих строк по ключу, обновление/наложение измененных значений и повторная вставка в пакетном режиме, копия. У самой последней копии будет флаг LATEST = 'Y' (возможно) – James

ответ

0

Моя мысль была бы создать новую таблицу, которая соответствует этой схеме:

StockSymbol PartitionKey, 
Date PartitionKey, 
Type ClusteringKey, 
Value 

Значение поля TYPE будет «BidPrice», или «AskPrice» на основе данных выборки.

Значения поля VALUE будут значением BidPrice (1.05) или AskPrice (1.00).

Это позволяет хранить одно значение для каждого STOCKSYMBOL для каждой DATE и для каждого TYPE. Вы сможете запросить SYMBOL и DATE, чтобы получить один раздел со всеми ТИПА данных.

Дело в том, что вам придется вставлять данные по типу (один вызов для каждого типа). В любое время, когда данные вставлены, он перезапишет предыдущее значение VALUE для этих STOCKSYMBOL, DATE и TYPE. Это гарантирует, что это всегда самая актуальная информация.

+0

Спасибо gsteiner. Проблема в том, что мне нужны «все» версии, то есть, что было полным состоянием заявки и спросить между этими 2 раза или в какое-то точное время в прошлом? Кроме того, я привел простой пример для краткости. На самом деле будет 100 столов. Все они заполняются первым сообщением дня для этого ключа, затем в течение дня, как значения для определенного изменения поля, появляется новое сообщение с этим изменением (например, 1 или 2 поля, но может быть больше). Любое извлечение этих данных должно показывать полное состояние в тот момент времени всех тегов. Да, грязный. – James

Смежные вопросы