Подтвердить что ты не робот

Автоматический прирост столбца Cassandra

Я пытаюсь понять Cassandra и как структурировать семейства столбцов (CF), но это довольно сложно, так как я привык к реляционным базам данных.

Например, если я создаю простой users CF и пытаюсь вставить новую строку, как я могу сделать инкрементный ключ, как в MySQL?

Я видел много примеров, где вы просто поместили бы имя пользователя вместо уникального идентификатора, и это будет иметь мало смысла, но что, если я хочу, чтобы у пользователей были дублированные имена пользователей?

Также как я могу выполнять поиск, когда из того, что я понимаю, кассандра не поддерживает операторы >, поэтому что-то вроде select * from users where something > something2 не будет работать.

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

Итак, в основном мне нужно краткое объяснение, как начать работу с Cassanda.

4b9b3361

Ответ 1

Ваши вопросы довольно общие, но позвольте мне нанести удар. Во-первых, вам нужно смоделировать свои данные с точки зрения ваших запросов. С помощью РСУБД вы моделируете свои данные в некоторой нормализованной форме, а затем оптимизируете позже для своих конкретных запросов. Вы не можете сделать это с Кассандрой; вы должны написать свои данные так, как вы собираетесь их читать. Часто это означает написание его более чем одним способом. В общем, это помогает полностью избавиться от мышления RDBMS, если вы хотите эффективно работать с Cassandra.

Относительно ключей:

  • Они используются в Кассандре как единица распределения по кольцу. Таким образом, ваш ключ получит хэширование и назначит "владельца" на ринге. Используйте RandomPartitioner для обеспечения равномерного распределения

  • Предполагая, что вы используете RandomPartitioner (вы должны), ключи не сортируются. Это означает, что вы не можете запрашивать ряд ключей. Однако вы можете запросить список ключей в одном запросе.

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

Что касается предикатов запроса:

  • Вы можете получить диапазоны данных, предполагая, что вы правильно их моделируете, чтобы отвечать на ваши запросы.

  • Поскольку столбцы записываются в отсортированном порядке, вы можете запросить диапазон от столбца A до столбца n с помощью запроса на срез (который очень быстрый). Вы также можете использовать составные столбцы, чтобы немного абстрагировать этот механизм.

  • Вы можете использовать вторичные индексы в столбцах, где у вас низкая мощность - это дает вам возможность запроса по значению.

  • Вы можете создавать свои собственные индексы, где данные сортируются так, как вам нужно.

Относительно группировки:

Я предполагаю, что вы имеете в виду создание агрегатов. Если вам нужны ваши данные в режиме реального времени, вы захотите использовать какой-то внешний механизм (например, Storm) для отслеживания данных и постоянного обновления ваши соответствующие агрегаты в CF. Если вы создаете агрегаты как часть пакетного процесса, Cassandra имеет отличную интеграцию с Hadoop, позволяя вам писать задания на карте/сокращение вакансий в Pig, Hive или непосредственно на выбранном вами языке.

Ответ 2

К вашему первому вопросу:

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

Нет, не совсем - не родной для Кассандры. Как создать идентификаторы автоматического увеличения в Cassandra - Вы можете проверить здесь дополнительную информацию: http://srinathsview.blogspot.ch/2012/04/generating-distributed-sequence-number.html

Второй вопрос - это то, как вы храните и моделируете данные Cassandra.

Проверьте опцию поиска stackoverflow. Много интересных вопросов!

Самое главное, Когда НЕ использовать Cassandra?

Ответ 3

Возможно, вы захотите проверить PlayOrm. Хотя я согласен, вам нужно вырваться из СУБД, думая, что иногда ваш первичный ключ, поскольку идентификатор пользователя - это только неправильный выбор. Иногда это правильный выбор (зависит от ваших требований).

PlayOrm - это сочетание noSQL и реляционных концепций, так как вам нужны оба, и вы можете делать Scalable-SQL с помощью соединений и всего. Вам просто нужно разбить таблицы, которые, по вашему мнению, будут расти в миллиарды/триллионы строк, и вы можете запросить их в этих разделах. Даже с CQL вам нужно разбить свои таблицы. Что вы можете разбить? время подходит для некоторых случаев использования. Другие могут быть разделены клиентами, поскольку каждый клиент действительно представляет собой мини-базу данных в вашем кластере noSQL.

Что касается ключей, PlayOrm генерирует уникальные ключи "кластера", которые являются именами хостов-уникальными вThatHost, в основном как TimeUUID, за исключением довольно короткого и читаемого, поскольку мы используем имена хостов в нашем кластере a1, a2, a3 и т.д. и др.