從oracle到mysql引發的技術思考,數據如何拆分到多個資料庫?

因為是要對大表做數據的水平拆分,將數據拆分到多個資料庫上,有幾個重要的問題需要思考:

1.怎麼把在ORACLE中幾十億的數據按規則遷到mysql集群中;

2.如何產生主鍵唯一值;

3.大表根據規則拆成小表,具體拆分粒度是多少?每個庫多少表?

4.如何解決這麼多庫這麼多表的路由問題;

5.如何解決跨庫的merge與sort;

6.如何對連接進行管理;

7.如何做數據訂正;

8.我們需要開發哪些集群管理工具,比如說建表工具;

9.集群遇到停電怎麼辦?

10.如何對集群中的數據進行歷史遷移?

11.儘管集群採用廉價的PC,但具體採用何種PC,差別還是挺大的,如何平衡集群的規模與可管理性方面的問題?

12.集群對機房電力的消耗與機櫃佔用問題?


問題有點多,我試著回答前面幾個。後面的同學補充吧。

------------------------------------------------------

1.怎麼把在ORACLE中幾十億的數據按規則遷到mysql集群中;

幾十億數據不算多。你需要對在用的MySQL主機有一個性能認識。如果你的應用本身就比較獨立於資料庫,遷移並不難。Oracle的商業特性,如存儲過程/觸發器之類的拋棄吧。

2.如何產生主鍵唯一值;

MySQL Innodb有自增鍵。雖然可能比Oracle 的sequance性能差些。但一般情況下夠用了。如果真的需要極高性能,那麼有一些開源的主鍵生成的方案。

3.大表根據規則拆成小表,具體拆分粒度是多少?每個庫多少表?

最好不要拆表,如果資料庫主機比較強勁,表結構不變動頻繁的話,不需要拆表。採用SSD盤陣列, 3千萬到5千萬一張表很常見,支持上萬QPS很輕易。

4.如何解決這麼多庫這麼多表的路由問題;

難。所以盡量別做。可以自己使用分庫分表的演算法,但最靠譜的方式,是自己建立一張路由表。也存儲在資料庫里,不要過分擔心路由表的單點問題。

5.如何解決跨庫的merge與sort;

難。應該是是避免。或者旁路。

6.如何對連接進行管理;

MySQL的線程很輕量級,這方面已經比Oracle的專用/共享連接開銷小多了,更高效。


推薦閱讀:

Access資料庫如何使用?
資料庫設計冗餘欄位問題?
國家能不能建立一個新生兒DNA比對資料庫來預防小孩被拐賣?
互聯網產品採用哪些方案可以實現多賬號綁定、合併和解綁?
資料庫有沒有類似現代操作系統的好書?

TAG:SQL | MySQL | 資料庫設計 |