2

そのため、主にJSONオブジェクトのグローバル配列を含むnode.jsにバックエンド実装があります。JSONオブジェクトは、ユーザーリクエスト(POSTS)によって入力されます。したがって、グローバル配列のサイズはユーザー数に比例して増加します。配列内のJSONオブジェクトは同一ではありません。これはそもそも本当に悪いアーキテクチャです。しかし、私は自分が知っていることを実行し、その場で学ぶことにしました。

これは、6GBのRAMを搭載したAWSマイクロインスタンスで実行しています。

爆発する前にこのグローバルアレイをパージするにはどうすればよいですか?

私が考えたオプション:

  1. 定期的にグローバル配列をファイルに書き込み、パージします。ここでの欠点は、トランザクションの途中にクライアントが存在する場合、そのトランザクションの状態が失われることです。
  2. サーバーを毎日再起動し、その時点でグローバルアレイをファイルに書き込みます。上記と同じ欠点。
  3. 1または2に従い、すべての着信リクエストについて-グローバル配列が空の場合は、ファイル内の対応するJSONオブジェクトを探します。これは絶対にばかげて愚かなようです。

どういうわけか、nodejsアプリケーションを完全に書き直さなければ、他の解決策を考えることはできません。何か考えてもらえますか..?これについての議論を大いに感謝します。

4

2 に答える 2

2

ストレージとしてメモリを使用しているようです。その場合、コードが同期している場合(データベースを使用していないように見えるため、データベースを使用している可能性があります)、実際にはソリューション1が正しいです。これは、JavaScriptがシングルスレッドであるためです。つまり、一方のコードが実行されている場合、もう一方のコードは実行できません。JavaScriptには並行性はありません。Node.jsは非常に高速であるため、これは単なる幻想です。

したがって、トランザクションが終了するまで、クリーニングコードは実行されません。もちろん、これはあなたのコードが同期していることを前提としています(そして私が見ているところからそうかもしれません)。

しかし、それでもそうしない理由は150ほどあります。最も重要なのは、車輪の再発明をしているということです。データベースにあなたのために大変な仕事をさせてください。適切なデータベースを使用すると、将来的にすべての問題を回避できます。MySQL、PostgreSQL、MongoDB(私のお気に入り)、CouchDB、その他多くの可能性があります。この時点ではどちらでも構いません。1つ選んでください。

于 2012-07-19T16:34:00.710 に答える
1

JSONをhttp://www.couchbase.com/のような非リレーショナルDBに保存し始めることをお勧めします。

Couchbaseは、クラスター内でもセットアップと使用が非常に簡単です。単純なKey-Value設計を使用しているため、データの保存は次のように簡単です。

couchbaseClient.set("someKey", "yourJSON")

次に、データを取得します。

data = couchbaseClient.set("someKey")

このシステムは非常に高速で、OMGPOPがDrawSomethingに使用しています。http://blog.couchbase.com/preparing-massive-growth-revisited

于 2012-07-19T15:22:12.913 に答える