хранение массивных данных упорядоченных временных рядов в больших производных - PullRequest
38 голосов
/ 26 октября 2009

Я пытаюсь точно выяснить, чем на самом деле являются эти новые запутанные хранилища данных, такие как bigtable, hbase и cassandra.

Я работаю с огромными объемами данных фондового рынка, миллиардами строк данных о ценах / котировках, которые могут добавлять до 100 гигабайт каждый день (хотя эти текстовые файлы часто сжимаются как минимум на порядок). Эти данные в основном представляют собой несколько чисел, две или три короткие строки и метку времени (обычно уровень в миллисекундах). Если бы мне пришлось выбирать уникальный идентификатор для каждой строки, мне пришлось бы выбирать всю строку (так как обмен может генерировать несколько значений для одного и того же символа в одну и ту же миллисекунду).

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

Некоторые из этих систем (например, Кассандра) утверждают, что могут выполнять запросы диапазона. Смогу ли я эффективно запросить, скажем, все значения MSFT за определенный день, с 11:00 до 13:30?

Что если я захочу выполнить поиск по ВСЕМ символам за определенный день и запросить все символы с ценой от 10 до 10,25 долл. (Поэтому я ищу значения и хочу, чтобы в результате были возвращены ключи)

Что если я захочу получить два временных ряда, вычесть одно из другого и вернуть два временных ряда и их результат, придется ли мне выполнять его логику в моей собственной программе?

Чтение соответствующих статей, кажется, показывает, что эти системы не очень хорошо подходят для массивных систем временных рядов. Однако, если такие системы, как карты Google, основаны на них, я думаю, что временные ряды также должны работать. Например, представьте, что время - это ось X, а цены - как ось Y, а символы - как названные местоположения - внезапно выглядит, что bigtable должен быть идеальным хранилищем для временных рядов (если вся земля может быть сохранена, восстановлена , увеличенные и аннотированные, данные фондового рынка должны быть тривиальными).

Может ли какой-нибудь эксперт указать мне правильное направление или устранить любые недоразумения.

Спасибо

Ответы [ 6 ]

21 голосов
/ 04 ноября 2009

Я еще не эксперт , но я играю с Кассандрой уже несколько дней, и у меня есть несколько ответов для вас:

  1. Не беспокойтесь об объеме данных, это не имеет отношения к системам, таким как Cassandra, если у вас есть $$$ для большого аппаратного кластера.

Некоторые из этих систем (например, Кассандра) утверждают, что могут выполнять запросы диапазона. Смогу ли я эффективно запросить, скажем, все значения MSFT за определенный день, с 11:00 до 13:30?

Кассандра очень полезна, когда вы знаете, как работать с клавишами. Он может быстро перемещаться по клавишам. Поэтому для поиска MSFT между 11:00 и 13:30 вам нужно будет набирать строки следующим образом:

MSFT-отметка времени, GOOG-отметка времени, и т. Д. Затем вы можете указать Кассандре найти все ключи, которые начинаются с MSFT-сейчас и заканчиваются MSFT-сейчас + 1 час.

Что если я захочу выполнить поиск по ВСЕМ символам за определенный день и запросить все символы с ценой от 10 до 10,25 долл. (Поэтому я ищу значения и хочу получить ключи, полученные в результате)?

Я не эксперт, но до сих пор я понял, что Кассандра вообще не ищет по ценностям. Так что, если вы хотите выполнить вышеизложенное, вам нужно будет создать еще одну таблицу, посвященную именно этой проблеме, и спроектировать свою схему в соответствии с ситуацией. Но это не будет сильно отличаться от того, что я описал выше. Это все о именах ваших ключей и столбцов. Кассандра может найти их очень быстро!

Что если я захочу получить два временных ряда, вычесть одно из другого и вернуть два временных ряда и их результат, придется ли мне выполнять его логику в моей собственной программе?

Правильно, вся логика выполняется внутри вашей программы. Это не MySQL. Это просто механизм хранения. (Но я уверен, что следующие версии будут предлагать подобные вещи)

Пожалуйста, помните, что я новичок в этом, если я ошибаюсь, не стесняйтесь поправлять меня.

13 голосов
/ 04 ноября 2009

Если вы имеете дело с огромной базой данных временных рядов, то стандарты:

Это недешево, но они могут очень эффективно обрабатывать ваши данные.

12 голосов
/ 25 марта 2011

Кто-то, кого я уважаю, порекомендовал Открытую базу данных временных рядов. В частности, эта схема была самой красивой, которую он когда-либо видел.

http://opentsdb.net/

2 голосов
/ 30 января 2012

'Я стою перед той же горой. Моя основная проблема с cassandra заключается в том, что я не могу получить поток для набора результатов, например, в форме итератора.

Я уже просматриваю документы и сеть, но ничего.

Я не могу получить все ключи и затем получить строки, так как миллиарды строк делают это невозможным.

1 голос
/ 18 декабря 2013

Драйвер Java DataStax допускает автоматическое разбиение на страницы, так что результаты будут передаваться как итератор, и все это встроено. Кстати, в Cassandra 2.0.1 - http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0

0 голосов
/ 01 марта 2018

Просто для полноты изложения в 2018 году теперь существует специальная база данных только для данных временных рядов, которая называется TimescaleDB

http://www.timescale.com/

Этот блог стоит прочитать, он объясняет, почему он превосходит такие решения, как Cassandra, для этого особого случая и почему они решили построить его поверх реляционной базы данных PostgreSQL

https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c

...