2014-10-30 2 views
1

Я очень новичок в cassandra и в настоящее время на ранней стадии проекта, где я изучаю cassandra.Как автореплицировать данные в cassandra

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

У меня есть таблица, user_master, для пользователей. Пользователь имеет

  • предмета [тип текст]
  • хобби [список типов]
  • UID [тип INT]
  • около 40 больше атрибутов

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

  • Заголовок [Тип текст]
  • хобби [список типов]
  • UID [типа INT]

* Другие нерелевантные атрибуты не будут частью этой таблицы. Теперь мой вопрос:

  1. мне нужно писать на обеих таблицах для каждой вставки/обновления в user_master ли? Может ли обновление user_discovery быть автоматическим, если их есть какая-либо вставка/обновление в user_master.

  2. Даже после изучения немного, я все еще не так уверен, что создание отдельной таблицы приведет к увеличению performance.Since, число пользователей будет так же как в таблице (да, номер столбца будет очень меньше в user_discovery). Любые комментарии по этому поводу будут высоко оценены.

Благодаря

ответ

1

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

Вы не говорите, как выглядит ваш второй стол, но ваша формулировка «следующие атрибуты для каждого пользователя» выглядит так, будто вы планируете использовать пользователя (Id?) В качестве ключа. У этого действительно не было бы преимущества в производительности.

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

Сделайте то же самое для объекта (т. Е. Отдельная таблица, тема как ключ, идентификаторы пользователя как столбцы).

Затем, если вы хотите найти пользователя, имеющего список конкретных хобби, сделайте один запрос за хобби, создав пересечение пользователей.

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

Отказ от ответственности: Я использовал этот подход довольно успешно в относительной комплексной настройке, управляющей несколькими сотнями тысяч пользователей. Однако это было два года назад, в системе Cassandra 1.5. Я действительно не изучал новые возможности Cassandra 2.0, поэтому я понятия не имею, можно ли сегодня использовать более элегантный подход.

+1

Спасибо Томасу, это было действительно хорошее объяснение. Я был бы признателен, если бы вы могли поделиться хорошим чтением. – guptakvgaurav

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