私は2つのコレクションを持っており、それぞれが互いに独立していますが、それぞれが互いに関連しています。それらはphotos
とusers
です。ユーザーと写真の間には1対多の関係があります。NoSQLの非正規化整合性を維持する方法は?
非正規化データの例:
users:
{
"id": "AABC",
"name": "Donna Smith"
}
photos:
{
"id": "FAD4",
"description": "cute dog",
"user_id": "AABC", // This is the relationship
"user_name": "Donna Smith" // This is the denormalized value from the "users" collection
}
どのように私は、ユーザー「AABC」は「ドナ・スミス」の「ドナ・チャン」から名称を変更しphotos
コレクション内のドキュメントとの整合性を確保することができますか?
トランザクションではないため、整合性はとなり、最終的にはとなることがわかりました。
単純な(単純な)実装では、user_id = "AABC"のすべての写真を更新するために、ユーザ "AABC"への変更後にバックグラウンドジョブがトリガされることがあります。そして、単一の更新の場合、それはうまくいくでしょう。しかし、これはマルチユーザー環境であり、更新はすべての方向に並行して行われます。たとえば、「Donna Smith」を「Donna Chang」に変更する写真のバックグラウンド更新の途中で、「AABC」というユーザー名が「Donna Smith」に変更された場合はどうなりますか?
オンラインで検索すると、どのようにしてモデル非正規化データについての議論が多く見られます。しかし、どのようにを維持する方法についての議論は、 "あなたはまた、すべての関連レコードを更新する必要があります"とtrivializedようです。このシナリオであなたのために重労働を起こすNoSQLシステムはありますか?任意のフレームワークまたはユーティリティ
正確にこのシナリオのための「マテリアライズドビュー」のトピックと背景の更新については、Thomas Wanschik's excellent blog articlesを読んでいます。 ?(どのように私は、操作に時間がかかる場合はどうその遅延を決定 ないバックグラウンドジョブが更新を許可された最大時間よりも大きい所定量 によって遅延されなければならない
- :しかし、私はと心配左です?)、および;
- これはのみです。ディスカッション私はまだ実用的な解決策を見つけました。 NoSQLは大したことですが、なぜこれについてもっと議論していないのですか?私は何が欠けていますか?
どのような考えですか?私はNoSQLの人気を考えていたでしょうが、これは "解決された"問題です。 – Snixtor