MongoDB最新動向

ということで、Database Lounge Tokyo #1 に落選したのですが、幸か不幸か同日・ほぼ同ロケーションの恵比寿でMongoDB最新動向が開催されていたので、そっちを聞きに行くことにしましたよ。
MongoDBは2年くらい前にPostgreSQL JSONB型との比較ということで、MongoDB 2.4/2.6くらいを使ったんだけど、それ以降、あまり追っていなかったから、最新動向を聞いてみることにした。



MongoDB World 2016 キーノート報告

講師は鈴木いっぺいさん

CEOからのふわっとした話
  • MongoDB World、3000人くらい来場する。
  • 今年のキーワード "Giant Ideas" 大きなアイディア
    • スピード重視。いろんなデータを集めて早く分析し、AI/Deep Learningにかけたい。
  • MongoDBコンセプト
    • データベース設計、運用の工数を以下に少なくするか。
  • 事例紹介
    • Mapit ナイジェリアの会社の事例。
    • Nanopore 4,5分でDNA解析
  • MongoDB使われているよーという話。
    • MongoDBのユーザ数は増加。既に2000万DLされている。
    • 開発者数も増えている。アクティブ。
    • NoSQL内ではMongoDBが過半数のシェア
CTOからの話
  • MongoDBコンセプト
    • 人間の考え方に近い⇒ドキュメント型
    • RDBコンセプト(CRUD)も取り込み
MongoDB 3.2の話
  • WiredTigerを取り込んだMongoDB 3.2の話。
    • Replica Set Election 1.7秒で投票完了。
    • ドキュメントバリデーションの追加
    • JOIN相当の$lookup, pipeline, 複数ストレージエンジンの採用。インメモリストレージなど。
MongoDB 3.4の話
  • 今年の後半にリリース?
  • Initial Sync、同期のパラレル化、途中再開を可能に。
  • Collation Per Operation
  • BI-Connector, Tableau等可視化ツールとの間の性能向上。
  • Compassスキーマ可視化
  • Read-Only View:データのマスキングもできる?
  • なんとグラフ検索ができるようになる! $Lookup の拡張(recursive lookup)
    • あれかなー、PostgreSQLでいうところのCTEっぽいやつ?非循環グラフとか限定されるのかしらん。
  • #facet 1つのクエリ内で複数のクエリを含められる?うーん、MongoDBそのものというより可視化の話なのか・・・?
  • Zones Sharding
    • 複数データを利用者近くに集中させるケース
    • 新しいデータと古いデータを分けるケース。
Compassの話
  • スキーマ分析という言葉から誤解していたけど、文書構造の分析ではなくて、データの値を分析するものか。
    • CompassではExplainの可視化もするので、開発ツールとしても有効。
    • Explainを元に性能改善する例
    • データ分析のデモ:1899年生まれのデータがある。間違いでは?⇒データ削除や編集のデモ。
    • Compass v1.3beta DL可能。
Atlasの話
  • Atlas というMongoDBクラウドができた。最もシンプルで信頼性と拡張性の高いサービス。
  • 実はMongoDBクラウド化の試みは2011年からやっていた。
  • MongoDBユーザの7割は実はAWS上で使っている。
  • Atlasのデモの説明。
    • ストレージ量、性能、暗号化の設定が可能。動的変更可能。レプリカ/シャーディングの設定。
ユーザ紹介
  • IBM
    • PowerSystem
    • IBM LinuxONE: Linux実装したサーバ。この上でMongoDBを動かしている。
      • MongoDBを含むOSSの実装
    • Cognitive Solutions (Watson事業)
    • MongoDBとのパートナーシップ
      • MongoDBと共同開発したトレーディングデモ
      • Dockerコンテナ化したMongoDB?
  • Comcast
    • 2700万ユーザ、1400万箇所のWifiスポット
    • CDN peek 30Tbit
    • オリンピック放映権を取得。10億ドルの投資。
    • コンテンツ配信の場合、ピーク時対応が重要な問題。1秒に10万リクエスト。
    • LAST KNOWN GOODモデルの話。MongoDBはそれが非常にやりやすい。
    • Reuse Quivalency Principleの話。うーん、良くわからん。ACIDの話がここで出てくる。
      • 1日に数回のアップデートが可能。2000万個のデバイスも三週間に一回アップデート。
  • CaptalOne (クレジット会社,米国第4位)
    • 金融ではなくIT会社であるという自負。
    • お金をより賢く使うソリューション提供
    • 銀行に対する期待が変わっている。いつでもどこでもバンキング。
    • 大量のデータ。深い・多角的な分析
    • MongoDBを基盤としたHYGIEAという分析ダッシュボードを開発した。



MongoDBは迷走気味?

本題に入る前に、まさかの MongoDB World 2016 キーノート報告 をDisるとかw

  • MongoDBの2つの用途がある。これをごっちゃにできない。
  • 米国と日本で使い方違う説。
  • 日本ではアジャイル開発・半構造データ
  • そもそもMongoDBは分析用途ではない!
    • Mongoは小さいCRUDを大量に処理するのに向いているのでは?
なぜ分析に向かないか。

列指向でない
SQLか書けない
機械学習計算ができない
Spark/Hadoop界隈と断絶している

  • MongoDBグラフは遅いんじゃね?
  • イケてる部分
    • スピード開発、Compass、MonfoDB Atlas 地図情報、



本題:MongoDB 最新情報

API
  • ドキュメントバリデーション
    • バリデータの規則もJSONで定義。
    • でもバリデートエラーメッセージがイケてない(同じメッセージ)。
    • exists, type, in, regexp
  • 部分的インデックス
    • ある値の条件によってインデックスに追加。
新しいCRUD
  • 3.0で4種類だったのが、3.2で大幅に増加した。
  • 明確に更新するドキュメント数がAPIでわかるようになった。
$lookup
  • Left outer join相当ができる。
  • 他のコレクションにクエリを投げつけているだけ。
  • ACIDないし、RDBの感覚で使うと痛い目見るかも。
アグリゲーションの性能改善
  • プライマリシャードに負荷集中というのを解消したらしい。
  • PoistgreSQLで言えばインデックスオンリースキャンっぽい動作の追加?
全文検索対応
高可用化の改善
  • レプリカセット構成の変更
Read Concern
  • 過半数にデータが更新されるのを待って読む機能・・・なんとなくわかったが難しい。
  • MongoDBのRollbackはRDBとは違う!
    • 切り離されたプライマリがセカンダリとして再接続するときに、旧プライマリにしかないデータをパージする処理(で、合ってるのかな?)
ストレージ(WiredTiger)
  • Version 2 MMAPベース
  • Version 3.0
    • MMAP v1(デフォルト)
    • WireTiger
  • Version 3.2
    • MMAP v1
    • WiredTiger(デフォルト)
  • MMAP v1とは
    • ディスクにあるファイルをそのままメモリに乗せるというか、OSに任せている。
    • 更新は in place ⇒ 書き込みロックが必要。
    • V2.x系はデータベース全体、V3.0 ではコレクション全体のロック。
    • ディスク再配置時が問題。処理が重い。
  • WiredTiger
    • MVCC採用
      • 書き込み中に読み込みが待たされない。
    • ドキュメントレベルロックを実現
    • きちんとMongoDBでストレージを管理。
    • チェックポイント時(ファイルへの書き戻しタイミング)にVACUUM相当の処理を行う。
    • ジャーナル有効化でWAL相当の永続化を行う。
    • インデックスとデータファイル間の同期のためにトランザクション処理。複数コレクション対応ではない。
他のストレージ
  • インメモリ
  • 暗号化対応のWiredTiger
    • 有償版のみ。
その他
  • 運用改善
  • fsyncでロック
  • 32bitが非推奨
QA.
  • MMAP v1 から WiredTigerへの切り替え⇒レプリカセット+ローリングを有効に使う。
  • V3.0⇒V3.2の性能改善効果って?
    • 書き込み性能構造、マルチコアに対応
  • セキュリティ関連は?
    • 暗号化くらい?
  • バリデーションの記述はどの程度できる?
    • レンジやリストは可能。MongoQueryと同じ書き方と同じものができる。
最後に
  • はじめてのMongoDB の紹介。
    • アプリ開発者向けの本だよー。DBA向きではないっぽい。
    • じゃんけん大会で2冊デリバリ。残念ながらGetできず。