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

StackOverflow https://stackoverflow.com/questions/1623399

Вопрос

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

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

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

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

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

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

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

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

Спасибо

Это было полезно?

Решение

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

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

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

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

MSFT-TIMESTAMP, GOOG-TIMESTAMP.

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

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

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

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

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

Другие советы

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

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

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

http://opentsdb.net/

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

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

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

Драйвер DataStax Java обеспечивает автоматическую разбивку по страницам, поэтому результаты будут передаваться в потоковом режиме, как итератор, и все это встроено.Кстати, это в Кассандре 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top