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

Кассандра: создать уникальный идентификатор?

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

Я прочитал несколько статей об этом с помощью Java с помощью UUID, но, похоже, существует вероятность столкновения (даже если оно очень низкое).

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

4b9b3361

Ответ 1

Вы можете использовать тип TimeUUID в Cassandra, который создает UUID типа 1. Это использует время и MAC-адрес создателя и порядковый номер. Если порядковый номер генерируется правильно, это можно сделать с нулевыми коллизиями. Основным преимуществом TimeUUIDs является то, что идентификаторы можно упорядочить по времени. Подробнее см. http://wiki.apache.org/cassandra/TimeBaseUUIDNotes.

Тем не менее, порядок времени вряд ли будет полезен для клавиш строки, так как упорядочение бесполезно при использовании хэш-разделителя. А также сложность генерации уникального идентификатора может быть источником ошибок. Cassandra также поддерживает UUID типа 4 с использованием типа UUID. Это просто случайные биты. Существует вероятность столкновения, но вероятность столкновения (если предположить, что некоррелированные источники случайных чисел, которые будут, если вы создадите на Java), крайне низки - если вы создали 1 миллиард в секунду в течение 100 лет, вероятность одного столкновения составляет около 50%, (Подробнее см. http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates.)

Ответ 2

Как сказал Ричард, вы можете использовать TimeUUID, а генерация значения TimeUUID - это не большая проблема. Просто следуйте cassandra FAQ timeuuid.

Ответ 3

Вам нужно использовать функцию cassandra now() для генерации timeuuid и использовать функцию uuid() для генерации строки типа uuid.

Ответ 4

Вам следует исследовать с помощью Twitter Snowflake. Из проекта readme:

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

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