Генерация серийного или уникального номера заказа - PullRequest
4 голосов
/ 21 июня 2010

Как сгенерировать уникальный серийный номер или номер заказа в php, не проверяя по db?

Ответы [ 4 ]

5 голосов
/ 21 июня 2010

см. uniqid или uuid_create in uuid pecl или com_create_guid ()

1 голос
/ 21 июня 2010

Существует несколько проблем, связанных с использованием автоинкрементных столбцов в mysql (не в последнюю очередь из-за того, что он не масштабируется до эквивалентных узлов).

Хотя вы можете поддерживать генератор последовательностей практически где угодно (memcache, files, database)PHP не применяет сложную семантику блокировки файлов - помимо влияния на производительность вы можете быстро попасть в ситуации блокировки сделки.Он не масштабируется до больших объемов.

Если у вас есть PL / SQL, то я бы порекомендовал реализовать там генератор последовательностей - в качестве альтернативы вы могли бы рассмотреть реализацию генератора на PHP и sqlite.

Я настоятельно рекомендую вам реализовать генератор для создания чисел в формате:

$ use_number = ++ $ sequence_number.str_pad ($ node_id, '0', $ max_nodes, STR_PAD_LEFT);

Где node_id - это номер, однозначно ссылающийся на субстрат хранения, где хранится текущий порядковый номер.И $ max_nodes несколько больше, чем максимальное количество цифр, найденное в $ node_id (например, 3 допускает до 999 узлов).

В качестве альтернативы трактуйте его как строку с пунктуацией между двумя частями (и / илихранить 2 части в разных столбцах базы данных).

C.

1 голос
/ 21 июня 2010

Если вы хотите гарантировать уникальность, тогда вам нужно что-то проверять. Вы можете использовать плоский файл и хранить только последний использованный номер (который затем можно увеличить), но было бы глупо не использовать базу данных. Вам необходимо хранить кучу другой информации, связанной с номером (контактные данные, из чего состоит заказ и т. Д.), И база данных идеально подходит для этого.

0 голосов
/ 21 июня 2010

Если вы используете базу данных MySQL, вы можете создать серийный номер заказа без предварительной проверки базы данных, используя столбец auto_increment . Вставка новой строки приведет к тому, что этому уникальному идентификатору будет присвоен этот столбец без необходимости чтения / записи этого столбца в PHP.

В качестве альтернативы, если вам нужен глобальный уникальный идентификатор даже без базы данных, вы можете использовать функцию PHP uniqid (). Обратите внимание, что это возвращает строку. Если вы используете более одной физической машины или перемещаетесь между серверами, вы должны добавить префикс (первый аргумент), который отличается на каждой машине. При использовании на одном компьютере эта функция никогда не должна возвращать одно и то же строковое значение дважды.

...