2016-12-30 5 views
2

Я новичок в Cassandra, поэтому я прочитал десяток статей об этом, и поэтому я знаю основы. Все учебники показывают эффективный поиск данных на 1 или 2 столбца и временной диапазон. Я не мог найти, как правильно моделировать ваши данные, если у вас больше условий.Модель данных Cassandra с несколькими условиями

У меня есть большие события нормализованы базы данных, с довольно небольшим числом столбцов, говорят:

  • Тип события
  • время
  • электронной
  • User_age
  • user_country
  • user_language
  • и так далее.

Мне нужно будет иметь возможность запрашивать все столбцы. Таким образом, в RDBMS я бы запрос:

SELECT email FROM table WHERE time > X AND user_age BETWEEN X AND X AND user_language = 'nl' и т.д ..

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

Мой вопрос, очевидно, как я могу правильно моделировать данные такого рода в Кассандре?

Большое спасибо!

+0

Таким образом, потенциальное решение будет таким: Создайте отдельную таблицу для каждого типа события. У нас есть столбец «merchant_id», который мы можем использовать в качестве ключа раздела, мы всегда смотрим таймер и merchant_id, так что на одном разделе. Не могли бы мы добавить остальные как вторичные индексы? потенциально все еще может быть миллионы строк в таблице eventtype + merchant_id + выбор времени. –

ответ

4

Мне нужно будет иметь возможность запрашивать все столбцы.

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

Можем ли мы добавить остальное как вторичные индексы? потенциально все еще может быть миллионы строк в таблице eventtype + merchant_id + выбор времени.

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

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

+0

Поблагодарите Aaron за ваш ответ. Я надеялся, что использование ключа раздела Merchant и timuuid на кластеризованном ключе создаст индекс только для этого раздела, сохранив его быстро. Я не знаком с olap, но похоже, что он предназначен для аналитики, а не для получения идентификаторов пользователей. (я посмотрел на apache kylin). Как вы думаете, лучший вариант? может быть, может быть? –

+0

Мы попытаемся использовать hadoop для этого –