2

このトピックを探していますが、見つからないので、質問します。

サーバー上の配列に対して頻繁に書き込みと読み取りを行う必要があるため、データベースを使用しないことにしましたが、ベストプラクティスがわかりません。大量のデータになりますが、javascript 配列でしょうか? ノンブロッキング メソッドで読み取りと書き込みを行うことは可能ですが、同時実行性の問題は回避できますか?

オンラインの多人数参加型ゲームである MMORPG であり、データはすべてのプレイヤーがオンラインです。プロセスは、プレーヤーが行うほぼすべてのステップに書き込み、その後に読み取ります。私は子プロセス、またはプロセスをより迅速かつノンブロッキングで実行する何かについて考えていましたが、どの子プロセスがHAHAであるかさえ知っています!

ありがとうございました

4

1 に答える 1

5

Node.jsはシングルスレッドであるため、コードが何かを実行しているときはいつでも、プロセスが他のことを実行するのを技術的にブロックしています。コールバックを待機しているポイントに到達すると、ノードはコールバックが戻るまで他のリクエストの処理を開始します。「たくさん」のデータはどれくらいですか?データをどうする必要がありますか?

データに対して多くの処理を行っておらず、データが多い場合、データベースソリューションは悪い考えではありません。データベース(MongoDB、Redisなど)のノードドライバーは非同期で非ブロッキングであるため、Nodeは呼び出しをインターリーブする優れた機能を果たし、その結果、多数の呼び出しを同時に処理できるようになります。(メモリ内だけでなく)このようなストレージを使用するということは、ノードクラスターを使用して複数のノードプロセスを起動し、マシン上の複数のコアを使用して(複数のマシンを使用して)要求に応答できることも意味します。

データに対して多くの処理を行っておらず、データセットが非常に小さく、ノードプロセス間でデータを共有する必要がない場合は、必要なデータ構造のメモリにデータを保持してください。配列、辞書、またはLRUキャッシュのようなもの。

データに対して多くの処理を行っていて、それがたくさんある場合、これはノードの最大の強みではないため、もう少し作業を行う必要があります(処理は唯一のスレッドをブロックします。つまり、追加のリクエストは処理しません)。処理を処理するワーカープロセスを備えた非ブロッキングキューを備えたPubSubモデルのようなものを提案します。

于 2012-04-19T18:54:43.500 に答える