хранение массивных упорядоченных данных временных рядов в производных bigtable


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

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

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

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

Что делать, если я хочу выполнить поиск по всем символам для данного дня и запросить все символы, цена которых находится между $ 10 и $10.25 (поэтому я ищу значения и хочу, чтобы в результате были возвращены ключи)?

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

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

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

Спасибо

6 37

6 ответов:

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

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

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

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

Во вторник-времени, аналоги-метки , ..и т.д. Затем вы можете сказать Кассандре, чтобы она нашла все ключи, которые начинаются с MSFT-now и заканчиваются MSFT-now+1hour.

Что делать, если я хочу выполнить поиск по всем символам для данного дня и запросить все символы, цена которых находится между $ 10 и $10.25 (поэтому я ищу значения и хочу, чтобы в результате были возвращены ключи)?

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

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

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

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

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

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

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

Http://opentsdb.net/

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

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

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

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

Просто для полноты прочтения этого в 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