3. 目次
• API
o ドキュメントバリデーション
o 部分的インデックス
o 新しいCRUD
o アグリゲーションフレームワークの改良
• 高可用構成
o プライマリ選出高速化
o 設定サーバ群がレプリカセットに
o Read Concern
• ストレージ
o デフォルトがWiredTigerに
• 運用
8. 部分的インデックス
• ドキュメントの中のある値の条件よって、
そのドキュメントをインデックスに含めるかどうかを分けれる
• 例
o Scoreにある80点以上ドキュメントだけをインデックスに含める
o db.scores.createIndex({"score":1},
{partialFilterExpression: {score:{$gt:80}}})
• 条件の指定
o キーの存在
o 値そのもの
o 値の存在
o 値の型
• 使いドコロ
o インデックスツリーそのものの大きさが減ることにより
インデックスサイズの削減
インデックス探索の高速化
19. • データロストが発生する壊れ方
Read Concern
アプリ1
プライマリ
A B C
セカンダリ
A B C
セカンダリ
A B
書き
セカンダリ セカンダリ
A B A B
C
①↑まだ同期できていない↑
②↓ここでネットワークが分断される
アプリ2
セカンダリ
A B C
セカンダリ
A B C
プライマリ
A B
書き
セカンダリ セカンダリ
A B A BD
D
③レプリカの過半数が見え
ないためセカンダリに降格↓
D D
セカンダリ
A B
C
セカンダリ
A B
C
プライマリ
A B
セカンダリ セカンダリ
A B A BD D DDD
④Cをロスト
21. mongod
デフォルトがMMAPv1からWiredTigerに
• Version 2.x
o 名無しのストレージ(MMAPベース)
• Version 3.0
o MMAPv1 ⇒ デフォルト
o WiredTiger ⇒ オプション
• Version 3.2
o MMAPv1 ⇒ オプション
o WiredTiger ⇒ デフォルト
MMAPv1
ストレージAPI
参考) http://www.slideshare.net/NorbertoLeite/mongodb-wiredtiger-internals
セキュリティ
MongoDBクエリ言語エンジン
WiredTiger
アプリケーション
MonogDBドライバ
管理
MMAP用
データ
ファイル
WiredTiger用
データファイル
MMAP用
データ
ファイル
WiredTiger用
データファイル
22. デフォルトがMMAPv1からWiredTigerに
• MMAPv1とは
o MongoDB 3.0のデフォルト
o ディスクにあるファイルをそのままメモリに乗せる
o OSがキャッシュするデータを決める
LRUのアルゴリズムでページアウトさせる
最も頻度が高いメモリのページが残る
o つまり、「手抜き」のストレージ
D
E
F
ディスク
メモリ
C
B
A
B
D mongod
プロセス
OSにメモリに
乗せてもらう
E
23. デフォルトがMMAPv1からWiredTigerに
• MMAPv1における更新=in place(その場)
ディスク
メモリ
{ name : "abe",
age : 20 }
doc1 doc2 doc3
{ name : "abe",
age : 20 }
ディスク
メモリ
{ name : "abe",
age : 20 }
doc1 doc2 doc3
{ name : "abe",
age : 21 }
ディスク
メモリ
doc1 doc2 doc3
{ name : "abe",
age : 21 }
1.メモリに乗せる
2.更新する(アプリに応答)
3.非同期でディスクに書き戻す
{ name : "abe",
age : 21 }
クエリスレッド
クエリスレッド
同期スレッド
注意)ジャーナルを使っていないときの動き
24. デフォルトがMMAPv1からWiredTigerに
• MMAPv1の問題点
o 書き込むときにロックを取る必要がある
読み取りがブロックされ、システムのスループットは低下
コレクション全体のロック(ver 2.xではデータベースロック)
o メモリ使用量を制御できない(OSまかせ)
OSは空いているだけ使う
o 物理的に収まりきらない場合は、ディスク上で再配置が起こる
非常に重い処理
物理的にデータの穴が開き、フラグメンテーション発生。
ディスク
メモリ
doc1 doc2 doc3
{ name : "abe",
age : 20, id:123456}
{ name : "abe",
age : 20, id:123456}入らない!
27. デフォルトがMMAPv1からWiredTigerに
• WiredTigerの更新の特徴
o 書き込みは1ドキュメントを追記するだけ
o 読み取りは書き込みを待たない
o ディスクに書き戻される時にディスク上の物理配置を都度調整するた
め、フラグメンテーションは発生しない
• その他ポイント
o ジャーナルを有効にすると、追記書き込みをディスクに永続化できる
チェックポイントの間にクラッシュしてもデータロストなし
o インデックスとデータファイルはWiredTigerのトランザクション機能を
使って同時に更新される
o 複数ドキュメントを跨いだトランザクションは提供されない
28. その他ストレージ
• インメモリ
o ディスクIOを行わないインメモリストレージエンジンinMemoryが選べる
ようになった
o 有償のEnterprise版のみ
o ベータ版
• 暗号化対応のWiredTiger
o WiredTigerを暗号化できる
o HIPAA, PCI-DSS, FERPAといったセキュリティの標準化に準拠してい
ます
o 有償のEnterprise版のみ
• テスト用エフェメラル
o テストで毎回データをクリアしなくてよい、テスト用のストレージエンジ
ンephemeralForTestが選べる
o ベータ版です。
30. 運用の改善
• mongodumpとmongorestoreの改良
o 圧縮に対応
o リモートのmongodに対してdumpしたデータをストリームで
転送しrestoreすることができる
• 診断用データ
o デフォルトで1秒ごとに診断用データ(Diagnostic Data)がと
られるようになった。
o データはデータフォルダにファイルとして出力される。