Cassandra UUID ключ раздела и размер раздела - PullRequest
0 голосов
/ 12 июня 2018

Учитывая таблицу

CREATE TABLE sensors_by_id (
    id uuid,
    time timeuuid,
    some_text text,
    PRIMARY KEY (id, time)
) 

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

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Это может быть проблема с размером раздела, потому что у cassandra есть ограничение на размер диска на один раздел.

Хорошее правило - сохранять максимальное количество строк ниже 100 000 элементов и размер диска менее 100 МБ .

С помощью этой формулы легко рассчитать размер раздела enter image description here

Подробнее омоделирование данных здесь .

Так что в вашем случае с текущей схемой для 1 000 000 количество строк на один раздел со средним размером 100 байт для some_text столбца будет:

Number of Values: (1000000 * (3 - 2 - 0) + 0) = 1000000

Partition Size on Disk: (16 + 0 + (1000000 * 116) + (8 * 1000000))
= 124000016 bytes (118.26 Mb)

Так что вы можете видеть, что вы превысили предел 118,26 Мб на один раздел.Поэтому вам нужно оптимизировать ключи разделов.

Я рассчитал его, используя мой проект с открытым исходным кодом - cql-calculator .

0 голосов
/ 12 июня 2018

Это действительно зависит от того, как вы будете вставлять свои данные - если вы генерируете UUID действительно случайным образом для каждой вставки, то вероятность дублирования очень мала , и вы получите так называемый "тощий"ряды "(много перегородок с 1 строкой внутри).Даже если вы начнете получать дубликаты, их будет не так много для каждой строки ...

...