基于商店的多购物订单表和顺序订单编号
-
02-10-2019 - |
题
我正在考虑建立需要可扩展的商店解决方案。目前,它在多个国家的商店(例如UK,US,DE,DK,ES等)中每天平均每天检索1-2000个订单,但该订单在两年内可能为10倍。
我正在考虑使用单独的乡村商店数据库存储订单表,或者希望将全部组合成一个订单表。
如果所有订单都存在于一个具有全球ID(自动数字)和国家ID(例如UK,de,dk等)的表中,则每个国家 /地区也需要进行顺序排序。因此,从本质上讲,我们必须拥有一个全球ID和一个国家订单ID,而国家订单ID仅适用于国家 /地区,例如
全球ID = 1000,乡村=英国,国家订单ID = 1000
全局ID = 1001,country = de,国家订单ID = 1000
全局ID = 1002,country = de,国家订单ID = 1001
全局ID = 1003,country = de,国家订单ID = 1002
全球ID = 1004,乡村=英国,国家订单ID = 1001
全局ID将是DB生成的,而不是我需要担心的。但是我认为我必须进行查询才能获取当前的基于国家订单的ID+1才能找到下一个顺序编号。我对此有两件事:1)查询时间可能有数百万行数据,而我在写入之前进行读取,2)由于同时写入/读取而导致ID号发生冲突的可能性。
使用Myisam表,整个表可以锁定,而最后一个国家订单 + 1可以防止ID号冲突。
我想知道是否有人知道更优雅的解决方案?
欢呼,imanc
解决方案
有一种方法。
INSERT INTO test123 (`Country`, `Country order code`)
SELECT 'UK', MAX(`Country order code`) + 1
FROM test123
WHERE `Country` = 'UK'
这为英国提供了新的订单,它选择了最高级代码。这已经进行了测试,所有需要更改的就是表和字段的名称
不隶属于 StackOverflow