MongoDB Applied Design Patterns
第1章 デザインパターン
1. 埋め込みと参照
リレーショナルデータモデリングと正規化
MongoDB:正規化は必要なのか?
まとめ
2. ポリモフィックなスキーマ
オブジェクト指向プログラミングを支援するポリモフィックなスキーマ
スキーマの進化を可能にするポリモフィックなスキーマ
半構造化ドメインデータを支援するポリモフィックなスキーマ
まとめ
3. トランザクショナルな振る舞いの模倣
一貫性に対するリレーショナルなアプローチ
複合ドキュメント
複雑な更新処理
補償を伴う楽観的な更新処理
まとめ
第2章ユースケース
4. 運用の知恵
ログデータの保存
集約前のレポート
階層集約
5. Eコマース
製品カタログ
カテゴリの階層
在庫管理
6. コンテンツ管理システム
メタデータと資産管理
コメントの保存
- オンライン広告ネットワーク
ソリューションの概要
設計その1 : 基本的な広告の配信
設計その2 : 頻度の上限の導入
設計その3 : キーワードターゲティング
- ソーシャルネットワーキング
ソリューションの概要
スキーマ設計
運用
シャーディング
9. オンラインゲーム
ソリューションの概要
スキーマ設計
運用
シャーディング
今後に向けて
50 Tips and Tricks for MongoDB Developers
第1章 アプリケーション設計に関するTips
#1 スピード重視ならデータを複製、整合性重視ならデータを参照
#2 将来も安心なデータが必要なら正規化を
#3 データの取得はできるだけ一度のクエリで
#4 依存フィールドの埋め込み
#5「point-in-time」データの埋め込み
#6 増加の限度が見えないデータは埋め込み禁止
#7 データの投入はできるだけ早めに
#8 可能な場合は事前に領域を割り当てましょう
#9 匿名アクセスに備えて配列に埋め込み情報を保存
#10 自己完結型のドキュメント設計
#11 JavaScriptよりは$演算子
#12 集約は随時
#13 データの整合性の課題を処理するコードを書きましょう
第2章 実装に関するTips
#14 適切な型の使用
#15 シンプルでユニークな独自のIDがあるなら、_idをオーバーライドしましょう
#16 _idにドキュメントを使うのは避けましょう
#17 データベースの参照は避けましょう
#18 小さなバイナリデータにGridFSを使うのは避けましょう
#19 「シームレス」なフェイルオーバーの処理
#20 レプリカセットの障害とフェイルオーバーの処理
第3章 最適化に関するTips
#21 ディスクアクセスの最小化
#22 省メモリで処理能力を向上させるインデックスの利用
#23 インデックスを使うべきではない場合
#24 クエリをカバーするインデックスの生成
#25 複数のクエリを高速化するための複合インデックスの利用
#26 高速に走査できる階層ドキュメントの生成
#27 ANDクエリのマッチはできるだけ速めで少なめに
#28 ORクエリのマッチはできるだけ早めで多めに
第4章 データの安全性と一貫性
#29 書き込みは単一サーバーならジャーナルへ、複数サーバーならレプリカへ
#30 レプリカかジャーナリング、あるいは両方を必ず使いましょう
#31 データのリカバリをrepairに頼らない
#32 getlasterrorを理解する
#33 開発時には必ずセーフな書き込みを
#34 レプリケーションではwを使いましょう
#35 wではwtimeoutを必ず使いましょう
#36 書き込みの度にfsyncするのは避けましょう
#37 クラッシュの後には通常通りの立ち上げを
#38 サーバーに耐久性を持たせるためにはinstant-in-timeバックアップを取りましょう
第5章 管理に関するTips
#39 チャンクのコレクションは手動で後始末を
#40 repairでデータベースのコンパクト化を
#41 レプリカセットのメンバーの投票数は変更しない
#42 レプリカセットの設定変更はマスターを動作させたままでも可能
#43 --shardsvrと--configsvrは必要なし
#44 --notablescanの使用は開発時のみ
#45 多少のJavaScriptは勉強しておきましょう
#46 1つのシェルからの全サーバーとデータベースの管理
#47 どの関数でも「help」を表示
#48 スタートアップファイル群の作成
#49 独自関数の追加
#50 独自の書き込みを読むための単一のコレクションの利用