Как я могу получить уникальный длинный от Gemfire?
Мы работаем над многоуровневым Java-приложением, которое напрямую взаимодействует с Gemfire.
Нам нужно иметь возможность генерировать уникальные "длинные" порядковые номера, гарантированные уникальность для всех узлов приложения. (Не все узлы сгруппированы)
Обычно я создаю последовательность в Oracle, но в этом случае, даже если наша конфигурация Gemfire имеет соединение с реляционной базой данных для записи с сохранением, наше приложение не имеет других знаний о базе данных.
Каков наилучший способ для генерации этих гарантированных уникальных длинных значений без обращения к базе данных?
1 ответ
Первый вопрос, который нужно задать себе: действительно ли вам нужен длинный порядковый номер (монотонно увеличивающееся длинное целое число) или вам просто нужен глобально уникальный идентификатор (например, UUID).
Наиболее эффективным решением будет глобально уникальный идентификатор, и я бы просто предложил использовать GUID.
Если вам нужно глобально уникальное монотонно увеличивающееся длинное значение (длинная последовательность), вам придется использовать некоторую распределенную блокировку и увеличить значение в регионе. Метод для этого и производительность зависит от типа региона, который вы используете.
Посмотрите на Region.replace(K, V, V). Он может выполнять глобальное атомарное обновление значений в определенных определениях региона. Возможно, вам придется рассмотреть регион, в котором есть только ваши последовательности, если ваш текущий тип региона недостаточно определен.