1. 程式人生 > >知言 MongoDB首席架構師唐建法:20core處理27萬混合讀寫操作實現

知言 MongoDB首席架構師唐建法:20core處理27萬混合讀寫操作實現

MongoDB可以應用於各種規模的企業、各個行業以及各類應用程式的開源資料庫。作為一個適用於敏捷開發的資料庫,MongoDB的資料模式可以隨著應用程式的發展而靈活地更新。與此同時,它也為開發人員 提供了傳統資料庫的功能:二級索引,完整的查詢系統以及嚴格一致性等等。 MongoDB能夠使企業更加具有敏捷性和可擴充套件性,各種規模的企業都可以通過使用MongoDB來建立新的應用,提高與客戶之間的工作效率,加快產品上市時間,以及降低企業成本。(摘自MongoDB官網

為了幫助大家更加系統全面地學習MongoDB知識,特建立MongoDB知識庫,集中挑選優質內容(文章、圖書、視訊)呈現給大家。

唐建法,MongoDB官方大中華區首席架構師,中文社群創始人,曾在美國惠普及聯邦快遞擔任技術負責人和首席架構師等職。
圖片描述
唐建法

CSDN知識庫:能否分享一下你的技術成長之路。

唐建法: 多年Java開發經驗,熱衷於開源,從開源軟體的受惠者到開源軟體的提供者到現在的佈道者,開源軟體伴隨了技術領域的發展之路。

CSDN知識庫:Mongodb與傳統的關係型資料庫有什麼區別?最大優勢是什麼?

唐建法:相比於RDBMS的關係資料模型,MongoDB採用JSON作為其資料模型,非常接近於程式設計師熟悉的物件模型。MongoDB可以讓開發者省掉繁瑣的資料庫設計過程,顯著縮短產品開發週期。對資料庫的操作不再需要一個專門的語言,而是通過API呼叫的方式,為開發者喜聞樂見。

MongoDB從一開始就是一個分散式資料庫。其成熟的分片技術允許使用者非常容易的擴充套件到數十億的資料量並可以支援億萬級的使用者。相對來說,RDBMS的擴充套件性非常受限,即使是有一些分庫分表技術也是需要繁瑣的運維手段和應用程式支援,並且效能往往不能得到保證。

CSDN知識庫:Mongodb是否可以進行復雜的查詢操作,在效能上有哪些突出的表現?

唐建法: MongoDB是在功能上最接近傳統RDBMS的一個NoSQL資料庫。支援絕大部分的複雜查詢操作,如使用二級索引進行多個欄位匹配,陣列內查詢,聚合分析,甚至支援強大的MapReduce。在效能上,MongoDB由於使用非同步落盤,在併發寫入和查詢上有非常優越的表現。測試表明在一臺20core的伺服器上MongoDB可以達到27萬的混合讀寫操作,並且95 percentile的操作都在10毫秒之內返回。

CSDN知識庫:Mongodb的分片策略有哪些,不同的分片策略會產生怎樣的影響?

唐建法: MongoDB分片策略有3種: 雜湊,範圍和標籤。雜湊對資料分佈支援較好,適合寫入壓力大,讀壓力小的場景。範圍分片比較適合range query,一次性查詢一個連續區段資料的場景。而標籤則在理解資料分佈的基礎上,自己來定製資料的分佈規則。MongoDB的片鍵一旦設定不能修改。修改片鍵則需要把資料全量匯出再匯入到新的叢集內。

CSDN知識庫:Mongodb是如何儲存檔案(圖片,視訊和音訊),如何提高讀寫檔案的效能?

唐建法: 對於小型二進位制檔案(如頭像或者幾個MB的PDF之類),可以直接按二進位制欄位存入JSON(BSON)文件內。MongoDB另外提供GridFS API,可以用來管理較大的二進位制檔案。GridFS API會自動對大檔案進行切塊儲存,並在讀回時自動封裝為原始檔,減少程式的程式碼量。如果需要快速的檔案讀寫效能,MongoDB一般建議:

  • 為資料盤和Journal日誌盤使用單獨的物理卷
  • 有可能的情況下使用SSD
  • 使用本機直掛的儲存(DAS)
  • 使用RAID來提高儲存系統的IOPS

CSDN知識庫:Mongodb是如何做到應對高併發高可用和資料負載均衡的呢?

唐建法: MongoDB使用分片叢集來應對高併發,使用複製集技術來提供高可用,並提供路由節點mongos來對資料和請求進行負載均衡。在MongoDB架構裡面沒有單點故障的存在。所有的資料節點或者配置節點均為3節點以上高可用部署。MongoDB的複製技術支援各種拓撲,甚至多中心的容災部署也可以簡單搭建。路由節點為無狀態節點,可以根據系統壓力隨時增加或者減少路由節點的數量(一般至少要2個)。

CSDN知識庫:可以分享一兩個國內在使用Mongodb的公司企業嗎?他們的使用場景及訪問量數量級?

唐建法: 在百度雲專案, MongoDB用來儲存檔案的元資料資訊(檔名,大小,訪問時間,路徑等等)。百度雲專案有3億多使用者,MongoDB文件條目數量超過2000億,資料總量超過2PB。百度有100多個MongoDB專案,執行在上千個節點的MongoDB叢集上。

東方航空正在他們最關鍵的新一代機票搜尋專案中使用MongoDB。根據東航的公開分享,他們MongoDB資料庫總條數有數十億,每天寫入2600萬次,查詢4500萬次,80%的查詢低於50ms,CPU利用率小於30%,這些僅僅只是由一套3節點的複製集來提供。

CSDN知識庫:Mongodb未來的趨勢是怎樣的,目前還面臨著那些挑戰?

唐建法: MongoDB官方最近增大了對中國市場的投入。在國際上,頂級的跨國金融機構如花旗,巴克萊,高盛,CapitalOne等都在紛紛大規模採用MongoDB作為他們新一代資料庫平臺的標準。他們共同的目的就是降低IT成本的同時,提高團隊的開發效率,縮短產品從概念到市場的時間,快速展現業務價值,通過改善客戶的體驗來提高競爭力。

目前面臨的主要挑戰就是國內對MongoDB的認知程度不夠,以至於大部分時候都是使用在非關鍵型應用場景。

CSDN知識庫:關於技術學習您有什麼心得?我們上線了知識庫系統化學習的方法,您會怎樣用?

唐建法:如果想使用好MongoDB,首要的關鍵是要拋棄固有的關係型資料庫的思維模式。忘掉關係型,從業務的角度出發來考慮對資料庫能力的需求。在知識庫方面,希望能夠多提供些結合MongoDB做應用開發的文章和經驗,相比於分享運維知識可能更加有學習價值。

圖片描述