分庫分表,可能真的要退出歷史舞臺了!
原創:小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,非公眾號轉載保留此宣告。
即使是不懂程式設計的玩家,在對比 NAS 的時候,也會兩眼放光,考慮很多因素,比如 RAID 級別、速度、易用程度等。作為時時刻刻與程式碼打交道的我們,更需要關注資料的存取問題。
一開始,開箱即用的 MySQL,一定是企業的首選。不僅僅因為用的人多,更重要的是生態成熟。要工具有工具,要人有人。對於老闆來說,員工看著不爽,可以隨時辭退,是一個非常理想的狀態。
但是,沒有胸懷的老闆,乾的一定不會長久,因為如果商務會吹、老闆會忽悠,業務會飛速發展(雖然現在這種機會比較少了)。對於 MySQL 來說,很快就會遇到問題。
這個時候,就需要一些比只會用 MySQL 級別高一些的人才,來配合老闆圓夢。
是時候了,由單機 MySQL 向分散式發展了。
單機 MySQL 面臨很多問題。
單表太大,比如超過 500w,查詢就非常吃力 單庫太大,各種資源告急 讀請求太高,嚴重影響寫請求
對此,一堆概念也是騰空而出,比如分庫分表、讀寫分離等。
很長時間以來,國內網際網路的做法普遍是採用加入一箇中介軟體的方式來解決,但隨著分散式資料庫的技術越來越成熟,這些魔法逐漸下沉到它本應該解決的層面--資料庫實現層。
留給分庫分表技術的時間,已經不多了,它的存量市場越來越少了。分庫分表技術,退出歷史舞臺,也是遲早的事情了。
解決上面三個單機 MySQL 問題,有很多種切入層面。比如,你簡單的在 MyBatis 或者 JPA 之上使用 AOP 或者攔截器封裝一層,也可以實現,這也是最傻的方式。
再進一步,就可以採用在 JDBC 之上的驅動層來實現,把分庫分表的路由維護在記憶體裡,透過重寫的 DataSource、Connection、Statment、ResultSet等,對業務進行無侵入的改進。但可惜的是,我們還必須要維護與邏輯表相對應的物理表,而且功能也是閹割的,不確定性依然不小。更要命的是,JDBC 只支援 Java,對於某些公司來說,就非常的不適用。
再就是中介軟體的傳統模式,Proxy。把自己偽裝成一個MySQL Server,接受 Client 的請求。至於它後面怎麼去操作真實的資料庫,你都不需要知道。但 Proxy 本身也是一套服務,你有運維成本在裡面,同時功能依然是閹割的。
框架層,驅動層,代理層,在過去很長一段時間裡,有無數的網際網路公司前赴後繼的試水,從 TDDL、Cobar,到 MyCat、ShardingSphere,各種層面的中介軟體也是層出不窮。但最近幾年,這種爭相鬥豔的場面逐漸不再,到最後剩下來的,也就ShardingSphere這一枝獨秀了。
是問題不存在了麼?不,正好相反,問題越來越嚴重。並不是問題消失了,而是它被轉化成其他解決方式了。
拋開關係型資料庫不說,很久之前,類似於 ElasticSearch、Cassandra這樣的 NoSQL 儲存,分片和副本的概念,就已經非常成熟了,而且它們是內建的,並不需要 DBA 去人工維護它們的物理位置。
對於關係型資料庫來說,走向分散式也終將成為必然。隨著 Raft 等協議應用越來越廣泛,分散式資料庫的可靠性也逐漸得到了保證。如果你以前因為事務問題而拒絕採用某些 NoSQL 產品,那麼如今完全相容 MySQL 的分散式資料庫,你沒有理由再說 No。
雲廠商,直接提供了像Aurora、PolarDB之類的MySQL增強,更有類似 TiDB、OceanBase 這樣純粹的分散式資料庫,越來越多的業務走向了這個終途。當你的團隊加班加點驗證著分庫分表中介軟體的時候,卻發現其實換個相容的儲存就能玩得轉,你會怎麼選,簡直不用再多說。
當然,一旦你選用了分散式資料庫,以前的 DBA 經驗可能就不管用了,比如說索引及其二級索引。你的團隊不得不學習新的知識,來應對分散式環境。
但這些都是陣痛,長遠看來,分散式資料庫是趨勢,而分庫分表中介軟體只能吃存量。
當你的業務有了常年累積的複雜資料,你可能會採用複雜的分庫分表元件,但如果你的業務比較新,可預見的未來會有大量資料,那一個分散式資料庫可能是最合適的。
分庫分表中介軟體並不是消失了。它搖身一變,變成了分散式資料庫的一部分。
你可能會聽到很多切到分散式資料庫,又從分散式資料庫切回到 MySQL 的案例,這屬於想吃螃蟹但並沒有吃到。目前來看,分散式資料庫越來越穩定,生態建設也越來越好。而分庫分表,則屬於存量業務,終將會退出歷史的舞臺。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2929841/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分庫分表之歷史表如何選擇最佳分片路由規則路由
- 為什麼要分庫分表?
- 你們要的MyCat實現MySQL分庫分表來了MySql
- 談談為什麼要分庫分表?
- Google 搜尋決定停止支援 IE11,IE 瀏覽器或將退出歷史舞臺?GoIE11瀏覽器
- 好好的系統,為什麼要分庫分表?
- MySQL 分庫分表方案,總結太全了。。MySql
- 分庫分表系列:分庫分表的前世今生
- 分庫分表
- MySQL 常用分庫分表方案,都在這裡了!MySql
- 分庫分表注意
- [Mysql]分庫分表MySql
- “分庫分表” ?選型和流程要慎重,否則會失控
- “分庫分表" ?選型和流程要慎重,否則會失控
- 徹底搞清MySQL分庫分表(垂直分庫,垂直分表,水平分庫,水平分表)MySql
- Abp VNext分表分庫,拒絕手動,我們要happy codingAPP
- 基因法分庫分表
- Mycat分庫分表(一)
- 常用分庫分表方案
- mycat配置分庫分表
- Mycat分庫分表配置
- 分庫分表總結
- [資料庫][分庫分表]分庫分表之後,id主鍵如何處理資料庫
- 徹底搞清分庫分表(垂直分庫,垂直分表,水平分庫,水平分表)
- oracle分表效率,資料庫分庫分表是什麼,什麼情況下需要用分庫分表Oracle資料庫
- MyCat分庫分表、讀寫分離
- 資料庫怎麼分庫分表資料庫
- 讀寫分離 & 分庫分表 & 深度分頁
- shrding_jdbc分表分庫JDBC
- 輕鬆理解分庫分表
- 分庫分表插入資料
- 分庫分表後的分頁查詢
- SDRAM簡要歷史
- 資料庫分庫分表的總結資料庫
- 分庫分表(6)--- SpringBoot+ShardingSphere實現分表+ 讀寫分離Spring Boot
- 你分庫分表的姿勢對麼?——詳談水平分庫分表
- 3.1 MYSQL分庫分表實踐MySql
- Linux MySQL分庫分表之MycatLinuxMySql