2013-04-16 2 views
5

Я ищу создание базы данных таймсеров Cassandra для хранения миллионов ежедневных ежедневных данных, которые могут потенциально иметь до 100B точек данных.Разработка базы данных таймсеров в Кассандре

Я смотрел на эту статью: http://rubyscale.com/blog/2011/03/06/basic-time-series-with-cassandra/

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

Два вопроса у меня есть:

  • Я смотрю на хранение до 20000 датируемых (ежедневно) столбцов. Стоит ли даже очертить строки, например. год с этим количеством столбцов? Имеются ли какие-либо преимущества/недостатки для строгания строк, чтобы уменьшить количество столбцов до 365 в год.
  • Другая идея, которую я имею, заключается в том, чтобы вместо столбцов по столбцам создавать столбцы на каждый год. Таким образом, при обращении к данным за несколько лет мне пришлось бы запрашивать несколько семейств столбцов, а не одно семейство столбцов, и присоединяться к результатам на стороне клиента. Будет ли этот подход ускорить процесс или, скорее, замедлить все?

ответ

4

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

Запись всегда на 1 ключ означает, что все записи для этой клавиши перейдут на один узел. В основном вы будете использовать один узел в день из своего кластера, поэтому у вас также может быть один огромный экземпляр Cassandra, а не устанавливать кластер. Если ваша частота записи становится очень высокой, вы можете сбить узлы, ответственные за этот день/ключ.

Моя рекомендация состоит в том, чтобы вставлять один день в несколько строк, которые используются одновременно. Время bucketing может быть опасно, поскольку внезапный всплеск во время одного ведра может привести к снижению.

вы можете создать ведро (ключ строки), как это:

  • [ROW_BASE_NAME] + [ДЕНЬ] + someHashFunction (метка времени)% 10
  • [ROW_BASE_NAME] + [ДЕНЬ] + random.nextInt (10)
  • [ROW_BASE_NAME] + [ДЕНЬ] + nextbucket < --- то есть, если у вас есть надежный способ повернуть ведро себя

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

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

+0

Итак, вы считаете, что в окошечных таблицах и семействах столбцов нет точек в отдельных семействах столбцов, но для этого нужно делать строки? Есть ли недостаток, если слишком много строк в одном семействе столбцов? – datageek

+2

Семейство колонок - это просто дополнительный ключевой уровень.Если мои данные имеют одинаковую природу и нужны одинаковые настройки в виде кэширования, сравнения (имена столбцов) и т. Д. Затем я помещаю их в одно и то же семейство столбцов. Плюс колонковые семейства не так просто управлять программно. Просто создайте его для создания нового ключа. И вы не можете читать из отдельных CF в одном запросе. –

1

Вы также должны прочитать эту статью по адресу Advanced Time Series with Cassandra.

+0

Я видел это благодаря, на самом деле мне не нравится это решение из передовой статьи временного ряда. Если бы я понял, это требует помещения данных как Json? – datageek

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