Кассандра: создание модели данных / схемы - PullRequest
3 голосов
/ 01 ноября 2011

(Не уверен, как это называется ... модель .. схема .. супер модель?)

У меня есть «n» (однозначно идентифицированные) датчики в «m» (однозначно идентифицированных) домах. Каждый из этих срабатывает от 0 до 'k' раз / день (в блоках 1-5). Эти данные в настоящее время хранятся в MySQL с таблицей для каждого «дома» и структурой:

time stamp
sensor id
firing count

У меня проблемы с тем, чтобы обернуть свой разум вокруг модели этих данных «nosql», которая позволила бы мне найти количество выстрелов по дому, времени или датчику.

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

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Это зависит. Подумайте «сначала запрос»:

  1. определить запросы
  2. модель данных

Итак, хотя у вас может быть семейство столбцов, которое является вашей физической моделью, у вас также будет один или несколько, которые предоставляют данные по мере их запроса. Кроме того, вы можете в дальнейшем воспользоваться функциями Cassandra, такими как:

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

Хорошо подходит для хранения тысяч столбцов для каждого ключа , и столбцы останутся отсортированными и смогут получать доступ в прямом или обратном порядке; Итак, чтобы продолжить приведенный выше пример, можно легко получить список всех временных меток для датчика

Составные типы данных позволяют объединять несколько бит данных в ключи, имена или значения. например объединить идентификатор дома и идентификатор датчика

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

Индексы могут быть определены для статических имен столбцов , что в действительности обеспечивает обратное Семейство столбцов с ключом в качестве результата, просто следите за размером сегмента (например, может не потребоваться, чтобы значения были в миллисекундах)

1 голос
/ 01 ноября 2011

Для сохранения количества срабатываний по датчику и дому:

House_Sensors     <-Column family 
  house_id        <-Key
    sensor_id     <-Column name
    firing_count  <-Column value

Данные представлены в формате JSON-ish

House_Sensors = {
 house_1 : {
  sensor_1: 3436,
  sensor_2: 46,
  sensor_3: 99,
  ...
 },
 house_2 : {
  sensor_7: 0,
  sensor_8: 444,
  ...
 },
 ...
}

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

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

Временная метка стрельбы не сохраняется в семействе столбцов House_Sensor. Создайте новое семейство столбцов для этого с параметром sensor_id в качестве ключа.

Таким образом, вы можете использовать семейство House_Sensor для запроса количества срабатываний и того, какой датчик принадлежит каждому дому. Используйте другое семейство столбцов для запроса метки времени запуска.

...