0

私はMongoDBをまったく初めて使用し、JDOを不可知層として使用して、(多くのプロジェクトの)基本永続化コードをMongoDBに移動することを検討しています。だから私はこの質問を、Bean を基本モデル単位として扱うのが好きな Java 開発者の観点から尋ねています。

私の質問は、サブドキュメントと、それらが独立して存在するのか、MongoDB によって内部的に統合されているのかについてです。つまり、次のようなドメイン構造がある場合:

世帯 - 個人のコレクション

Person
 - name
 - address

Address
 - street
 - postcode

世帯のドキュメントがある場合、複数の人が含まれますが、各人は同じ住所になります。

各アドレスは、MongoDB 内の別個の別個のエンティティになります (それらは同じ「クラス」であり、同じ値を持っています。または、Mongo は、同じエンティティを参照していることを何らかの方法で識別し、各アドレスの UID を内部的に保存しますか?

さらに重要なことには。1 つの住所の郵便番号を更新すると、世帯の住所サブドキュメントのすべてのメンバーがその変更を反映することになりますか?

もしそうなら、それはリレーショナル領域に迷い込んでいるようですが、そのような参照がなければ、恐ろしい非効率が生じるのを見ることができますか?

4

2 に答える 2

1

Mongo はそれらのサブドキュメントを重複排除しません。そのデータを正規化する場合は、それらのアドレスを (理想的には) 別のコレクションに保存し、含まれているドキュメントを保存するときに DBRef をそれらのドキュメントに保存する必要があります。morphia や spring-data などを使用すると、これらの参照を管理するのに役立ちます。

于 2014-01-07T15:55:46.040 に答える
1

JDO を介してデータを永続化する場合、Person+Address を Household に埋め込むか、個別のオブジェクトとして永続化するかを選択できます (RDBMS の場合と同様)。埋め込まれていない状態で保存する場合、同じ人物の複数のコピーを持っているか、複数の世帯によって参照されている単一の人物を持っているかはあなた次第です。埋め込みとして保存する場合、それらは埋め込まれているため、世帯の一部であるため、情報は複製されます。

于 2014-01-07T15:56:24.620 に答える