@serious911

Генерация кода заказа?

Здравствуйте.

На сайте пользователи делают заказы товаров и необходимо генерировать уникальные идентификаторы для каждого заказа в таком формате:
(Letter)(Letter)(Number)(Number)(Number)

Например, АА545, AB434 и т.п.

В чем проблема?
1) Идентификатор должен быть уникальным и в заданном формате.
2) База данных - MongoDB и в ней нет транзакций/автоинкремента

На данний момент вижу 2 варианта реализации:
1) Придумать какой-то алгоритм для генерации случаных кодов (нужно решить проблему коллизий)
2) Хранить счетчик где-то в БД и постоянно инкрементить, но тут непонятно как быть с множеством одновременных соединений (транзакций в MongoDB вроде нет) + нужно в заданном формате генерировать код

Подскажите как грамотно решить данную проблему.

Спасибо.
  • Вопрос задан
  • 442 просмотра
Пригласить эксперта
Ответы на вопрос 3
@LiguidCool
MySQL? Postgre?
Ну вы поняли ...
Ответ написан
@vshvydky
Сгенерируйте эти коды заблаговременно и статус кода использован или свободен, а далее к монго запрос получить свободный лимит 1 апдейт использован, но мне кажется это решение диким.
Ответ написан
По Вашему варианту 1) - Требуемая информационная емкость (19 бит) слишком мало чтобы бороться с коллизиями, т.к. они подчиняются парадоксу дней рождения - после 700 заказов у Вас с вероятностью 50% появится первая коллизия.

По Вашему варианту 2) - заведите счетчик и шифруйте его на некотором фиксированном ключе с размером блока в 19 бит. Шифрование - операция биективная - это будет гарантировать уникальность шифртекстов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы