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

1

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

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

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

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

  • 3
    Я ничего не знаю о gemfire, но обобщенным решением для получения уникального идентификатора в распределенной системе является назначение каждому узлу уникального префикса вручную. Затем, когда вам нужно новое уникальное число, объедините префикс этого узла с увеличенным суффиксом, где каждый узел поддерживает свой наивысший выделенный суффикс.
  • 0
    @bhspencer это работает, если нам не нужен глобальный порядок, который сообщает, приходит ли одно событие раньше другого
Показать ещё 2 комментария
Теги:
gemfire

1 ответ

3

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню