Facebook用戶量十分龐大,為什麼還使用MySQL數據庫?

張曉家


其實不止是Facebook,大部分互聯網公司都是在使用Mysql數據庫(會輔助使用Nosql數據庫,這裡暫時不討論)。

首先不能否認的是,如果是按照單庫運行,Oracle、DB2這些商業數據庫還是很強大的。IT公司的傳統套路就是IOE,其中O就是指的Oracle。另外I是指IBM的服務器,E是指EMC列陣存儲。三個加起來很強大,基本上可以支持一般的企業的業務,當然,也很貴,非常貴。

當到了Facebook這個級別的公司,數據量可不是幾千萬,幾個億這個級別的了,這時候如果數據還是單機的話,已經很難支撐基數大、增長快的數據了;這時候的做法就是分庫,把數據保存到不同的數據庫節點上。


這時候Mysql的優勢就顯示出來了:

  • 開源,就意味著免費,也就節省了License的費用;

  • 也是因為開源,所以有能力的公司都會對公開版的Mysql做二次開發,跟進業務的需要去改造Mysql;

  • 服務器的錢也省下來了,也不必使用費用很高的服務器了,這一點又是省錢。


總之,Mysql省錢,還能定製改造。



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

我會持續分享Java程序開發、架構設計、職業發展等方面的知識和見解,希望能得到你的關注今日頭條【會點代碼的大叔】,轉載請註明出處。

會點代碼的大叔


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


MySQL 早期就是為 Web 應用而生的,而 Facebook 正是此領域的業務場景;另外從成本價格來講,MySQL 開源免費的,Oracle 價格高。在版權上,大公司更注重版權,開發人員也不能隨便用盜版,所以,如果全部用正版數據庫,肯定增加成本的。而 MySQL 開源免費。當然,也並不是說 MySQL 沒啥優點。
MySQL 作為是一種開放源代碼的關係型數據庫管理系統(RDBMS),任何人都可以在 GeneralPublic License的許可下下載且個性化優,另外,MySQL 的可靠性,速度以及它適應性強而受人歡迎。提供用於管理、檢查、優化數據庫操作的管理工具 用其來管理內容無疑是很好的選擇,而且 MySQL 數據庫系統使用最常用的為數據庫管理語言--結構化查詢語言(SQL)進行數據庫管理。不僅如此,MySQL 其自身的特點也是它的加分項。它支持AIX、FreeBSD、Windows等多種操作系統。不僅能夠作為一個單獨的應用程序應用在客戶端服務器網絡環境中,還能夠作為一個庫而嵌入到其他的軟件中提供多語言支持。
雖然其他的大型數據庫例如 Oracle、DB2、SQL Server 等相比,MySQL 自有它的不足之處,如規模小、功能有限等,但是這絲毫也沒有減少它受歡迎的程度 。當下 IT 行業的走向是開源化、免費化。這就意味著個人可以定製更加具有個性化需求的數據庫,從而節省開銷。這點上 MySQL 是符合的,阿里巴巴等大型項目也用了 MySQL ,主要用了分佈式存儲、緩存、分表分庫等技術,靈活運用而已。
當然,現在許多的數據庫的功能雖然很強大,但經常性使用的無非幾種,或者有些比較適合自己使用的功能, oracle 等無法定製。所以 MySQL 這種開源的數據庫會越來越火。另外,Facebook 也並非一成不變使用 MySQL,節省開銷是一回事,但體驗使用質量好更是一回事,新的需求產生會催促其進行升級成長,比如 Facebook 建 立了自己的 Cassandra 數據商店並且在其網站上重點推出一項新的搜索功能。據Facebook的工程師 Avinash Lakshma 介紹,Cassandra 僅用 0.12 毫秒就可以寫入 50 GB 的數據,比 MySQL快了超過 2500 倍。Twitter公司也計劃從 MySQL 遷移到 Cassandra 數據庫,因為後者具有更大的彈性、可擴展性和大量的社區網絡開源開發人員。
歡迎更多交流留言評論 !

stormzhang


所以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優化方面有著非常不錯的效果。


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


楊沐白


儘管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互聯網


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

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

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


智能神算


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

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

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

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

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

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

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

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


GeCoder


在關係型數據庫剛出現的時候,那時候數據庫技術是一個很複雜的技術,關係型數據庫的由IBM的科研人員最先發表的論文,IBM沒有重視,卻被oracle佔了先機。如今在互聯網時代,理論和開發技術已經很成熟,一個數據庫產品已經沒有那麼複雜,而且可替代性已經很高,越來越多的軟件也開始免費。我感覺,本身這個話題意義也不大,企業現在對數據庫的選擇很多,現在已不像互聯網剛興起的時候,oracle也不會再像以前憑藉一個數據庫就能成為超級公司。

再說說為什麼用MySQL,因為MySQL是開源的,稍加定製就能適應自己的需求。MySQL一臺性能不好,但是擴展性非常好,以數據庫的複製為基礎,可以一主多從,多主多從,很多公司都開發了自己的MySQL中間件,哪怕代碼初期沒考慮讀寫分離一樣不用做太大改動。大型的應用可以考慮分庫分表,這樣擴展性可就更高了。一個免費的產品就能實現了,我幹嘛還要花錢。

現在新的非關係型的數據庫越來越多,也越來越火,不僅擴展性更強,而且存取速度更快,最重要的還開源免費,數據庫技術也在迎來一場新的革命,什麼樣的數據庫,已不再重要,關鍵是什麼能滿足互聯網的需求。同樣現在的大型企業會用各種各樣的數據庫,以滿足不同需求。


excellence27871936


簡單查詢oracle的速度遠遠趕不上mysql,注意是遠遠趕不上,更別說穩定性了


分享到:


相關文章: