Этот вопрос довольно старый, но я бы хотел дополнить его другим решением.
Любое решение, основанное на синхронизации узлов, нецелесообразно. Это почти наверняка сломать, блокируя генерацию идентификаторов или создавая дубликаты идентификаторов.
MySQL way
Вы можете воспроизвести способ репликации мастер-мастер mysql с параметрами auto_increment_increment
и auto_increment_offset
.
Чтобы воспроизвести его, вам нужно знать количество узлов или максимальное число ожидаемых узлов, а также вам нужно создать (не-кассандровый) счетчик (файл для примера) на каждом узле.
Каждый раз, когда вы хотите сгенерировать новое число, вы находите текущее значение, добавляете приращение и сохраняете его. Если он еще не существует, это смещение.
Таким образом, для 10 узлов вы получите приращение 10 и смещение 1 для первого узла, 2 для второго узла и т. Д. Узел 1 создаст идентификаторы 1, 11, 21. Узел 2 создаст ID 2, 21, 22.
Если вы хотите, чтобы ваши идентификаторы были (приблизительно) упорядочены между узлами, вам необходимо поддерживать общий счетчик и убедиться, что каждый сгенерированный идентификатор выше, чем общий счетчик. Таким образом, если ваши узлы / центры обработки данных не синхронизированы в течение длительного времени, вы не заметите большой разницы.
Префикс
В принципе, вы можете сделать то же самое, поставив перед идентификатором (если это приемлемое решение) номер узла (или имя). И вам не нужно знать количество узлов.
Узел 1 будет создавать 1_1, 1_2, 1_3. Узел 2 создаст 2_1, 2_2, 2_3.