※ずっとRBMSな世界で過ごしてきた人の個人的なメモです。
右も左もわからない状態で初めてMongoを触った時、特に予め知っておきたかった事。
すでに使ってる人から見ればわざわざメモするまでもない内容。
"とりあえず"でMongoを使う前にここだけは考慮したい
ドキュメントの構成
ドキュメントの単位は、業務で利用する単位とする事がおすすめ。
RDBMSのノリで正規化していってしまうとパフォーマンス低下の原因となる。
(業務の主体となる単位がおすすめ。例えば業務で扱うのが"人"の情報なら、1人につき1ドキュメント)
ドキュメントサイズ
通常超える事は無いが、1ドキュメント16Mの制限があるので、軽く意識しておく。
どうしても超えてしまう場合にはリファレンスコレクション(関連テーブル的な)の導入を検討するべき。
シャード構成
取り扱うデータの件数が多い場合にパフォーマンスを求める場合、シャーディングの構成を
どのように(スペック含め)するかは先にキメておかないと痛い目を見る。
シャードキー
特にシャードキーは適当にキメてしまうと全然効率的な分散が出来ない事もあるので
たとえば「人」が単位のドキュメントの場合、単純に連番を振って段階的なシャーディングにしてしまうと
初期のユーザ(番号の若いユーザ)から順番にシステムを利用しなくなってしまった場合に負荷が偏ってしまい
シャーディングの旨さを享受できない。
このような場合、シャードキーをただの連番ではなく、連番のHashed Index等にしておけば解決する。