鍍金池/ 問答/PHP  數(shù)據(jù)庫  網(wǎng)絡(luò)安全/ MySQL分表問題。

MySQL分表問題。

將入隊(duì)一個(gè)訂單表進(jìn)行了水平拆分,采用一致性Hash算法,比如現(xiàn)在有2000w+訂單,拆分成10各表,tb0,tb1,tb2...tb9。查詢時(shí)可以對id進(jìn)行運(yùn)算得出對應(yīng)的表。

id%10=n => tbn.

那么在插入一個(gè)新的訂單時(shí)如何去選擇插入的表?

回答
編輯回答
臭榴蓮

tb0-9表的id是自增id,即記錄的主鍵ID
選取一個(gè)字段用來唯一標(biāo)識一個(gè)訂單,比如訂單ID,訂單ID%10=n => tbn
主鍵ID 不等于 訂單ID,讀取和插入數(shù)據(jù)計(jì)算表號時(shí)都用訂單ID即可
當(dāng)然并不一定是訂單ID,取決于具體的場景,只要能夠用來唯一標(biāo)識一個(gè)訂單即可(可以是多個(gè)字段的組合,取下hash即可)

2018年7月21日 17:24
編輯回答
瘋浪

你這個(gè)應(yīng)該有個(gè)專門生成ID的服務(wù),先忽略這個(gè)ID生成的實(shí)現(xiàn)細(xì)節(jié),那么每次插入表也是一樣的,獲取到生成的ID之后,對這個(gè)ID進(jìn)行運(yùn)算,從而得到插入的表。
我下面貼一篇分布式ID生成的文章:
https://mp.weixin.qq.com/s?__...

此處的ID生成應(yīng)該也是類似的。

2017年9月29日 09:46