MongoDBのようなNoSQLデータベースを使用するときにMemcacheが推奨されるかどうか知りたいのですが。
Memcacheを使用するという概念は、「余分なRAM」がどこかにあるという考えに由来しています。 MongoDBとMySQL(およびほとんどのDB)はどちらも、取得できるRAMのすべてのメガバイトを使用します。
非常に一般的なMySQL/Memcacheの場合、Memcacheを使用することは、クエリを高速化することよりも、サーバーのクエリ負荷を減らすことであることが非常によく文書化されています。優れたmemcacheの実装は、基本的に最も一般的なデータをメモリに保持しようとするだけなので、データベースサーバーはより大きなものを解約できます。
実際、システムパフォーマンスを維持するためにse of memcacheが一般的にreliance on memcacheになるのは私の経験です。
では、元の質問に戻りますが、RAMはどこにありますか?
Webサーバーに余分なRAMがある場合は、Memcacheを使用できる可能性があります。もちろん、WebサーバーでMongoをローカルで実行することもできます。必要なデータをマスターからスレーブ化するだけです。
他のコンピューターに余分なRAMがある場合は、memcacheを使用しても意味がありません。MongoDBレプリカセットまたはシャードにノードを追加するだけです。これがMongoDBが実際に輝く場所です。シャーディングのため/レプリケーションでは、パフォーマンスを向上させるために、Mongoに水平方向にRAMを追加できます。SQLでは、結合のスケーリングがあまり良くないため、「サーバーを追加するだけ」は非常に困難です。しかし、Mongoでは問題に単に「ノードを追加」することはかなり可能です。
MongoDBはとにかくすべてをメモリに保存し、同様の方法で機能し、キー値ベースのシステムですが、MongoDBは、BSONオブジェクトを内部に保存できるため、より柔軟性があると思います。
(明確にするために、MongoDBはJSONの特殊な形式であるBSONを使用して、オブジェクト内のオブジェクトを含むすべてのデータを格納します。)
最初はありません。後でパフォーマンスの問題が発生した場合は、キャッシュレイヤー(memcache)を追加します。ただし、たとえばRedisを使用する場合、Redisはすでにすべてをメモリに保存しているため、何も得られません。
答えはユースケースによって異なります。
一般に、RAMへのアクセスは、ディスクへのアクセスよりも桁違いに高速です。
最速のSSDドライブでさえ、RAMよりもアクセスが約100倍遅くなります。
さて、Mongoにキャッシュシステムがあるかどうか(おそらくそうなっている)、またはエビクションポリシーが何であるかはわかりませんが、プログラマーとして、アイテムを自由に保存/取得および削除できるキャッシュを好みます。したがって、Mongoでもキャッシュソリューションを使用したいと思います。
要約すると、これらのソリューションを何に使用しているかによって異なります。考えられるすべての用途を網羅する答えは1つではありません。