複数のプロセスからのデータベースまたはメモリファイルへの同時アクセスは、可能ですか?

StackOverflow https://stackoverflow.com/questions/4233132

質問

これが私の状況です。複数のユーザーが使用できるように設計されたサーバーアプリケーションがあるため、同じ時間に読み取り/書き込み操作がたくさんあります。そして、応答は速くなければなりません。

現在、私はメモリ内のすべてのデータをキャッシュしたので、データの読み取り/書き込み操作は予想されています。データロックがキューを使用してユーザーのリクエストを並べるのを防ぐために、それらをハンドラープロセスに入れるようにします一つ。

しかし、すぐに問題が発見されました。プログラムは、一度に1つのリクエストのみを処理できます。プログラムベンチマークタイマーでさえ、MSを使用して処理したと報告していますが、1秒後にリクエストを処理する制限がまだあります。

そのため、8つのリクエストを同時に処理するための8つのプロセスなど、いくつかの方法をさらに同時に求めています。それはとてもいいでしょう。しかし、データ共有には大きな問題があります。車輪を再発明したくありません。そこで、Mongodb、Redis、Sqliteをチェックしました。

これが私の宿題です、私が間違っていたら私を修正してください、どうもありがとう

MongodbとRedisは、彼らが述べたように非常に速いですが、彼らは同じメカニズムを使用し、1回のリクエストを1回処理できますが、それは私が求めているものではありません。

したがって、SQLiteははるかに近いため、複数のプロセスが同じDBファイルを同時に開くことができます。痛みは書き込みロックです(SQLite3の新しいロックがどれだけ良くなるかは機能しません)。

これが私の質問ですが、このシナリオに堅実で良い解決策はありますか?書き込みプロセスを1つに分離した場合、それは助けになりますか?

コメントをありがとう

役に立ちましたか?

解決

MongoDBの解決策はシャードです。 mongodbシャード 基本的に、問題により多くのプロセッサを投げることができます。より多くのプロセッサ=より多くの書き込みスレッド。

各MongoDBインスタンスには、1つの書き込みスレッドのみがあります。シャードはより多くのインスタンスを提供するため、より多くの書き込みを可能にします。

ただし、ここには大きな問題があります。ディスクスループット。

全体がRAMにある場合、Mongoが1000を超えるインサート /秒を実行しました。しかし、ほとんどの人は、実際のファイルバッキングを持つデータベースとしてMongoを使用しています。したがって、Mongoを使用して本当に重い執筆を使用している場合は、そのレベルのスループットを受け入れることができるディスクで準備する必要があります。

繰り返しますが、ディスクスループットの問題の周りの方法はシャードです。より多くのシャードを構築すると、書き込み /ディスクが少なくなり、基本的にはロックが少なくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top