資料庫的讀寫分離
讀寫分離,基本的原理是讓主資料庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從資料庫處理SELECT查詢操作。資料庫複製被用來把事務性操作導致的變更同步到叢集中的從資料庫。
為什麼要分庫、分表、讀寫分?
單表的資料量限制,當單表資料量到一定條數之後資料庫效能會顯著下降。資料多了之後,對資料庫的讀、寫就會很多。分庫減少單臺資料庫的壓力。接觸過幾個分庫分表的系統,都是通過主鍵進行雜湊分褲分表的。這類資料比較特殊,主鍵就是唯一的獲取該條資訊的主要途徑。比如:京東的訂單、財付通的交易記錄等。。。該類資料的用法,就是通過訂單號、交易號來查詢該筆訂單、交易。
還有一類資料,比如使用者資訊,每個使用者都有系統內部的一個userid,與userid對應的還有使用者看到的登入名。那麼如果分庫分表的時候單純通過userid進行雜湊分庫,那麼根據登入名來獲取使用者的資訊,就無法知道該使用者處於哪個資料庫中。
或許有朋友會說,我們可以維護一個email----userid的對映關係,根據email先查詢到userid,在根據userid的分庫分表規則到對應庫的對應表來獲取使用者的記錄資訊。這麼做是可以的,但是這個對映關係的條數本身也是個瓶頸,原則上是沒有減少單表內資料的條數,算是一個單點。並且要維護這個對映關係和使用者資訊的一致性(修改登入名、多登入名等其他特殊需求),最大一個原因,其實使用者資訊是一個讀大於寫的庫,web2.0都是以使用者為中心,所有資訊都和使用者資訊相關聯,所以對使用者資訊拆分還是有一定侷限性的。
對於這類讀大於寫並且資料量增加不是很明顯的資料庫,推薦採用讀寫分離+快取的模式,試想一下一個使用者註冊、修改使用者資訊、記錄使用者登入時間、記錄使用者登入IP、修改登入密碼,這些是寫操作。但是以上這些操作次數都是很小的,所以整個資料庫的寫壓力是很小的。唯一一個比較大的就是記錄使用者登入時間、記錄使用者登入IP這類資訊,只要把這些經常變動的資訊排除在外,那麼寫操作可以忽略不計。所以讀寫分離首要解決的就是經常變化的資料的拆分,比如:使用者登入時間、記錄使用者登入IP。這類資訊可以單獨獨立出來,記錄在持久化類的快取中(可靠性要求並不高,登陸時間、IP丟了就丟了,下次來了就又來了)
以oracle為例,主庫負責寫資料、讀資料。讀庫僅負責讀資料。每次有寫庫操作,同步更新cache,每次讀取先讀cache在讀DB。寫庫就一個,讀庫可以有多個,採用dataguard來負責主庫和多個讀庫的資料同步。
相關文章
- 資料庫讀寫分離資料庫
- 大資料資料庫讀寫分離分庫分表大資料資料庫
- 資料庫讀寫分離Master-Slave資料庫AST
- Discuz!NT資料庫讀寫分離方案資料庫
- 資料庫治理利器:動態讀寫分離資料庫
- Spring實現資料庫讀寫分離Spring資料庫
- 讀寫分離的的資料同步?
- golang saas框架,資料庫級別隔離、讀寫分離Golang框架資料庫
- 資料庫的讀寫分離與負載均衡策略資料庫負載
- 資料讀寫壓力大,讀寫分離
- 做資料庫分離讀寫時,sqlServer資料庫資料同步的問題:資料庫SQLServer
- Spring Aop實現資料庫讀寫分離Spring資料庫
- MyCat分庫分表、讀寫分離
- Mycat 讀寫分離+分庫分表
- 資料庫讀寫分離,主從同步實現方法資料庫主從同步
- 【資料庫訪問優化方案之讀寫分離】資料庫優化
- OneProxy5.8.1資料庫讀寫分離特性試驗資料庫
- Discuz!NT3.1 資料庫讀寫分離 程式碼資料庫
- 深度:微服務化的資料庫設計與讀寫分離微服務資料庫
- 淺談高效能資料庫叢集——讀寫分離資料庫
- 使用Spring AOP切面解決資料庫讀寫分離Spring資料庫
- 資料庫 讀寫分離 為什麼提高效能資料庫
- 讀寫分離 & 分庫分表 & 深度分頁
- (7)資料庫讀寫分離,主從同步實現方法(資料庫設定)資料庫主從同步
- ssm讀寫分離多資料來源SSM
- MySQL 中讀寫分離資料延遲MySql
- ShardingSphere(七) 讀寫分離配置,實現分庫讀寫操作
- 直播賣貨系統,如何實現mysql資料庫的讀寫分離MySql資料庫
- Redis的讀寫分離Redis
- mongodb的讀寫分離MongoDB
- RDS讀寫分離,海量資料一鍵搞定
- MyCat 讀寫分離 資料庫分庫分表 中介軟體 安裝部署,及簡單使用資料庫
- 資料庫讀寫分離這個坑,你應該踩過吧?資料庫
- 華納雲:雲資料庫中自動讀寫分離是什麼?資料庫
- 資料庫中介軟體sharding-jdbc實現讀寫分離資料庫JDBC
- 乾貨滿滿 | 微服務化的資料庫設計與讀寫分離微服務資料庫
- Docker實現Mariadb分庫分表、讀寫分離Docker
- 通過STANDBY資料庫實現讀寫分離時索引過多的問題資料庫索引