天天看點

資料庫架構演進

來源于金松同學的資料分享整理,在此感謝。

一、單個資料庫

資料庫架構演進

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來進行資料分析和同步