Я смотрю на создание решения для магазина, которое должно быть масштабируемым. В настоящее время он получает в среднем 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