インメモリストレージとデータベースストレージのパフォーマンスの違いはどれくらい重要ですか[終了]
-
20-12-2019 - |
質問
signalrでチャットアプリケーションを作成しています。現在、メッセージを永続的に保存するためにデータベースに保存する機能がいくつかあります。ユーザーリストを実装したいと考えており、この記事を読み直しています。
http://www.asp.net/signalr/overview/signalr-20/hubs-api/mapping-users-to-connections#inmemory
インメモリ ストレージ間のこの違いはどの程度重要ですか?たとえば 1,000 人のユーザーと 10,000 人のユーザーが通常の速度 (たとえば 1 秒あたり 1 メッセージ) でメッセージをやり取りする場合 (砂糖が多量にある場合)、1 秒以上の違いはあるでしょうか?そして、それはどれほど役立つのでしょうか?パフォーマンスに関する以前のテストへの参照があれば、大変感謝します。
第二に、これは間違った方法かもしれませんが、ユーザーのリストを保存したい場合、複数のチャット ルームがある場合、ルームごとに個別の辞書が必要になると思いますか?もしそうなら、ユーザーが自分の部屋も生成できるようにしたいので、これは実現可能でしょうか。この方法でインメモリをどのように実現できるのかわかりません。
ありがとう
解決
回答のための単一のリンクを提供するのは嫌いですが、この OSS の完全に機能するチャット ルーム https://jabbr.net あなたが心配しているすべてに対処します。
ソース: https://github.com/jabbr/jabbr
主な懸念事項であるインメモリとデータベースについてコメントするには、次のようにします。DB はデータを永続化したり、アプリケーションをスケールアウトしたりする機能を追加しますが、インメモリよりもパフォーマンスが大幅に低下します。誤解しないでください。パフォーマンスが大幅に低いとはいえ、アプリによってはメッセージの送信に数秒かかるわけではありません...すべてはトレードオフです。
DB 指向のアーキテクチャを 1000 対 10,000 のユーザーに適用するかどうかは、すべて実装方法によって異なります。たとえば、スケールアウト プロバイダー REDIS はすべてメモリ内で実行されますが、一定の間隔でディスクに保存されます。これは明らかに非常に高速ですが、「ある程度の」データ損失が許容されます。
他のヒント
これは元の質問とは直接関係ありません。
インメモリストレージに保存することはできないと思います。 問題は、アプリケーション プールがリサイクルされると、メモリ内に保存されているすべてのメッセージが失われることです。
App Pool がいつリサイクルされるかを予測することはできません (リサイクルする特定の時間を手動で設定することは可能です)。それは数日または数時間で起こる可能性があります。
理想的には、次のような永続的な場所に保存したいとします。 データベース. 。データベースへの保存のパフォーマンスが心配な場合は、次のことができます。 非同期 データベース保存タスク。
この比較をご覧ください:
http://ruturaj.net/redis-memcached-tokyo-tyrant-and-mysql-comparison/
Redis(メモリ)はMySQL(クラシックDB)を上回ることは明らかに、それらの適用分野は強く異なるため、一般的にRedisはMySQLよりも優れているとは言えません。すべてのソフトウェア プロジェクトは独自の世界であり、さまざまなソリューションを適用できます。状況によっては、Redis と MySQL がプラットフォームのさまざまな部分で一緒に使用されます (例:Magento eコマース)
インメモリ ソリューションが必要か、標準データベースが必要かは、ユーザーが判断します。MySQL を使用すると、1 挿入/秒のスループットを簡単に達成できると思いますが、これは単なる意見です。「Redis 対応」の製品の実装を作成することをお勧めします。MySQL の使用を開始しますが、MySQL と Redis の両方に適応する抽象化レイヤーを介して使用します (そのようなレイヤーがオープンソースで利用できるかどうかはわかりませんが、独自のレイヤーをリリースすることはできます...)