天天看點

MongoDB World 2017 參會全記錄

張友東,阿裡雲資料庫技術專家,mongoing中文社群聯合發起人,主要關注分布式存儲、nosql資料庫等技術領域,目前主要從事mongodb雲資料庫的研發工作,緻力于讓開發者用上最好的mongodb雲服務,本次給大家分享上周(6.19-6.21)在芝加哥參加 mongodb wolrd 2017 的一些收獲。

<a href="https://promotion.aliyun.com/ntms/act/mongodbdiscount.html">mongodb雲資料庫包年5折,包月6折活動火熱進行中,猛擊了解詳情</a>

MongoDB World 2017 參會全記錄

<a href="/go/1/6?postion=1" target="_blank">雲資料庫 mongodb 版</a>

基于飛天分布式系統和高性能存儲,提供三節點副本集的高可用架構,容災切換,故障遷移完全透明化。并提供專業的資料庫線上擴容、備份復原、性能優化等解決方案。

<a href="/go/1/6?postion=1" target="_blank">了解更多</a>

advacacy summit, pattern summmit, workshop(sql opt, security, ops manager, data modeling)

會議的前一天也有不少的議題,基本都是邀請制的,包括開發者峰會、合作夥伴峰會、以及一系列的收費workshop。

keynotes (09:00 - 10:50, 17:00 - 18:30)

session (mongodb production intro, mongodb internal, user case)

會議2天的安排主要分為keynotes 和 session,keynotes 是所有的參會者(1000+)聚在一塊,主要内容是mongodb公司的産品釋出,産品新特性介紹,以及合作夥伴的主題演講; session 部分内容很豐富,每個 session 約40分鐘,每個時間段都有多個不同主題的 session 可選,内容包括 mongodb 産品,mongodb 内部機制,使用者使用案列等。

after party: 第一天會議結束有一個after party 的活動,把參會者拉到一個類似酒吧的地方,聽音樂、吃東西、聊天 ...

fun run: 第二天的早上有一個晨跑的活動,

taste beer:會議結束後,會提供各種類型的啤酒供大家品嘗,參會者喝酒聊天,很有意思,可惜我對啤酒完全不感興趣。

如此豐富多彩的活動,我隻能說老外真會玩。難得出遠門一趟,加上好奇心比較重,上面所有的活動我去都參加了,今年跑步帶了裝備,3 miles 妥妥的。

跟去年一樣,今年大會也開發一款 app,友善大家在手機上安排會議内容,并可以對speaker做點評以及提問,還能友善的認識其他的參會者,就是一個簡單版本的朋友圈。

MongoDB World 2017 參會全記錄

after party 活動現場

MongoDB World 2017 參會全記錄

taste beer 活動現場

通過 tj 的介紹,聯系到負責 advocacy summit 的同學,參加了本次的 advocacy summit 活動,主要是 mongodb 社群比較活躍的一些開發者聚在一塊,聽 mongodb 的cxo 們聊未來的一些技術方向,針對一些 topic 進行技術讨論,一共50人左右,圓桌的形式,一整天吃飯、讨論都在這個房間了,收獲很大。(注:被右後方大胖哥擋住的人就是我,[捂臉])

MongoDB World 2017 參會全記錄

mognodb 公司在去年 mongodb world 的時候釋出來 dbaas 服務 atlas,能基于 aws 來建構 mongodb 雲服務,atlas 經過一年的發展,多了許多新特性,同時還有很多特性正在開發中,非常值得期待。

live migration,線上遷移,可以将你原來的執行個體資料無縫的遷移到 atlas

queryable backups, 備份集支援直接查詢,這樣當隻需要部分資料時,可以直接到備份集裡查詢出來,而不用恢複整個資料集

支援aws、azure、gcp,這個特性比較給力,基本上國外主要的雲平台都支援上了,不論你在哪個雲上,都可以友善的使用 atlas 的服務。

perfromance advisor 支援智能的性能分析及建議

m2 大規格執行個體的支援

full crud in data explore 能在atlas控制上直接操作資料,執行指令等,資料庫管理者的福音

hosted bi connector bi分析進一步加強

mongodb charts integration 整合 mongodb chart,友善的根據資料出圖形報表

cross cloud 未來 atlas 能跨多個雲服務商部署,可能一個複制集,priamry 在 aws 上,secondary 在 azure 上

ldap authentication、kmip integration 安全方面的加強

另外今年也釋出了新的産品 mongodb stitch,能更友善的基于 mongodb 建構應用,mongodb stitch 目前隻能在 atlas 上使用。

wiredtiger 團隊的負責任介紹了 mongodb 存儲方面的一些開發計劃

3.6 會支援存儲引擎級别的 upgrade/downgrade,主要是有新壓縮算法的支援、以及考慮将大文檔的更新隻存儲「改變的内容」,這樣可能會導緻存儲格式發生變化,upgrade/downgrade 就是為了支援資料級别的版本升降級。

3.8 會支援transaction,同時在大量集合、大量更新的場景做優化,然後完全廢棄 mmapv1 引擎。

4.0 及以後的版本,mongodb 會支援 lsm 來适應大量寫入場景,以及針對分析場景做 column store 的支援,同時還會考慮在移動領域,以及雲存儲場景的應用。

3.6 版本裡,driver 方面主要有幾大改進

協定上的統一,mongodb 的通信協定經過多次疊代改進,會在3.6進行統一,所有的請求走一種協定,并支援網絡資料包的壓縮(3.4已經支援snappy壓縮,3.6會支援更多的壓縮算法)。

支援 retryable write,所有的寫都可重試,這樣使用者就不用擔心寫失敗的場景,可以完全交由driver處理(後面有個主題專門介紹)。

notification api,支援訂閱資料庫的所有修改,比如使用者可以訂閱指定集合的insert、update操作,當集合的資料發生變化時就會得到通知,一種典型的場景就是訂閱oplog的修改,可以用于做增量備份,也可以将oplog應用到其他的地方,擴充更多的應用場景。

上述議題結束後,有一個 unconference 環節,議題大家現場提,每個人都可以提出想讨論的問題,每個人也可以對提出的議題投票,最後得票數比較多的議題會拿出來進行圓桌讨論,我提出向大家介紹一下 mongodb 中國社群的發展情況,以及使用者遇到的主要問題,将這些問題feedback給官方團隊。

MongoDB World 2017 參會全記錄
MongoDB World 2017 參會全記錄

第一次用英文做分享,居然完整的講完了,大家對中國使用者會一次活動有200+人表示非常震驚,并對我們社群的工作高度贊揚,感謝社群裡每一位同學的努力付出。

mongoing中文社群(mongoing.com)今年已經在杭州、深圳、北京、成都組織了四場使用者交流會,後續我們将會組織更多的線上、線下的技術交流活動,給 mongodb 的使用者建立了一個良好的技術交流平台,大家可以關注「mongoing中文社群」的公衆号,後續的技術活動、幹貨文章會第一時間推送給你。

MongoDB World 2017 參會全記錄

本次的 session 内容豐富,每個時間段都有多個可選的topic,我主要關注 mongodb internal、mongodb schema design 等方面的主題。

這個topic裡介紹 wiredtiger 如何支援100萬個集合,wiredtiger 相比 mmapv1 有很大的性能提升,但在大量集合的場景,wiredtiger 的表現不如 mmapv1,是因為 wiredtiger 每個集合/索引都對應一個實體檔案,對檔案系統的性能依賴很大;而 mmapv1 将同一個資料庫的資料合并存儲在一塊,不會産生大量實體檔案。

wiredtiger 在成為 monogdb 存儲引擎之後,發現很多最初的設計跟 mongodb 的場景是不相比對的,比如wiredtiger假設使用者隻會建立很少的table,也隻有少量的線程會并發讀寫,而在 mongodb 的場景裡可能會有大量的集合,同時因為 mongodb one thread per connection 的網絡服務模型,會導緻同時可能有大量的線程讀寫wiredtiger資料。

MongoDB World 2017 參會全記錄

wiredtiger 為了更好的支援大量集合的場景,主要做了如下改進

cache handle 的管理,由原來的連結清單改為hash表,實作o(1)的查找和删除。

eviction 和 checkpoint 的時候,考慮到大量集合的場景,而大量集合中可能隻有少數集合是活躍的,會盡量高效的跳過未修改的集合資料。

增加 --groupcollecitons 選項,同一個資料庫的所有集合及索引隻會對應2個wiredtiger的table,一個用來存儲資料,一個用來存儲索引;這個特性目前還在開發中。

這個topic 主要介紹 3.6 版本裡即将引入 的 session 特性,driver 連接配接 mongodb server時,可以先建立一個 session,session 的狀态資訊會存儲到 server 端,即使 client 斷開重連,session 的資訊不會丢失,基于這個特性,在3.6裡會實作

retryable write,因為 session 資訊在server端,所有的寫操作在用戶端都是可重試。

session 自動逾時,能自動回收 session 關聯的所有資源

實作 cluster 級别的killop,mongos 上的 session,mongos 會自動跟 shard 上的 session 關聯起來,當使用者 killop 清理 mongos 上的session操作時,mongos 會自動将 shard 上關聯的 session 操作也清理掉;使用者不再需要連接配接到每個shard上去逐個 killop。

MongoDB World 2017 參會全記錄

這個 topic 主要介紹文檔資料庫常用的設計模式,其實這些模式都是比較通用的,在很多場合都适用。

文檔資料庫最大的特點就是其靈活性,可以通過 field: value 來表達各種資料,在設計時field可以盡量抽象成 attribute,比如一個文檔用于記錄每個城市的氣溫。

這樣做有個比較大的問題就是字段數量不确定,并且非常不便于索引,更好的方式應該是進一步抽象,提取出城市以及氣溫這2個attribute,比如

這樣改進後結構更清晰,而且能友善的針對 weather.city, weather.temp 建索引。

MongoDB World 2017 參會全記錄

subset 主要針對大文檔,在有些場景,使用者的文檔可能很大,但需要通路/修改的部分可能很少,其中大部分内容都是靜态的,并且很少被通路,這樣的資料就沒必要加載到記憶體,這樣就可以通過 subset 的方式,将靜态很少被通路的資料以子集的方式存儲到其他地方。比如下述文檔

這是可以将filedn 存儲到另外的集合,然後加上對應的引用,這樣就隻有經常需要通路的資料被加載到記憶體,記憶體利用的效率更高。

computed 主要用于減少頻繁需要的重複計算,比如針對某個集合,經常需要對集合的某個字段進行求和,這是就可以考慮在每次插入時,進行求和計算,并把計算結果存儲下來,這樣每次求和時就不用全表掃描來計算。

approxmiation 是 computed 的改進,如果每次插入時更新計算結果開銷太大,并且應用能夠接受不精确的結果,則可以考慮周期性的進行更新,比如mongodb本身對集合的文檔數、大小資訊就是使用周期性更新的政策來維護的,是以每次db.coll.count() 都能很快的傳回,但風險就是如果中間出現crash,可能導緻count值與實際文檔數不一緻。

overflow 主要思路是将資料存儲到多個bucket裡,比如以天為機關組織資料,先把資料存儲到當天的bucket(也可以是一個集合),到第二天又建立一個新的bucket存儲新的資料,劃分bucket的方式可以很靈活。

這個 topic 主要介紹如何做容量評估,主要幾個方面

data size 根據需要的集合數量、文檔數量、以及文檔平均大小來預估總的資料量,來評估需要的磁盤存儲空間

working set 根據索引大小、經常需要通路的文檔數來預估活躍資料集來評估需要的記憶體大小

queries iops 根據讀寫通路請求評估需要的iops量

shard collections 根據容量、讀寫需求評估是否需要進行分片,以及分片的規模

上面的方法隻是一個理論上的預估,要精确的了解容量及性能需要,最好是進行實際測試來評估。

MongoDB World 2017 參會全記錄

這個 topic 主要介紹writeconcern、readconcern的設計初衷,以及各個level分别解決什麼問題,這個官網文檔很詳細了就不做過多的介紹了。值得一提的是,speaker 以獨特的方式演講,把問題解釋得非常透徹,大寫的服。

MongoDB World 2017 參會全記錄

其他還聽了關于 index selection、mongodb perf 理論及實踐的topic,内容都非常的好,但太過細節不太好整理,這裡就先忽略了,等ppt出來大家可以學習下。

國内還有華為、東航的同學參加了 mongodb world 17,他們都是mongodb的客戶

MongoDB World 2017 參會全記錄

<a href="https://www.mongodb.com/world17">mongodb world 2017</a>

<a href="https://www.aliyun.com/product/mongodb">mongodb雲資料庫</a>

<a href="https://www.mongodb.com/cloud/stitch">mongodb stich</a>

<a href="https://promotion.aliyun.com/ntms/act/sharding.html">mongodb sharding</a>

MongoDB World 2017 參會全記錄