2012-02-19 21 views
9

何千もの関数とデータベース呼び出しを持つ複雑なゲームを開発したいと考えています。同期対非同期データベースへのアクセス

データベースクエリを非同期で行うことが本当に必要かどうかは疑問です。コードに苦労し、すべての関数がクリーンreturnメソッドの代わりにコールバックを使用する必要があります。これは通常のアプローチですか?

これらの呼び出しを非同期でコーディングするのは、MySQLデータベースが一度に1つのクエリを処理することを考えると、はるかに高速ですか?

+0

"MySQLデータベースは接続ごとに一度に1つのクエリを処理します。 Mysqlは、接続ごとに新しいスレッドを生成します。少なくとも、mysqlボックスのコア数がパフォーマンスを向上させる必要があります。 –

+1

非同期プログラミングの利点を売却していないとnode.jsを検討するのはなぜですか?あなたが正当な理由なしにただのファンボーイではないことを確認してください。ビデオhttp://www.youtube.ug/watch?v=bzkRVzciAZgをご覧ください。 –

答えて

11

Node.JSで劇的に変化何かが最近、あなたはかなりのすべてのユーザー要求がone single thread上で実行され、同期データベースを待っていることは本当にあなたのパフォーマンスをドロップしますので、うまくスケールする非同期データベース・アクセスを使用するように強制している場合を除き。あるユーザーが低速操作を実行すると、他のすべてのユーザーは完了するまで待つ必要があります。

Node.JSは、実際には非同期イベント駆動型フロー用に構築されています。それを回避するよりもはるかに優れたパフォーマンスが得られます。

0

データベースエンジンの速度+送信時間はいずれの場合もほぼ同じです。問題は、非同期呼び出しが呼び出し元をブロックしないことです。したがって、非同期アーチは、他の入力に非常に敏感である必要がある「リアルタイム」システムのための方法です。 (人間に非常に敏感でなければならないゲームなど)

1

クエリはMySQLのデータベースレベルでキューに入れられます。あなたのデータのいくつかにMongo DBを使用すると考えることができるなら、もっとたくさんのオプションがあります。

3

非同期リクエストは、同期リクエストよりも高速ではありません。どのように行っても、同じ正確なことを実行します。これが変わるのはリクエストでブロックすることだけです。

リクエストを同期させるメソッドを実行すると、要求が返されるのを待って実行が停止されます。非同期要求を使用する場合、要求が完了するのを待つ必要はありませんが、継続しておくことができ、完了したらコールバックが呼び出されます。

もう1つのことは、アプリケーションがdbmsを大量に呼び出しているときにデータベースがボトルネックになることです。その理由は、dbmsから負荷を軽減するためにキャッシュを使用することを検討する必要があるからです。

1

Nitzanのように、「非同期要求は、同期要求よりも高速ではありません。どのように行っても、まったく同じことを実行します」。

誰の話ませんが、多くのユーザーや要求が多い場合は、データベースへのアクセスを制限するために、他のソリューションがあります。

作成キャッシュファイル

を、ユーザーがそれらを更新しますCRONタスクによって実行されます。

  • ユーザー情報
  • ユーザーアラート
  • ユーザーアクション
  • ユーザーの在庫 ...あなたは、MySQLでそれらをストックすることができ、いくつかの再発を要求するために

充実したデータベース・プロセス

。 これらはユーザーの要求よりも速く実行されます。