таблица заказов в нескольких магазинах и порядковые номера заказов в зависимости от магазина - PullRequest
0 голосов
/ 01 мая 2010

Я смотрю на создание решения для магазина, которое должно быть масштабируемым. В настоящее время он получает в среднем 1-2000 заказов в день в нескольких магазинах страны (например, в Великобритании, США, de, dk, es и т. Д.), Но этот заказ может в 10 раз превышать эту сумму за два года.

Я рассматриваю либо использование отдельных баз данных страновых магазинов для хранения таблиц заказов, либо объединение всех в одну таблицу заказов.

Если все заказы существуют в одной таблице с глобальным идентификатором (auto num) и идентификатором страны (например, uk, de, dk и т. Д.), Заказы каждой страны также должны иметь последовательный порядок. Таким образом, по сути, мы должны иметь глобальный идентификатор и идентификатор странового заказа, причем идентификатор странового заказа является последовательным только для стран, например

глобальный идентификатор = 1000, страна = Великобритания, идентификатор странового заказа = 1000
глобальный идентификатор = 1001, страна = DE, код страны = 1000
глобальный идентификатор = 1002, страна = DE, идентификатор страны = 1001
глобальный идентификатор = 1003, страна = DE, идентификатор страны = 1002
глобальный идентификатор = 1004, страна = Великобритания, идентификатор странового заказа = 1001

Глобальный идентификатор будет создаваться БД, а не чем-то, о чем мне нужно беспокоиться. Но я думаю, что мне нужно будет сделать запрос, чтобы получить текущий идентификатор страны на основе идентификатора + 1, чтобы найти следующий порядковый номер. В связи с этим меня беспокоят две вещи: 1) время запросов, когда в таблице потенциально могут быть миллионы строк данных, и я выполняю чтение перед записью, 2) вероятность столкновений номеров ID из-за одновременных операций записи / чтения.

С таблицей MyISAM вся таблица может быть заблокирована, пока извлекается последний страновой заказ + 1, чтобы предотвратить конфликт номеров ID.

Мне интересно, кто-нибудь знает о более элегантном решении?

Ура, imanc

1 Ответ

0 голосов
/ 03 октября 2010

Есть способ сделать это.

INSERT INTO test123 (`Country`, `Country order code`)
SELECT 'UK', MAX(`Country order code`) + 1
FROM test123
WHERE `Country` = 'UK'

Это вводит новый заказ для Великобритании, выбирает самый высокий код заказа и добавляет. Это было проверено, и все, что нужно изменить, это имена таблиц и полей

...