データ基盤

MongoDBとは|書き直す文書は平均40.0件、いちばん多い実体では8688件だった

何を選ぶ仕組みなのか中に持つと何が増えるのか平均を見ると何を見落とすのか

共有される実体を文書の中に持つと、1つ直したときに書き直す文書は平均40.0件です。

ところが最も多く指される実体では8688件でした。平均の217倍です。

この記事の要点

  • 中に持つと106.8MB
  • 指すと65.9MB
  • 書き直しは平均40.0件
  • 最上位は8688件

一緒に読むものを一緒に置く

読み方から形を決めます。表の形を先に決めて、あとから読み方を合わせるのとは逆です。

MongoDBの設計の考え方は、公式が1文で示しています。

MongoDBでデータの形をつくるときの中核の原則は、一緒にアクセスされるデータは一緒に保管されるべきだ、というものであるという記述です。

だから読み方が先になります。公式も、応用の側のアクセスの型に基づいて形を決めるべきだと続けています。

関係の表し方は2つ

公式は選択肢を挙げています。MongoDBでは、埋め込むか参照するかのいずれかによって、関係を表せるという記述です。

  1. 埋め込む。文書の中に、関連する値をそのまま持つ
  2. 参照する。別に置いた実体を、識別子で指す
  3. 読む回数が変わる。埋め込めば1回、指せば2回
  4. 書き直す量が変わる。埋め込めば指している数だけ

3番目と4番目が逆を向きます。どちらを取るかを、読み方と書き方の頻度で決めることになります。

形が固定されないこと

公式は1つの集まりの中の文書は、同じ項目の組を持つことを求められないとも述べています。

この自由さは、途中で形を変えられるという意味になります。ただし読む側は、項目がない場合を扱う必要があります

出典MongoDB 公式ドキュメント「Data Modeling」2026-08-18 確認
A core principle of data modeling in MongoDB is that data that's accessed together should be stored together.
原文MongoDB 公式ドキュメント「Data Modeling」 この内容の有効期限2027-02-18

埋め込むと置く量が1.62倍になり、読む往復は半分になる

重複する分だけ量が増えます。その代わり、1件を読むのに1回で済みます。

MongoDBの2つの持ち方を、同じデータで作って比べました。

文書20万件、共有される実体5000件です。1つの実体は平均40.0件の文書から指されます

量と往復と書き直し

text
文書 200,000件・共有される実体 5,000件
文書は 340バイト、実体は 220バイト。1実体あたり平均 40.0件の文書から指される

持ち方          置く量        1件を読む往復  実体を1つ直したときに書き直す文書
文書の中に持つ              106.8MB             1回                             40.0件
別に置いて指す               65.9MB             2回                                1件

置く量は65.9MBが106.8MBになります。1.62倍です。

読む往復は2回が1回になります。往復が効く距離なら、これは大きな差です。

往復1回の値打ち

往復1回がどれだけの時間かは、置き場所との距離で決まります。SQLiteの記事では、0.001msから5msまで5000倍の幅がありました。

近ければ1.62倍の量を払う価値は小さくなります。遠ければ逆です。

一覧を出す画面ではさらに効きます。200件の一覧なら、指す形では200回ぶんの引き直しが要るためです。まとめて引けば2回で済みますが、その書き方をする必要があります。

出典MongoDB 公式ドキュメント「Data Modeling」2026-08-18 確認
In MongoDB, you can model relationships by either embedding or referencing your data.
原文MongoDB 公式ドキュメント「Data Modeling」 この内容の有効期限2027-02-18

書き直す文書は平均40.0件、いちばん多い実体では8688件だった

指される数には偏りがあります。平均で見積もると、上位の書き直しを見落とします。

MongoDBでは、多対多の関係も表せます。公式は1つの文書は複数の他の文書と結びつきうるし、その逆も成り立つと述べています。

結びつく数が多いほど、埋め込んだ場合の書き直しが増えます。その分布を数えました。

指される数の偏り

text
よく出てくる実体を直した場合、書き直す文書の数

順位            書き直す文書  全体に対する割合
最も多い                  8,688件             4.34%
10番目                  1,387件             0.69%
100番目                   218件             0.11%
真ん中                      17件             0.01%

平均は40.0件でした。ところが最上位は8688件です。平均の217倍になります。

真ん中の実体は17件です。平均の40.0件は、上位に引っ張られた値でした。

混ぜて使う

全部を同じ形にする必要はありません。上位の実体だけ参照にするという分け方ができます。

この計測でいえば、上位100件を参照にするだけで、書き直しの最大が218件まで下がります。残りは埋め込んだままです。

判断の材料は指される数の分布と、その実体が変わる頻度の2つです。よく指されて、よく変わるものだけを参照にします。

平均40.0件の裏に、8688件がいる。

単位: 件最も多い実体8688件10番目1387件100番目218件平均40件真ん中の実体17件文書20万件・実体5000件での実測。上位100件だけを参照にすれば、最大は218件まで下がる。
図1 ── 実体1つを直したときに書き直す文書
余談 この計測での注意

指される数の偏りは式で作ったもので、実際の分布ではありません。偏りが弱ければ最上位もここまで大きくならず、強ければもっと大きくなります。文書340バイト・実体220バイトという値も置いたものです。ここで見せているのは、埋め込みの代償が平均ではなく分布の上位に現れるという関係で、その分布は自分のデータで数えられます。

出典MongoDB 公式ドキュメント「Data Modeling」2026-08-18 確認
Each document can be associated with multiple other documents, and vice versa.
原文MongoDB 公式ドキュメント「Data Modeling」 この内容の有効期限2027-02-18

よくある質問

MongoDBは何を選ばせますか
関係の表し方です。公式は、埋め込むか参照するかのどちらかで関係を表せると述べています。
中に持つと何が増えますか
置く量です。この計測では65.9MBが106.8MBになり、1.62倍でした。
書き直しはどれくらいですか
平均40.0件です。ただし最も多く指される実体では8688件で、全体の4.34%にあたります。
どちらを選べばよいですか
一緒に読むかどうかです。公式は、一緒にアクセスされるデータは一緒に置くべきだと述べています。

まとめ

  • 埋め込むか指すかを選ぶ
  • 埋め込むと読みが1回
  • その代わり書き直しが増える
  • 上位の実体で桁が変わる

今日から始められること

  1. 一緒に読んでいるデータの組を書き出す
  2. 共有される実体が何件から指されるか数える
  3. その分布の上位を確かめる
  4. 上位の実体が変わる頻度を調べる

実務で組んだMongoDBのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る