共有される実体を文書の中に持つと、1つ直したときに書き直す文書は平均40.0件です。
ところが最も多く指される実体では8688件でした。平均の217倍です。
読み方から形を決めます。表の形を先に決めて、あとから読み方を合わせるのとは逆です。
MongoDBの設計の考え方は、公式が1文で示しています。
MongoDBでデータの形をつくるときの中核の原則は、一緒にアクセスされるデータは一緒に保管されるべきだ、というものであるという記述です。
だから読み方が先になります。公式も、応用の側のアクセスの型に基づいて形を決めるべきだと続けています。
公式は選択肢を挙げています。MongoDBでは、埋め込むか参照するかのいずれかによって、関係を表せるという記述です。
3番目と4番目が逆を向きます。どちらを取るかを、読み方と書き方の頻度で決めることになります。
公式は1つの集まりの中の文書は、同じ項目の組を持つことを求められないとも述べています。
この自由さは、途中で形を変えられるという意味になります。ただし読む側は、項目がない場合を扱う必要があります。
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件を読むのに1回で済みます。
MongoDBの2つの持ち方を、同じデータで作って比べました。
文書20万件、共有される実体5000件です。1つの実体は平均40.0件の文書から指されます。
文書 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回がどれだけの時間かは、置き場所との距離で決まります。SQLiteの記事では、0.001msから5msまで5000倍の幅がありました。
近ければ1.62倍の量を払う価値は小さくなります。遠ければ逆です。
一覧を出す画面ではさらに効きます。200件の一覧なら、指す形では200回ぶんの引き直しが要るためです。まとめて引けば2回で済みますが、その書き方をする必要があります。
In MongoDB, you can model relationships by either embedding or referencing your data.原文MongoDB 公式ドキュメント「Data Modeling」 この内容の有効期限2027-02-18
指される数には偏りがあります。平均で見積もると、上位の書き直しを見落とします。
MongoDBでは、多対多の関係も表せます。公式は1つの文書は複数の他の文書と結びつきうるし、その逆も成り立つと述べています。
結びつく数が多いほど、埋め込んだ場合の書き直しが増えます。その分布を数えました。
よく出てくる実体を直した場合、書き直す文書の数 順位 書き直す文書 全体に対する割合 最も多い 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件がいる。
指される数の偏りは式で作ったもので、実際の分布ではありません。偏りが弱ければ最上位もここまで大きくならず、強ければもっと大きくなります。文書340バイト・実体220バイトという値も置いたものです。ここで見せているのは、埋め込みの代償が平均ではなく分布の上位に現れるという関係で、その分布は自分のデータで数えられます。
Each document can be associated with multiple other documents, and vice versa.原文MongoDB 公式ドキュメント「Data Modeling」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る