從oracle到mysql引發的技術思考,數據如何拆分到多個資料庫?
01-13
因為是要對大表做數據的水平拆分,將數據拆分到多個資料庫上,有幾個重要的問題需要思考:
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比對資料庫來預防小孩被拐賣?
※互聯網產品採用哪些方案可以實現多賬號綁定、合併和解綁?
※資料庫有沒有類似現代操作系統的好書?