Описание требования
Есть пул №1 - 160 000 000.
При создании объекта необходимо выделить объекту один номер. Есть некоторые правила
- номер в пуле
- номер, не занятый другим объектом
Также пользователь иногда указывает один номер для создания объекта.
Ниже приведены некоторые решения, у каждого из которых есть свои проблемы, поэтому я ожидаю лучшего решения.
Обратите внимание, что здесь мы используем mongo DB. Я не хочу менять базу данных, потому что это одна проблема.
Решение 1
Создайте большую таблицу (коллекцию) со 160 000 000 элементов. Структура коллекции такова.
number,allocated
При выделении номера используйте метод find_one_and_update для обновления одной записи, измените выделенное значение с false на true.
проблема
проблема для этого решения заключается в том, что создание коллекции из 160 000 000 слишком тяжело
Решение 2
Аналогично решению 1, за исключением того, что мы не генерируем 160 000 000 за один раз. Вместо этого мы генерируем 1000 каждый раз. Когда эти 1000 записей закончатся, мы создадим еще 1000
проблема
Проблема в том, что иногда пользователь может указать номер. Например, мы генерируем 1000 записей в коллекции, но вместо этого хотим использовать число 5000. Так что это проблема сейчас, потому что мы не генерировали ее
Решение 3
Каждый раз, когда мы создаем объект, мы генерируем случайное число в пределах 1-160 000 000 для этого объекта и сохраняем его в базе данных.
проблема
Трудно избежать того, что сгенерированное вами случайное число не использовалось ранее
... is too heavy
- это относится ко времени или пространству? - person wwii   schedule 17.01.2017