Супер колонка против сериализации против 2 поисков в Кассандре - PullRequest
2 голосов
/ 27 сентября 2011

У нас есть:

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

Мы рассматривали следующие варианты в Cassandra для семейства столбцов Events.Общий доступ ко всем альтернативам: key = user_id (UUID), column_name = event_time

  1. column_value = сериализованный объект свойств события.Потребуется каждый раз читать / записывать все свойства (не проблема), но также может быть затруднено отладка (невозможно легко использовать клиент командной строки Cassandra)

  2. столбецна самом деле супер-столбец, подколонки являются отдельными свойствами.Означает чтение всех событий (?) Каждый раз (возможно, хотя и неоптимально).Любые другие минусы?

  3. column_value является ключом строки для другого CF, где хранятся свойства события.Означает поддержание двух таблиц -> усложняет вызовы + чтение / запись медленнее (?).

Что-то нам не хватает?Какая-нибудь стандартная передовая практика здесь?

1 Ответ

0 голосов
/ 28 сентября 2011

Альтернатива 1: зачем идти на Кассандру, если вы хотите хранить сериализованный объект?MongoDB или аналогичный продукт лучше справится с этой задачей, если я правильно ее решу (на самом деле я никогда не пробовал основывать документы на NoSQL, поэтому исправьте меня, если я ошибаюсь в этом).Во всяком случае, я попробовал эту альтернативу один раз в MySQL 6 лет назад, и сегодня все еще трудно поддерживать ее.

Альтернатива 2: Извините, мне еще не приходилось играть с суперболу.Использовал бы это, только если бы мне приходилось часто показывать много информации о многих пользователях (т.е. гораздо больше, чем просто их имя пользователя и несколько квалификаторов) и их соответствующие события в одном запросе.Также может сделать запрос на основе заданного промежутка времени немного сложным, если есть условия и для самого пользователя, поскольку в строке пользователя, скорее всего, есть столбцы событий, которые соответствуют размеру других столбцов, которые этого не делают.

Альтернатива 3: в большинстве случаев, безусловно, будет моим выбором.Вы вряд ли будете писать события и создавать пользователя в одной транзакции, поэтому не беспокойтесь о последовательности.Используйте само имя пользователя в качестве стандартного столбца событий (не забудьте его проиндексировать), чтобы ваши звонки были довольно быстрыми.Подробнее об этом типе модели данных можно узнать по http://www.datastax.com/docs/0.8/ddl/index. Да, это чтение двух вызовов, но в любом случае это два разных семейства данных.

Что касается лучших практик, то это поле довольно новое, не уверен, что есть какие-либо широко одобренные.

...