問題タブ [denormalized]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arrays - このデータを非正規化して MongoDB での効率を高める方法は?
そこで、私は PostgreSQL データベースを持っていましたが、それを MongoDB に移行してパフォーマンスを向上させることにしました。最終的に次のモデルを構築しました。
Departamento と Distribuidora の 2 つの主要なドキュメント。Departamento 内には、この部門内で働く従業員を表す Funcionarios という配列があります。
ただし、Distribuidora の内部では、状況はもう少し複雑です。私は、製品とそれらが配布されている都市を表すドキュメントのペアの配列を持っています。これは私の RDBMS では 3 項関係だったので、製品と都市のどのペアが Distribuidora ドキュメントに関連しているかを知ることが重要です。それだけでは不十分な場合は、すべての製品に Departamento ドキュメント (departamento_id) を参照する ID があります。
ここでの問題は、このモデルにはパフォーマンスの最適化が欠けていることです。配列内の要素で複雑なクエリを実行するには、アンワインド操作を繰り返し実行する必要があり、両方のコレクションから情報を取得するためにデータをピボットする必要があるため、クエリは非常に遅くなります。
したがって、できれば配列のない単一のドキュメントで、このモデルをできる限り非正規化したいのですが、それを行う適切な方法が思いつきません。この面倒な作業を手伝ってくれませんか?よろしくお願いします。
eventual-consistency - NoSQLで非正規化された一貫性を維持するには?
2 つのコレクションがあり、それぞれが互いに独立した値を持ちますが、それぞれが互いに関連しているとします。photos
とですusers
。ユーザーと写真の間には 1 対多の関係があります。
非正規化データの例:
photos
ユーザー「AABC」が「Donna Smith」から「Donna Chang」に名前を変更したときに、コレクション内のドキュメントとの一貫性を確保するにはどうすればよいですか?
非トランザクションであるため、一貫性が最終的なものになることを理解しています。
単純な (単純な) 実装では、ユーザー "AABC" への変更後にバックグラウンド ジョブをトリガーして、user_id = "AABC" のすべての写真を更新することができます。そして、単一の更新の場合、それはうまく機能します. しかし、これはマルチユーザー環境であり、あらゆる方向に同時にアップデートが飛んでいきます。たとえば、「Donna Smith」を「Donna Chang」に変更するための写真のバックグラウンド更新の途中で、ユーザー「AABC」の名前が「Donna Smith」に戻された場合はどうなるでしょうか。
オンラインで検索すると、非正規化されたデータをモデル化する方法について多くの議論が見られます。しかし、それを維持する方法についての議論は、「関連するすべてのレコードも更新する必要がある」ため、些細なことのようです。このシナリオで面倒な作業を行う NoSQL システムはありますか? フレームワークやユーティリティはありますか?
「具体化されたビュー」のトピックに関する Thomas Waschik の優れたブログ記事と、まさにこのシナリオのバックグラウンド アップデートを読みました。しかし、私は次のことを心配しています:
- バックグラウンド ジョブは、更新に許可されている最大時間よりも大きい事前に決定された量だけ遅延する必要があります (その遅延をどのように決定しますか?操作に時間がかかる場合はどうなりますか?)。
- これは、実用的な解決策について私がまだ見つけた唯一の議論です。NoSQL は大したことではありますが、なぜこれについてこれ以上の議論が見られないのでしょうか? 私は何が欠けていますか?
mysql - 非正規化データに対する単純な SELECT クエリ
ムービー レンズ データのジャンルは非正規化されています。
正規化された映画のジャンルを取得するための単純な SQL を作成することは可能ですか?
MySQL または PostgreSQL でこれを行っているとします。
sql - 1 つの列で減算し、別の列で加算する最も簡単な方法
基本的に、私は存在をある登録簿から別の登録簿に移動させ、原点から差し引いて運命に追加しようとしています。次のような「株式」のテーブルが 1 つあります。
国の都市値
そして、次のような構造の「動き」のドキュメントを受け取っています
。
2 つの正規化されたテーブルといくつかのクエリを作成せずにこれを行う方法はありますか。
編集
答えは次のようになります。
数量 originCountry originCity endCountry endCity
負の数とビジネス ルールは関係ありません
python - Python:最小の非正規化二重誤差
WinPython 3.4.4.2 を使用すると、次の奇妙な結果が得られます。
つまり、 と同じですが、 double float 表現ではゼロにする必要があります2**-1074
。アドレスhttps://www.python.org/shell/2**-1075
の Python 3.5.1 では、期待どおり 0 を取得します。
何が問題なのかを理解するのを手伝ってくれる人はいますか?
ありがとうございました
mysql - データベースの非正規化?
コンテキストを提供するために、Pusher(Websocket Service over cloud) を使用してリアルタイム チャット アプリケーションに取り組んでいます。ここでは、各メッセージがサーバーに記録されてから、Websocket サーバーにプッシュされ、データがクライアントにプッシュされます。メッセージの保存に MySQL を使用しています。
そのようなテーブルの 1 つが私のメッセージで、次のフィールドがありますid,chat_payload,message_time,user_id,room_id
。
最初のチャットルームにデータを入力するには、メッセージ履歴を取得する必要があります。各メッセージ オブジェクトには が含まれます。username,useravatar,chat_payload,timestamp
ただし、テーブルuseravatar,username
はそれぞれテーブルに格納されます。したがって、テーブルが非常に急速users, user_meta
に拡大するため、結合を使用して実行時にデータを取得すると、明らかにコストがかかるように見えます。ユーザー名、ユーザーアバターをテーブルに保存することは、更新の問題を引き起こすため、正しくないようです。user_meta
messages
上記のシナリオを考慮して、適切なDB /アプリケーション設計を提案してください。