国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

數據庫的讀寫分離

2019-11-09 13:33:37
字體:
來源:轉載
供稿:網友
       讀寫分離,基本的原理是讓主數據庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從數據庫處理SELECT查詢操作。數據庫復制被用來把事務性操作導致的變更同步到集群中的從數據庫。

       為什么要分庫、分表、讀寫分?

       單表的數據量限制,當單表數據量到一定條數之后數據庫性能會顯著下降。數據多了之后,對數據庫的讀、寫就會很多。分庫減少單臺數據庫的壓力。接觸過幾個分庫分表的系統,都是通過主鍵進行散列分褲分表的。這類數據比較特殊,主鍵就是唯一的獲取該條信息的主要途徑。比如:京東的訂單、財付通的交易記錄等。。。該類數據的用法,就是通過訂單號、交易號來查詢該筆訂單、交易。

        還有一類數據,比如用戶信息,每個用戶都有系統內部的一個userid,與userid對應的還有用戶看到的登錄名。那么如果分庫分表的時候單純通過userid進行散列分庫,那么根據登錄名來獲取用戶的信息,就無法知道該用戶處于哪個數據庫中。

       或許有朋友會說,我們可以維護一個email----userid的映射關系,根據email先查詢到userid,在根據userid的分庫分表規則到對應庫的對應表來獲取用戶的記錄信息。這么做是可以的,但是這個映射關系的條數本身也是個瓶頸,原則上是沒有減少單表內數據的條數,算是一個單點。并且要維護這個映射關系和用戶信息的一致性(修改登錄名、多登錄名等其他特殊需求),最大一個原因,其實用戶信息是一個讀大于寫的庫,web2.0都是以用戶為中心,所有信息都和用戶信息相關聯,所以對用戶信息拆分還是有一定局限性的。

       對于這類讀大于寫并且數據量增加不是很明顯的數據庫,推薦采用讀寫分離+緩存的模式,試想一下一個用戶注冊、修改用戶信息、記錄用戶登錄時間、記錄用戶登錄ip、修改登錄密碼,這些是寫操作。但是以上這些操作次數都是很小的,所以整個數據庫的寫壓力是很小的。唯一一個比較大的就是記錄用戶登錄時間、記錄用戶登錄IP這類信息,只要把這些經常變動的信息排除在外,那么寫操作可以忽略不計。所以讀寫分離首要解決的就是經常變化的數據的拆分,比如:用戶登錄時間、記錄用戶登錄IP。這類信息可以單獨獨立出來,記錄在持久化類的緩存中(可靠性要求并不高,登陸時間、IP丟了就丟了,下次來了就又來了)

        以Oracle為例,主庫負責寫數據、讀數據。讀庫僅負責讀數據。每次有寫庫操作,同步更新cache,每次讀取先讀cache在讀DB。寫庫就一個,讀庫可以有多個,采用dataguard來負責主庫和多個讀庫的數據同步。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博湖县| 大安市| 巴南区| 勐海县| 威宁| 手机| 德惠市| 玉树县| 娄底市| 绍兴县| 涪陵区| 新巴尔虎右旗| 中江县| 阳谷县| 华容县| 西盟| 贵阳市| 贵港市| 昌乐县| 绩溪县| 安福县| 缙云县| 关岭| 南通市| 南宫市| 富源县| 盐城市| 荥阳市| 揭西县| 满洲里市| 布尔津县| 鹰潭市| 平舆县| 崇信县| 乌兰察布市| 中江县| 宽甸| 清流县| 阳西县| 根河市| 枝江市|