Facebook用戶量十分龐大,爲什麼還使用MySQL資料庫?

張曉家


Facebook最初誕生的時候並不是大公司,所以整個數據底層都是放在MY SQL上,因為MY SQL不需要授權費,對facebook是最划算的,而在發展壯大後,MY SQL同樣夠用,當然會一直用下去了。

為什麼Facebook還會用MY SQL?

1.MySQL早期就是為PC互聯網服務的,而且是免費開源的,Facebook早期是學生創業,跟本沒錢,而且Facebook最開始是PC產品,用MY SQL是自然的。

2.用MY SQL更省錢。除了MY SQL還有商業數據,比如Oracle數據庫,但是商用數據庫價格非常的貴,比如官方報價一般25/CPU核,以及採購小型機一般80-120萬/臺,存儲設備一般500萬一套,但是Facebook現在有近萬臺的服務器,這是一筆極為龐大的資金。

3.常規數據庫的集中式數據庫很難解決海量用戶 MySQL的分佈式數據庫正好適合;

4.MYSQL可以定製化,更適應Facebook業務發展需要。oracle等無法定製,不能滿足每個不同企業的定製化數據要求。所以mysql數據庫會越來越火,也越來越受到企業的重視。

總的來說是,MYSQL更加省錢,Oracle價格太貴,另外就是可定製化。


毛琳Michael


儘管Facebook使用MySQL,但它們並不是一成不變的使用它。 事實上,他們的團隊已經提交了許多MySQL核心和Innodb插件的高性能增強。 他們的主要重點是增加性能計數器到Innodb。 其他更改集中在IO子系統上,包括以下新功能:

1 innodb_io_capacity:設置服務器的IO容量以確定後臺IO的速率限制

2 innodb_read_io_threads, innodb_write_io_threads:設置後臺IO線程

3 innodb_max_merged_io:設置可能合併到一個大IO請求中的相鄰IO請求的最大數量

Facebook使用MySQL作為鍵值存儲,其中數據隨機分佈在一大組邏輯實例中。 這些邏輯實例分散在物理節點之間,負載均衡在物理節點級完成。 Facebook已經開發了一個分區方案,其中全局ID被分配給所有的用戶數據。 他們也有一個自定義的歸檔方案,它基於每個用戶的頻繁和最近的數據。 大部分數據是隨機分佈的。 令人驚訝的是,據傳Facebook有1800個MySQL服務器,但只有3個全職DBA

Facebook主要將MySQL用於結構化數據存儲,例如牆貼,用戶信息等。這些數據在各個數據中心之間複製。 對於blob存儲(照片,視頻等),Facebook使用一個自定義的解決方案,涉及外部的CDN和內部的NFS

同樣重要的是,Facebook大量使用Memcache,這是一種內存緩存系統,通過在RAM中緩存數據和對象來加速動態數據庫驅動的網站,以減少閱讀時間。 Memcache是Facebook的主要緩存形式,大大減少了數據庫的負載。 擁有一個緩存系統可以使Facebook的速度與調用數據一樣快。 如果不需要訪問數據庫,則只需根據用戶標識從緩存中獲取數據

所以,“Facebook使用什麼數據庫”似乎是一個簡單的問題,你可以看到他們已經添加了各種其他系統,使其真正的具有網絡可擴展性。 但是,仍然可以自由地使用這樣一個觀點:“MySQL和Oracle或者MS SQL Server一樣好或者更好,因為就算只有Facebook使用它,它也有5億用戶!”


獨立的互聯網從業者


歡迎關注我,一個程序員老司機,和你分享編程、運營、需求等等經驗和趣事。

從你的問題描述來看,我覺得這是一個偽命題,在這個行業,很多人都流傳著一個所謂經典的名言:‘如果MySQL數據庫存儲記錄超過一百萬的時候,性能會有很大的折扣’,但是結果facebook卻能夠很好的運行,下面我們就來分析一下原因。

原因一

為了應對高性能的應用,我們的MySQL也在不斷的改進,不斷的引入很多高級的功能,比如表分區、複製和集群等,還引入了Memcached,利用好這些功能,能夠讓我們的應用程序性能大大的提高,同時也能夠處理好存儲大數據的問題。

原因二

我們知道MySQL是開源的,什麼意思呢?就是我們能夠對MySQL的源代碼進行修改然後編譯,從而實現屬於我們的定製化的MySQL,所以Facebook也對MySQL進行了修改,刪除了很多不需要的功能,添加了很多自己需要的功能,尤其是將一些認為效率低的東西徹底移除,打造屬於Facebook的定製化MySQL,這應該是MySQL能夠勝任Facebook的根本原因。

原因三

雖然數據庫提供了很多我們需要的功能,但是為了提高應用的性能,我們很多時候不一定要藉助數據庫來完成,比如實現一些統計功能,我們可以不借助數據庫的存儲過程來實現,而是採用應用程序的方式來實現,讓數據庫只做一件事:就是數據管理,不做太複雜的數據處理操作。

希望能夠幫助到你,還有什麼疑問,可以在評論中進行交流。


web互聯網


所以Facebook優化MySQL的經驗我覺得有很多借鑑學習之處,有相關數據庫經驗也可以在評論區討論探討,互相學習學習。

1.每臺機器都使用多實例的模型,每個機器放多個實例,每個實例放多個DB,多實例之間沒有資源隔離,充分發揮實例間的最大性能。

2.將大部分核心業務引擎切換到MyRocks,不改變服務器配置大概可以節省一半服務器資源。

3.主從結構採用基於GTID的一主多從結構,外加一個基於lossless semi-sync機制的mysqlbinlog實現的binlog server。

4.所有的備份都是基於mysqldump實現,可以無需備份索引,只備份數據,而且備份文件壓縮比高,更節省磁盤空間,通過改進了的mysqldump,備份過程中還可以進行額外壓縮。當然備份時也會控制並行備份的數量,避免影響在線業務性能。

5.快速部署從庫可使用xtrabackup在現有存活的SLAVE實例上備份,也可在主庫上發起備份,再利用WDT(或者是BT)協議傳輸到異地,用於拉起從庫。

總而言之,Facebook在優化MySQL方面做了很多努力,也提交了很多優秀的Innodb插件來大大提高了MySQL主從集群的性能。

而且有傳聞稱,Facebook擁有大約1800臺MySQL服務器,內部卻只有三名數據庫管理員(DBA)。這有點匪夷所思,不過也側面說明Facebook確實在MySQL優化方面有著非常不錯的效果。


如果你對學習人工智能和科技新聞感興趣,歡迎訂閱我的頭條號。我會在這裡發佈所有與科技、科學以及機器學習有關的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區回覆和討論,看到即回。


楊沐白


因為沒有哪種數據庫能支撐這麼大的數據量。所以,大型互聯網公司都不用oracle,而是用mysql。因為mysql雖然單獨1臺不如oracle,到時他們會用很多臺mysql。

而且,mysql是開源的,facebook等公司用的mysql都是他們優化過的版本,增加了適合他們自己特點的功能和性能的提升。

現代的大用戶量的網站早就不用oracle了,而是用分佈式的很多臺mysql機器。淘寶開始也用oracle,後來發現支撐不了服務,所以慢慢也全部轉成mysql了。


智能神算


Mysql的優點很多,主要列舉以下幾點:

(1) 是開源的,就是說是免費的,你不需要支付額外的費用。

(2) 是可以定製的,採用了GPL協議,你可以修改源碼來開發自己的Mysql系統。

(3) MySql的核心程序採用完全的多線程編程。線程是輕量級的進程,它可以靈活地為用戶提供服務,而不過多的系統資源。

(4) 擁有一個非常快速而且穩定的基於線程的內存分配系統,可以持續使用面不必擔心其穩定性。

由於facebook業務的性質,存在大量的更新,mysql數據對於這塊是比較擅長的。

希望我的回答能幫助到你!

關注是為了再一次的交流,戳一戳右上角的關注吧!


分享到:


相關文章: