Прежде всего, Кассандра - правильный инструмент для работы, которую вы пытаетесь сделать?Cassandra отлично справляется с распределенными, слабо связанными наборами данных, которым требуется высокая скорость чтения и записи, но она начинает становиться неуклюжей, когда вы хотите применить реляционную модель поверх нее, отсюда и мой вопрос. Если у вас набор данных с высокой степенью реляции, , как в примере, который вы показали здесь, где упор делается на определении отношений между информацией, тогда MySQL будет лучшим инструментом, чем Cassandra .
Я думаю, вы путаете сочетания клавиш как 1-1 с таблицами MySQL. Пространство ключей будет более точно соответствовать базе данных, а не таблице в базе данных. Во-первых, вы можете захотеть изменить настройки своего пространства ключей, чтобы собрать все вместе, что-то вроде этого:
keyspace: School
Column Family: Student ; Row Key: StudentID ; Col1 = First Name, Col2 = Last Name, Col3 = subjects, Col4 = class.
Повторите эти действия для двух других семейств столбцов - не уверены, нужны ли вам суперсайты или нет.
Для сквозного поиска вам необходимо создать семейство столбцов, например:
Column Family: Class ; RowKey: ClassId (ie 10th Grade) ; col1= (TeacherId:TeacherId), Col2 = (StudentId:StudentId)
построить семейную колонку отношений между конкретным классом и всеми людьми, которые к нему относятся.
Разделение
Да, вам нужно разбить их по предметам и поместить в их собственные семейства столбцов.Будьте осторожны, вы можете использовать вторичные индексы (по состоянию на Cassandra .7), которые позволяют выполнять больше запросов типа равенства, таких как:
get users where birth_date = 1973;
. Также обращайтесь к этому документ об использовании вторичных индексов.Соответствующая кавычка:
Встроенные вторичные индексы Cassandra лучше всего подходят для случаев, когда многие строки содержат индексированное значение.Чем больше уникальных значений существует в определенном столбце, тем больше у вас в среднем затрат на запрос и поддержку индекса.Например, предположим, что у вас есть пользовательская таблица с миллиардом пользователей, и вы хотите искать пользователей по состоянию, в котором они жили. Многие пользователи будут использовать одно и то же значение столбца для состояния (например, CA, NY, TX и т. Д.).Это было бы хорошим кандидатом на вторичный индекс.С другой стороны, если вы хотите искать пользователей по их адресу электронной почты (значение, которое обычно является уникальным для каждого пользователя), может быть более эффективно вручную поддерживать динамическое семейство столбцов как форму «индекса».Даже для столбцов, содержащих уникальные данные, часто для удобства целесообразно использовать вторичные индексы, если объем запроса к семейству индексированных столбцов умеренный и не находится под постоянной нагрузкой.
ЕслиВы еще не видели, веб-сайт DataStax ответит на многие ваши вопросы о Cassandra, я настоятельно рекомендую просмотреть его, если вы собираетесь широко использовать Cassandra.
Короче говоря, вы можете разделить элементы и создать семейства столбцов для каждого отношения, которое вы хотите поддерживать, ИЛИ возможно использовать вторичные индексы в зависимости от того, как вы разделяете ваши данные.Я лично предпочитаю первый метод - несмотря на шаблон - потому что я думаю, что он лучше масштабируется.