使用一個Oracle MySQL的理念
自己原文公眾號: https://mp.weixin.qq.com/s/bbHGIoKpHBFyU8F0Bk1CHg
資料庫分久必合合久必分。
20年前我們沒什麼人說架構,但是現在幾乎是個人就說架構。為什麼呢?因為從前是單機,而現在是多機。比如分庫 或者分表。或者分散式。
這裡再次說一下,分庫分表不是分散式。分散式是一個庫,分庫分表是多個庫。分散式是由分散式資料庫來完成事務和鎖。分庫分表是應用自己來實現事務和鎖。 另外分庫相對容易,分表就比較難做。分庫和分表是兩回事。
微服務和中臺是導致資料庫分庫的主要因素。但是這裡要提一下分庫不見得是要把資料庫分在很多不同機器上。比如這也是分庫。
這個也是
所以說分庫,可以分,但是沒說一定要多臺機器呀。一個上面也可做很多database庫。
每次說到這個我會面對一堆質疑,就是10個子系統,10個庫。那麼就要用10臺機器安裝資料庫。我們之前說了分庫不是分散式。那麼10個庫之間的事務和鎖就要需要第三方來保障或者根本沒保障。那這個一致性就比較慘不忍睹,即使有一個很好的控制,要知道所有的互動在網路上消耗了大部分。
所以我的觀點:單套是最好的架構。比如Oracle的RAC,以及MySQL的MGR和國產資料庫TiDB 等等分散式資料庫都是一套 。因為要高可用嘛。如果不要高可用,我認為單機是最好的架構。
這裡必須說質疑單機壞了怎麼辦?我幹了快20年,單機除了自己做實驗各種破壞性的把底層檔案全部刪除起不來的,還沒有遇到過資料庫自己執行著然後起不來的。我相信也有,但是更多的情況是應用寫的太差把資料庫搞得當機的。如果說比例那麼破壞性的如果是1,那麼應用導致的我估計說是1000萬也不過分。比例大概是1000萬比1. 根據這個比例我覺得重要精力還是花在更容易出問題的點上。畢竟現如今的硬體質量槓槓的,再加上RAID10,硬碟壞50%也還行。
這裡也有人說10個庫一個當機(就是應用寫的差),不影響其他9個啊。其他還能用。問題是10個如果是獨立事件的,那麼自然是這樣的。但是如果是有緊耦合或者前後關係的。比如會員庫故障,無法登入了,後面的事情都別做了。 訂單庫故障,就算能登入,今天也別幹了。
這裡我還說一點但凡這種場景下一個能當機,放心,其他幾個也會當機。所以資料庫越來越多,因為把資料不停的分散,降低表的資料量,從而提升全表查詢的時間。時間短了,鎖短了,CPU少了。但是這一切就是頭痛醫頭腳痛醫腳,越來越差。很多人問我A和B庫能不能和在一起?我就問你們有開發規範嗎?如果有能執行嗎?能執行的話就放在一起。沒有規範或者不能執行規範就別放在一起。
開發規範能解決這些問題嗎?
能!
絕大多數故障99.9%都是效能問題導致的。如果你看過我星辰大海的那幾篇公眾號文章就知道了,單機足以支援你的業務。如果不能支援你的業務,那麼你應該已經是財務自由的人或者是年薪百萬的人。因為你的體量已經很大很大了。
我以前看到過這樣一個案例:
整合是大量節約成本的。
還是回到那個讓人揪心的問題。和在一起故障怎麼辦?答案還是一樣,有規範嗎?我們高鐵16節車廂,1000人總有吧?出了溫州那次意外就沒怎麼出過事故。你能說1000多人有風險?反過來說兩座的跑車,酒駕車毀人亡的多了去了。要是胡來怎麼都不行!
就算是高可用也不是用來解決效能問題的,那是防止意外的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2847513/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個良好的開發理念TDD
- Oracle index 使用的一個總結OracleIndex
- MySQL能否成下一個Oracle?(轉)MySqlOracle
- Oracle表空間設計理念Oracle
- 技術管理的一些理念
- MySQL野心勃勃 將成下一個Oracle?MySqlOracle
- 請問一個mysql使用者管理的 問題。MySql
- 修改ORACLE使用者密碼的一個方法:Oracle密碼
- Oracle中將一個使用者的所有物件授權給另一個使用者Oracle物件
- Mysql與Oracle的50個區別MySqlOracle
- oracle的一個bugOracle
- oracle成為另一個使用者Oracle
- oracle中的某一個使用者名稱修改Oracle
- 簡單對比MySQL和Oracle中的一個sql解析細節MySqlOracle
- MySQL:一個特殊的問題MySql
- MySQL:一個奇怪的hang案例MySql
- 「嵌入式 AI」這個時髦的名詞,究竟是一個新理念,還是一箇舊噱頭?AI
- Data Mesh,一種新的資料架構理念!架構
- mysql & oracle savepoint 使用方法MySqlOracle
- 前端中的 IoC 理念前端
- MYSQL如何識別一個binlog中的一個事物MySql
- 數字化營銷中,藥企的產品、使用者和理念哪個更重要
- oracle10g exp可否用一個使用者匯出另一個使用者的某表呢?Oracle
- 使用MyBatis搭建一個訪問mysql資料庫的簡單示例MyBatisMySql資料庫
- 【Mysql】一個簡易的索引方案MySql索引
- 【MySQL】NOT EXISTS優化的一個案例MySql優化
- FluentData Mysql分頁的一個BUGMySql
- mysql的一個備份指令碼MySql指令碼
- 一個生成Oracle使用者密碼的通用小程式(轉)Oracle密碼
- 一個修改Oracle使用者密碼的小訣竅(轉)Oracle密碼
- mysql 一個錯誤MySql
- oracle 10.2.0.2.0的一個BUGOracle
- 談談 mysql和oracle的使用感受 -- 差異MySqlOracle
- 大資料的根本理念大資料
- 使用Oracle 11g的adrci的ips打包一個incidentOracleIDE
- 使用mysql_config_editor 建立一個加密登入MySql加密
- mysql索引合併:一條sql可以使用多個索引MySql索引
- TenSunS監控Mysql:如何優雅的使用一個mysqld_exporter監控所有的MySQL例項MySqlExport