Распределенный генератор идентификаторов#
Введение#
Распределенная атомарная последовательность, которую представляет интерфейс IgniteCacheAtomicSequence, аналогична распределенному атомарному типу long, но ее значение может только увеличиваться. Последовательность также резервирует диапазон значений, чтобы избежать дорогостоящих сетевых запросов и обновлений кластера каждый раз, когда она должна предоставить следующее значение. При выполнении метода incrementAndGet() или любой другой атомарной операции над последовательностью структура данных заранее резервирует диапазон значений. Они гарантированно будут уникальными во всем кластере для этого экземпляра последовательности.
Атомарная последовательность — подходящая и эффективная структура данных для реализации распределенного генератора идентификаторов. Его можно использовать, например, для создания уникальных первичных ключей во всем кластере.
Пример создания атомарной последовательности
Ignite ignite = Ignition.ignite();
IgniteAtomicSequence seq = ignite.atomicSequence(
"seqName", // Название последовательности.
0, // Начальное значение для последовательности.
true // Создайте, если его не существует.
);
Пример использования атомарной последовательности
Ignite ignite = Ignition.ignite();
// Инициализируйте атомарную последовательность.
final IgniteAtomicSequence seq = ignite.atomicSequence("seqName", 0, true);
// Увеличьте атомарную последовательность.
for (int i = 0; i < 20; i++) {
long currentValue = seq.get();
long newValue = seq.incrementAndGet();
...
}
Размер резерва последовательности#
Параметр atomicSequenceReserveSize является ключевым для последовательности IgniteAtomicSequence. Он отражает количество значений последовательности, которые зарезервированы для каждого узла. Если узел пытается получить экземпляр IgniteAtomicSequence, ряд значений последовательности будет зарезервирован для него. Дальнейшие изменения последовательности происходят локально (без связи с другими узлами), пока не потребуется сделать следующее резервирование.
Значение по умолчанию для atomicSequenceReserveSize — 1000. Его можно изменить c помощью свойства atomicSequenceReserveSize объекта AtomicConfiguration.