2016-05-26 5 views
1

Я новичок в Кассандре, недавно я очень хорошо смотрел tutorials на DataStax, который был посвящен моделированию данных.Каковы стандартные способы синхронизации (копирования) данных между некоторыми таблицами в Кассандре?

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

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

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

наших колонкам для видео таблицы:

video_id | video_title | video_create_year | director | timestap 

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

Нам может понадобиться, чтобы отсортировать таблицу по имени директора (ASC | DESC), video_create_year (ASC | DESC), video_title (ASC | DESC)

Я не уверен, должны ли мы делать различные таблицы для каждая разная сортировка?

Такие, как:

videos_by_diractor_asc 
videos_by_diractor_desc 
videos_by_title_asc 
videos_by_title_desc 

Так на ...

ли я правильно понимаю?

Второй вопрос,, если я правильно понял, то я забыл сделать таблицу, чтобы я мог необходимое на нашем сайте (Представьте себе, в один прекрасный день я получаю я забыл иметь video_by_title_asc) то, что я должен делать? Должен ли я писать программу и копировать целые данные из таблицы видео? Или есть какие-то способы в Кассандре копировать целые данные, если это необходимо?

Надеюсь, вопрос не был путаным.

ответ

2

Хорошо, вы понимаете Кассандру частично вправо.

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

videos_by_diractor_asc PRIMARY KEY(director) 
videos_by_title_asc PRIMARY KEY(title) 

Но в этом случае вы забыли одну вещь: ключ раздела. Ключ раздела - это первая часть первичного ключа. Думаю, в вашем случае год имеет смысл. Все строки с одним ключом раздела всегда находятся на одном узле. Кассандра разделила ваши строки ключом раздела. Столбцы после ключей раздела, называемые столбцами, сортируются. Ключи разделов не сортируются. Это означает: node1 может иметь 2015, 1998 и 1950 годы и node2 2010, 1990, 1577. Кассандра равномерно распределяет данные между узлами. При моделировании вам нужно подумать об одной важной вещи: каков ожидаемый размер моей таблицы внутри одного ключа раздела. Это означает, что в видеоролике сколько строк вы ожидаете в течение одного года? 2 Mio? 1 млрд? Если вы получите более 2-х строк строки x, у вас будет огромная проблема. 2bln - максимальный размер каждого ключа раздела. Но помните: это максимум.Я рекомендую не более 500 миллионов человек. Я рассчитываю, в худшем случае, 500 миллионов.

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

Первый ключ раздела. Это означает: вам всегда нужен год в вашем состоянии. Затем ваши данные, с тем же ключом раздела, отсортированы по умолчанию в ASC, режиссером. После режиссера по названию. В этом случае вы не можете использовать это условие WHERE: WHERE year = 2016 и title = 'whatever'

Хорошо, теперь я отвечу на ваш основной вопрос :) Дело в дублированных данных. В Cassandra 3.0 вы можете использовать материализованные виды. Да, это хорошая функция, но у нее есть накладные расходы. Лучшее решение - написать обертку вокруг cassandra. Эта оболочка выполняет только одно: она обрабатывает все эти дублированные данные. Он знает, что лучший способ получить доступ к данным, если вам это нужно, отсортировано по названию, а затем режиссером, а не отсортировано по режиссеру, а затем по названию. И одно: не нужно писать данные 5 или более раз. Кассандра оптимизирована для написания. Все нормально писать данные. Но не забывайте об одном: Cassandra - это база данных для известных запросов. Если вы знаете, что вам понадобятся данные действительно часто в этом порядке сортировки, создайте для него таблицу. Но если вы этого не знаете и создаете эту таблицу только для случая, когда: Не создавайте таблицу. Для этого, иногда запросы, вы можете использовать искру или другое решение.

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