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