2

Я должен генерировать случайное число в диапазоне (0-100.000) в среде кластера (многие серверы приложений на основе Java без привязки к языку + Mongodb) - поэтому каждый пользователь запрос получит уникальный номер и будет поддерживать его в следующих нескольких запросах.Генерировать случайное число в диапазоне (0-100k) в кластерной среде

Как я понимаю, у меня есть два варианта: 1. Есть некоторое количество сохранившихся в монго и incrementAndGet, но это не атомный - плохой выбор. 2. Используйте Redis - это атомные и опорные счетчики. 3. Есть идеи? Безопасно ли использовать UUID и устанавливать для него диапазон? 4. Hazelcast?

Любой другой?

Благодаря

+5

предустановить случайные числа, сохранить их все, а затем просто назначить каждому пользователю «следующий» номер в этом массиве/списке/таблице/независимо? –

+1

Если уникальность является истинным требованием, а последовательный - в порядке, используйте канонический подход http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/. – JohnnyHK

ответ

2

Я бы использовать существующую инфраструктуру MongoDB и использовать команду MongoDB findAndModify сделать атомный инкремент и получить работу.

Для оболочки команда будет выглядеть.

var result = db.ids.findAndModify({ 
          query: { _id: "counter" }, 
          sort: { rating: 1 }, 
          new : true, 
          update: { $inc: { counter: 1 } }, 
          upsert : true 
         }); 

«new: true» возвращает документ после обновления. Upsert создает документ, если он отсутствует.

10gen supported driver и Asynchronous Driver оба содержат вспомогательные методы/сборщики для команды find и modify.

 Смежные вопросы

  • Нет связанных вопросов^_^