2010-05-01 81 views
0

我在尋找需要可擴展的店鋪解決方案。目前它在多個國家的商店(例如英國,美國,德國,德國,歐洲等)平均每天檢索1-2000個訂單,但這個訂單在兩年內可能是這個數量的10倍。基於店鋪的多店鋪訂單表和連續訂單號碼

我正在尋找使用單獨的國家/地區商店數據庫來存儲訂單表,或希望將所有數據合併到一個訂單表中。

如果所有訂單都存在一個具有全局ID(auto num)和國家ID(例如uk,de,dk等)的表中,則每個國家/地區的訂單也需要有順序排序。因此,實質上,我們必須具有全球ID和國家訂單ID,並且國家訂單ID僅對於國家是連續的,例如,

全局ID = 1000,國= UK,國家訂單ID = 1000
全局ID = 1001,國= DE,國家訂單ID = 1000
全局ID = 1002,國= DE,國家訂單ID = 1001
全球ID = 1003,全國= DE,國家爲了ID = 1002
全球ID = 1004,國家=英國,國家爲了ID = 1001

將DB產生的全球ID而不是我需要擔心。但我想我必須做一個查詢,以獲得目前的國家訂單ID + 1找到下一個序列號。有兩件事值得我關注:1)查詢時間,當表有潛在的數百萬行數據,並且我在寫之前進行讀操作,2)由於同時寫/讀導致ID號衝突。

使用MyISAM表格可以鎖定整個表格,同時檢索最後的國家/地區訂單+1,以防止ID號碼衝突。

我想知道是否有人知道更優雅的解決方案?

乾杯, imanc

回答

0

有這樣的一種方式。

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

這爲英國提出了新的訂單,它選擇最高的訂單代碼和增加一個。 這已經過測試,所有需要更改的是表格和字段的名稱