Кассандра: создать уникальный идентификатор?
Я работаю над распределенной базой данных. Я пытаюсь создать уникальный идентификатор, который будет служить в качестве первичного ключа семейства столбцов в cassandra.
Я прочитал несколько статей об этом с помощью Java с помощью UUID
, но, похоже, существует вероятность столкновения (даже если оно очень низкое).
Интересно, есть ли способ генерировать уникальный идентификатор, основанный на времени, может быть?
Ответы
Ответ 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, нам нужен новый способ генерации идентификационных номеров. В Кассандре нет последовательного устройства генерации идентификаторов, и не должно быть.
Снежинка использует интуитивный алгоритм, который генерирует долготы, которые являются упорядоченными по времени и уникальными. Поскольку ваша база данных распределена, эта услуга должна удовлетворять вашим потребностям.