Таблица Multi-Shop Table и последовательные номера заказов на основе магазина

StackOverflow https://stackoverflow.com/questions/2749305

Вопрос

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

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

Если все заказы существуют в одной таблице с глобальным удостоверением личности (Auto NUM) и идентификатором страны (например, Великобритания, DE, DK и т. Д.), Каждая страна заказы также должны иметь последовательный заказ. Таким образом, по сути, у нас должен был быть глобальный идентификатор и идентификатор страны, причем идентификатор страны -порядка является последовательным только для стран, например,

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

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

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

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

Приветствия, Иманк

Это было полезно?

Решение

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

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

Это помещает новый заказ в Великобританию, он выбирает код наивысшего заказа, добавляет один. Это было проверено, и все, что необходимо изменить, - это названия таблиц и полей

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top