1

単純な関係がある場合にデータベースを使用する正確なポイントは何ですか (95% のクエリは ID に依存しています)。

ユーザーとその統計を保存しています。

次のようなきちんとした構造を持つことができるのに、なぜ外部データベースを使用するのでしょうか。

db.users[32] = something

500K ユーザーの配列は、RAM にとってそれほど大きな労力ではありません

長所は次のとおりです。

  • 問題のない非同期性 (即時の結果)
  • 簡単な輸出入
  • ネイティブオブジェクトのようにデータベースを扱う

ps。および考慮事項:

  • よりも実行するのが速いか遅いcollection[3]db.query("select ...
  • ファイルとして保存します
  • このデータにアクセスするアプリケーション/プロセスは 1 つだけで、コードは 1 行ずつ実行されます。ロックについて詳しく説明しないでください。
  • データベースの提案については答えないでください。しかし、ネイティブ配列/オブジェクトよりも外部 DB を使用する理由 - 私はいくつかのデータベースでの経験があります - そうではありません。
  • 私が構築しているのは、クライアント/ゲートウェイ/サーバー ゲームです。ゲートウェイは、すべてのユーザー データ、処理、認証、統計の書き込みなどを処理します。ソフトウェアの他の部分は、このデータ/データベースに直接アクセスする必要はありません。
4

2 に答える 2

2

これは、そのデータの耐久性、遅延、および存続期間の要件によって異なります。メモリ内では、データ構造へのアクセスは、ほとんどの場合、ネットワークを外部データベースにホッピングするよりも大幅に高速ですが、考慮すべきことがあります。

それをメモリにのみ保持することはできますが、プロセスが何らかの理由でリサイクルされた場合、それはなくなります。それはあなたのシナリオにとっては大丈夫かもしれません...

(パーティショニングではなく)負荷分散を伴う複数のフロントエンド/プロセスがある場合、またはアフィニティがない場合にも問題が発生する可能性があります。そのようないくつかのシナリオでは、メモリ状態で問題が発生する可能性があります。そのような問題に対処するため のmemcachedのようなオプションもあります。

memcachedは、Facebookが次のような問題を解決する方法です:http ://www.facebook.com/note.php?note_id = 39391378919

Facebookと同様に、データベース(SQLまたはmongodbのようなNoSQL)にデータを永続化し、効率を上げるためにメモリにキャッシュすることもできます。メモリにキャッシュし、データベースに支えられている場合は、そのデータの遅延とその更新方法について心配する必要があります。memcachedは、そのようなシナリオのソリューションでもあります。それか、データをピギーバックする独自のメカニズムを作成し、ポーリングを実行します(ただし、回避するようにしてください)など...これは基本的にfbが実行していることです。データベースを使用しますが、メモリキャッシュに分散されたdbロードをオフロードします。その投稿から:

memcachedは、高性能の分散メモリオブジェクトキャッシングシステムです。ここFacebookでは、おそらく世界最大のmemcachedユーザーです。memcachedを使用して、データベースの負荷を軽減します。

于 2012-10-10T00:28:26.997 に答える
1

これは何よりも思いやりのある答えになるでしょう。ここでも考慮する必要があることの1つは、言語です。私はPHPプログラマーであり、データベースに満足しています。

500Kのユーザー配列をPHPのメモリに格納しようとする(そしてそれを操作しようとする)ことは、生きている悪夢であり、実際、ほとんどの言語でそうなるでしょう。データベースは、事前定義されたインデックスに対して対数時間関数を使用して、このようなシナリオを克服するための検索戦術を実装します。

コスト要因もあります。同じサーバー上のMySQLまたはMongoDBデータベースに保存すると、情報を保持するために必要なメモリが少なくなる可能性が高いため、実際には安価です。

このようなアレイの負荷の下でメモリ消費量を真剣にテストします。これは、多くのアレイの1つにすぎないと思います。

db.query("select..。..よりもcollection[3]を実行する方が速いか遅いか。

状況によって異なりますが、node.jsが配列とその中の特定のインデックスへの反復をどのように処理するかはわかりませんが、一部の言語ではインデックスに対してO(log n)検索が行われないため、O(n )検索、これは実際にはSQLテーブルのインデックスを直接呼び出すよりも遅くなります。十分に公平なことですが、SQLが結果セットを作成し、それをディスクに書き込んでから、node.jsがそれを取得するように応答するのにかかる時間を考慮に入れると、おそらく遅くなります。

したがって、node.jsは、小さなインデックスまたはオブジェクトでは間違いなく高速ですが、はるかに大きなものでは...わかりません。

このデータにアクセスするアプリケーション/プロセスは1つだけであり、コードは1行ずつ実行されます。ロックについて詳しく説明しないでください。

それは驚くべきことです。以前は、複数のnode.jsサーバーを簡単に起動する必要がありました。実際、理想的なWebホスティング環境を維持するには、プライマリサーバーに障害が発生した場合に、常に別のサーバーを準備しておく必要があります(これは、私が信じていることですが...)。このことを念頭に置いて、ここでロックと分散データの中央ストアポイントを考慮していないのは奇妙なことだと思います。

于 2012-10-10T07:57:49.127 に答える