Как я могу получить уникальный длинный от Gemfire?

Мы работаем над многоуровневым Java-приложением, которое напрямую взаимодействует с Gemfire.

Нам нужно иметь возможность генерировать уникальные "длинные" порядковые номера, гарантированные уникальность для всех узлов приложения. (Не все узлы сгруппированы)

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

Каков наилучший способ для генерации этих гарантированных уникальных длинных значений без обращения к базе данных?

1 ответ

Первый вопрос, который нужно задать себе: действительно ли вам нужен длинный порядковый номер (монотонно увеличивающееся длинное целое число) или вам просто нужен глобально уникальный идентификатор (например, UUID).

Наиболее эффективным решением будет глобально уникальный идентификатор, и я бы просто предложил использовать GUID.

Если вам нужно глобально уникальное монотонно увеличивающееся длинное значение (длинная последовательность), вам придется использовать некоторую распределенную блокировку и увеличить значение в регионе. Метод для этого и производительность зависит от типа региона, который вы используете.

Посмотрите на Region.replace(K, V, V). Он может выполнять глобальное атомарное обновление значений в определенных определениях региона. Возможно, вам придется рассмотреть регион, в котором есть только ваши последовательности, если ваш текущий тип региона недостаточно определен.

Другие вопросы по тегам