2014-02-18 2 views
3

Почему в ключах Кассандры обычно определяется как UUID. Похоже, что ключ создается на стороне клиента, так почему бы просто не хранить его как строку? Что полезно хранить в качестве UUID?Cassandra uuid as row key

ответ

3

Ключи Cassandra могут быть определены как любой тип (или комбинация therof), поэтому вы не ограничены UUID.

Но, почему вы должны использовать UUID над строкой:

UUID составляет 128 бит. Строка представляет собой переменную длину, а шестнадцатеричное представление строки для UUID должно содержать 32 символа. Если вы использовали 16-разрядные символы юникода, что означает, что для каждой клавиши потребуется 512-битное или в 4 раза больше места.

4

Возможно, любой ключ с Cassandra, ключ bytearray в любом случае. Если клиенты хотят иметь ключ типа «foobar» или любую другую строку произвольной длины, в этом нет ничего плохого. Клиент Cassandra преобразует его в массив байтов перед передачей на сервер Cassandra. Технически он будет храниться как «foobar» на стороне сервера.

Есть и другие вещи, которые нужно учитывать при принятии решения о ключевом формате:

  • Длина ключа имеет непосредственное влияние на производительность Кассандры. Держите их такими короткими, насколько это разумно, так что они могут быть полезны для доступа к данным. Короткий ключ, бесполезный для доступа к данным, не лучше, чем более длинный ключ с лучшими свойствами получения/сканирования. Ожидайте компромиссы при разработке ключей. Если у вас длинные строки как ключи, может быть хорошей идеей хешировать их в UUID.
  • Обратите внимание, что вы можете хранить UUID как удобочитаемую строку, которая имеет UUID, например 'f5606950-98d1-11e3-a5e2-0800200c9a66', но лучше всего использовать внутренний тип данных, который просто использует 16 байтов для его хранения.
  • Вам необходимо принять решение о том, следует ли использовать OrderedPreservingPartitioner or RandomPartitioner авансом, существует ряд компромиссов, но самое главное, как это повлияет на распределение ключей по кластеру. Обычно обычно идет с OrderedPreservingPartitioner, поскольку он позволяет иметь значимые проверки, в зависимости от того, какие ключевые значения он обычно приводит к узлам Cassandra для горячего/холодного режима. Чтобы снова помочь этому, либо использует хэш исходного ключа - UUID, либо добавляет реальный ключ с некоторым UUID.
  • Как вы планируете открыть свои ключи, это идет от простого get, чтобы slice и чрезмерно игнорировали delete, часто люди считают, что UUID является хорошим компромиссом
  • Как вы планируете балансировки нагрузки данных
1

Это экономит дисковое пространство при наличии большого количества строк.

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