ショップに基づくマルチショップ注文テーブルとシーケンシャル注文番号
-
02-10-2019 - |
質問
スケーラブルである必要があるショップソリューションの構築を検討しています。現在、複数の国ベースのショップ(英国、米国、DE、DK、ESなど)で1日あたり平均1〜2000注文を取得しますが、この注文は2年でこの金額になる可能性があります。
別々のカントリーショップデータベースを使用して注文テーブルを保存するか、すべてを1つの注文テーブルに組み合わせることを検討しています。
すべての注文がグローバルID(Auto Num)と国ID(UK、DE、DKなど)を備えた1つのテーブルに存在する場合、各国の注文にも連続的な注文が必要です。したがって、本質的には、グローバルIDと国注文IDを必要とする必要があります。
グローバルID = 1000、国=英国、国注文ID = 1000
グローバルID = 1001、国= DE、国注文ID = 1000
グローバルID = 1002、国= DE、国注文ID = 1001
グローバルID = 1003、国= DE、国注文ID = 1002
グローバルID = 1004、国=英国、国注文ID = 1001
グローバルIDはDB生成され、心配する必要があるものではありません。しかし、次のシーケンシャル番号を見つけるには、現在の国注文ベースのID+1を取得するためにクエリを行う必要があると考えています。 2つのことが私に関係しています。1)テーブルに何百万ものデータがある可能性があり、書き込みの前に読み取りをしている場合、2)同時書き込み/読み取りによるID番号衝突の可能性。
Myisamテーブルを使用すると、ID数の衝突を防ぐために、最後の国の注文 + 1が取得されている間、テーブル全体をロックすることができます。
誰かがもっとエレガントな解決策を知っているのだろうかと思っていますか?
乾杯、イマン
解決
これを行う方法があります。
INSERT INTO test123 (`Country`, `Country order code`)
SELECT 'UK', MAX(`Country order code`) + 1
FROM test123
WHERE `Country` = 'UK'
これにより、英国の新しい注文が入り、最高の注文コードが追加されます。これはテストされており、変更する必要があるのはテーブルとフィールドの名前だけです