10

DB システムが重要になるアプリを構築しています。その価値はすべてデータに含まれるため、スケーラブルである必要があります。

私はライブ投票システムを作っています。

私は SQL と MongoDB に慣れているので、それはほとんど決定要因ではありません (ただし、最近は MongoDB 構造と JS の方が好きな傾向があります :))

しかし、私がウェブで読んだすべてのことから、私はまだ自分の決定に不快感を覚えています.

私がやりたいことは、両方の利点を組み合わせることです。

  • オブジェクト (ユーザー、アイテム、コメントなど) の SQL ドキュメントがない
  • リレーションシップ用の SQL テーブルを持つ (テーブル User-Items、User-Comments など)
  • 投票があるたびに、または一定の間隔で投票結果を複製すると、noSQL ドキュメントになります (投票結果の表示でも速度を上げるため)。

私が見る大きな利点は次のとおりです。

  1. ドキュメントをクエリする場合 (例: ユーザーが自分のプロファイルを表示する場合)、NoSQL のすべての利点 (速度、すべてが 1 か所にある、スキーマの柔軟性など) を利用できます。
  2. 統計 (例: 投票数) を行う場合、SQL のすべてのメリットを利用できます
  3. 並列化: SQL で投票を取得し、aSync モードでドキュメントを取得できます
  4. 読むのは速く、書くのは遅い (私の場合は問題ではない)
  5. 関係の整合性は常に維持されます

私の質問は次のとおりです。

  • そうすることは良い習慣ですか?ウェブはそれについてかなり恥ずかしがり屋のようです
  • DB負荷が高い場合でも、ピーナッツを最適化していますか? (ドキュメントのフェッチと完全な SQL および select * from table where primary_key = XXX などのクエリとの比較)
4

4 に答える 4

7

「ベスト プラクティス」という言葉はひどいものです。「これが私たちが常に行ってきた方法です」、またはその他の偏見を本能的に正当化するためによく使用されます。

ただし、説明するソリューションには多くの利点がありますが(いくつか言及しています)、いくつかの重大な欠点もあります。これは主に、問題のドメインに関する知識を2つの互換性のないデータストアに分割しているためであり、これにより多くの重複の機会が開かれます-だけでなく、矛盾もあります。

たとえば、特定のユーザーが特定の識別子によって識別されるという知識は、NoSQL システムとデータベースの間で共有されます。一方のシステムがそのユーザーを削除すると、もう一方のシステムは一貫性のない状態のままになります。特定のユーザーのプロファイルは 2 つのシステムに分割され、どちらにも全体像はありません。多くのハウスキーピング同期コードが必要になります。

あなたのプラットフォームで作業する開発者は、両方のテクノロジー スタックの専門知識を必要とします。特定のユーザーのコメント数が正しくないように見える理由をデバッグしようとすることを想像してみてください。

NoSQL または SQL データベースのいずれかに障害が発生すると、システム全体が機能しなくなります。また、障害はクラッシュを意味するのではなく、パフォーマンスの問題、アップグレードの問題、またはバックアップの問題を意味する場合もあります。

ソフトウェア ソリューションが複数のシステムを持ち、それぞれがデータの一部を所有することは珍しくありません。分割は通常、ビジネス ドメインの線に沿って行われます (CRM システムはユーザーのプロファイルを認識し、支払いシステムはユーザーのクレジット カードの詳細を認識し、e コマース システムはユーザーが注文したものを認識します)。 ; 技術的な線に沿って分割すると、複数の障害点を持つ複雑なアーキテクチャが作成されます。

利点がそれらの欠点を上回るとは思いません。

于 2014-03-18T17:16:25.057 に答える
5

RDBMS と共に NoSQL データベースを使用する唯一の理由が速度と柔軟性を高めることである場合は、代わりにキャッシュ サーバー (Memcache など) を使用することをお勧めします。SQL ステートメントを使用してドキュメント/結果を作成し、単一のキー値を使用して memcache に保存して、後で取得することができます。MongoDB と言うよりも実装がはるかに簡単です。ただし、キーを使用してドキュメントの検索を行うだけの場合や、ドキュメントに対してより複雑なクエリを使用する予定がある場合は、もちろん要件によって異なります。

于 2013-04-25T10:43:08.603 に答える