2016-01-28 12 views
5

私は2つのコレクションを持っており、それぞれが互いに独立していますが、それぞれが互いに関連しています。それらはphotosusersです。ユーザーと写真の間には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を読んでいます。 ?(どのように私は、操作に時間がかかる場合はどうその遅延を決定 ないバックグラウンドジョブが更新を許可された最大時間よりも大きい所定量 によって遅延されなければならない

  1. :しかし、私はと心配左です?)、および;
  2. これはのみです。ディスカッション私はまだ実用的な解決策を見つけました。 NoSQLは大したことですが、なぜこれについてもっと議論していないのですか?私は何が欠けていますか?
+0

どのような考えですか?私はNoSQLの人気を考えていたでしょうが、これは "解決された"問題です。 – Snixtor

答えて

0

私は、NoSQLを早期に理解するには、膨大な量のデータをユーザー/アプリケーションに送り返す際の真の分析が必要です。

あなたのアプリケーションであなたの写真を送り返すとき、頻繁に起こる可能性はさらに高いですか?写真をユーザー、そしておそらく彼らを見ている友人、またはユーザーの名前の変更に送り返す?

NoSQLの非正規化は、ユーザーの名前を変更することがあまり一般的でないため、従来の標準化された方法でジョインを犠牲にすることなく、ハイスピードのゴブを写真データに戻すことができます/ RDBMS環境です。

最近かなりの時間を費やしていたため、最近のいくつかのツールを使用すると、このような状況を助けることができますが、これを処理するコード変更のスケジュールを設定できるという点で本質的でした。 .Itは遅くなります...それは高価です....しかし、それは動作します...そしてあなたはまだアプリケーションにあなたの写真を配信する速度の恩恵を受けるでしょう、それは基本的にあなたの主な目的ですアプリ。

この質問は、一方ではSQL Defenders、もう一方では "乱暴な" NoSQLフォロワーを持つ壮大な小説に成長します。伝統的なDBAは、速度のために構造を妥協するという考えで震えますが、何が返されるのか、何を格納する必要があるのか​​という点で考えていた、古い「スーパーテーブル」の概念であると考えています。本質的に...これがNoSQLのコンセプトを生み出したもので、大規模なアプリケーションや大規模なデータの報告に非常に役立つことが証明されています。

これは古い質問ですが、このタイプの質問については、私の回答がNoSQLのメリットを説明できないように助けてくれることを願っています。

+0

私の質問は、すべての古い、2週間未満ではありません。 @ Indy-Jones、あなたはいくつかの良い*議論*ポイントを挙げていますが、以前は何度もこれらの点を別の場所で見てきました。私が探しているのは、その "遅い、高価な更新"のパターンを実装するためのパターンやツールです。私はこの些細な工学的な作業はアプリケーション開発者に委ねられていることに驚いています。 – Snixtor

関連する問題