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が過半数のシェア
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の話
Atlasの話
MongoDBは迷走気味?
本題に入る前に、まさかの MongoDB World 2016 キーノート報告 をDisるとかw
- 米国と日本で使い方違う説。
- 日本ではアジャイル開発・半構造データ
- そもそもMongoDBは分析用途ではない!
- Mongoは小さいCRUDを大量に処理するのに向いているのでは?
本題:MongoDB 最新情報
API
- ドキュメントバリデーション
- 部分的インデックス
- ある値の条件によってインデックスに追加。
- PostgreSQLの部分インデックスと同じ考え方かな。デモでもインデックスサイズ削減を例にしていたし。
- ある値の条件によってインデックスに追加。
$lookup
- Left outer join相当ができる。
- 他のコレクションにクエリを投げつけているだけ。
- ACIDないし、RDBの感覚で使うと痛い目見るかも。
アグリゲーションの性能改善
- プライマリシャードに負荷集中というのを解消したらしい。
- PoistgreSQLで言えばインデックスオンリースキャンっぽい動作の追加?
高可用化の改善
- レプリカセット構成の変更
Read Concern
ストレージ(WiredTiger)
- MMAP v1とは
- ディスクにあるファイルをそのままメモリに乗せるというか、OSに任せている。
- 更新は in place ⇒ 書き込みロックが必要。
- V2.x系はデータベース全体、V3.0 ではコレクション全体のロック。
- ディスク再配置時が問題。処理が重い。
- WiredTiger
- MVCC採用
- 書き込み中に読み込みが待たされない。
- ドキュメントレベルロックを実現
- きちんとMongoDBでストレージを管理。
- チェックポイント時(ファイルへの書き戻しタイミング)にVACUUM相当の処理を行う。
- ジャーナル有効化でWAL相当の永続化を行う。
- インデックスとデータファイル間の同期のためにトランザクション処理。複数コレクション対応ではない。
- MVCC採用
他のストレージ
- インメモリ
- 暗号化対応のWiredTiger
- 有償版のみ。
その他
- 運用改善
- fsyncでロック
- 32bitが非推奨
QA.
- MMAP v1 から WiredTigerへの切り替え⇒レプリカセット+ローリングを有効に使う。
- V3.0⇒V3.2の性能改善効果って?
- 書き込み性能構造、マルチコアに対応
- セキュリティ関連は?
- 暗号化くらい?
- バリデーションの記述はどの程度できる?
- レンジやリストは可能。MongoQueryと同じ書き方と同じものができる。
最後に
- はじめてのMongoDB の紹介。
- アプリ開発者向けの本だよー。DBA向きではないっぽい。
- じゃんけん大会で2冊デリバリ。残念ながらGetできず。