來源于金松同學的資料分享整理,在此感謝。
一、單個資料庫
1、最早單個資料庫
2、單個資料庫太大了、太亂了,要拆一下,分庫分表,用阿裡巴巴的mycat中間件來做 MYCAT 分庫分表中間件
3、分庫,有按照業務領域拆的,也有按照地域拆分的
二、分庫分表
1、分表,把User表拆分成兩張表,存入兩個資料庫
2、解決單資料庫瓶頸問題
1、缺點是:交易裡面有一個userId聯系使用者資訊,還要有一個productId聯系産品資訊,在單個資料庫裡可以通過外鍵很友善的連接配接,但這裡就不好做了。
2、這個隻适合微服務
1、缺點是:華北的同學通路其他的資料庫就比較慢甚至不能通路
2、是以需要有讀寫分離
三、讀寫分離
1、每個資料庫都放相同的資料,包含所有領域和所有地區
2、但是我們總共有三個拷貝,不能全都支援讀寫,這樣太複雜了
3、兩個讀,一個讀寫,這樣“讀”的性能就解決了
4、但“寫”的問題還沒解決
5、是以與區域相結合去解決“寫”的問題
1、所有的資料庫都能讀,但是寫隻能就近寫,寫完之後再同步到其他資料庫
2、資料庫結構調整好了,但是通路還是慢怎麼辦?
3、是以需要加上緩存
四、加入緩存
1、80%的通路都在20%的資料上,著名的28原則,是以可将這些高頻資料放入緩存。
2、緩存放在比如Redis,Memcached的叢集裡面
3、關系型資料庫啥都好,就是慢,NoSQL緩存就是解決這個慢的問題
4、Memcached性能比Redis略強,但不支援持久化,Redis支援持久化,Redis還支援更多的資料結構
5、加入緩存變快了,但我們希望更快,是以開始考慮添加搜尋引擎
五、加入搜尋引擎
1、把業務資料做成搜尋引擎的Document,讓搜尋引擎給索引起來,這樣“讀”起來更快
2、同樣資料存在這麼多地方,又是資料庫、又是NoSQL叢集,又是搜尋引擎叢集的。是以背景會運作Map-Reduce來進行資料分析和同步