使用MongoDB时是否建议使用Memcache?

使用MongoDB时是否建议使用Memcache?,mongodb,memcached,Mongodb,Memcached,我想知道在使用NoSQL数据库(如mongoDB)时是否建议使用Memcache。起初不建议。如果以后遇到性能问题,请添加缓存层(Memcache)。但如果你打算使用Redis,你将一无所获,因为Redis已经在内存中存储了所有东西。MongoDB将所有东西都存储在内存中,并且以类似的方式工作,是一个基于键值的系统,但是我相信MongoDB更灵活,因为它允许在自己内部存储BSON对象 (为了澄清,MongoDB使用BSON(JSON的一种特殊形式)来存储其所有数据,其中包括对象中的对象。)使用m

我想知道在使用NoSQL数据库(如mongoDB)时是否建议使用Memcache。

起初不建议。如果以后遇到性能问题,请添加缓存层(Memcache)。但如果你打算使用Redis,你将一无所获,因为Redis已经在内存中存储了所有东西。

MongoDB将所有东西都存储在内存中,并且以类似的方式工作,是一个基于键值的系统,但是我相信MongoDB更灵活,因为它允许在自己内部存储BSON对象


(为了澄清,MongoDB使用BSON(JSON的一种特殊形式)来存储其所有数据,其中包括对象中的对象。)

使用memcache的概念源于这样一种想法,即在某个地方有“额外的RAM”。MongoDB和MySQL(以及大多数DBs)都将占用它们所能获得的每一兆内存

对于非常常见的MySQL/Memcache,有充分的证据表明,使用Memcache与其说是加速查询,不如说是减少服务器上的查询负载。一个好的memcache实现基本上只是试图将最常见的数据保存在内存中,以便数据库服务器可以处理更大的数据

事实上,根据我的经验,memcache的使用通常会依赖memcache来维持系统性能

那么回到最初的问题,在哪里有额外的RAM

如果web服务器上有额外的RAM,则可以使用Memcache。当然,您也可以在web服务器上本地运行Mongo。只需从主服务器获取所需的数据


如果您在其他计算机上有额外的RAM,那么使用memcache就没有意义了。只需向MongoDB副本集或碎片添加更多节点。这就是MongoDB真正闪耀的地方。由于分片/复制,您可以向Mongo水平添加更多RAM以提高性能。使用SQL很难“只添加更多服务器”,因为联接的伸缩性不太好。但是使用Mongo,很可能只需“添加更多节点”即可解决问题。

答案取决于您的用例。
一般来说,访问RAM比访问磁盘快几个数量级。
即使是最快的SSD驱动器访问速度也比RAM慢100倍左右

现在,我不知道Mongo是否有缓存系统(很可能有),或者驱逐策略是什么,但作为一个程序员,我更喜欢一个缓存,在那里我可以随意存储/检索和删除项目。因此,即使使用Mongo,我也更愿意使用缓存解决方案


总之,这实际上取决于您使用这些解决方案的目的。没有一个答案可以涵盖所有可能的用途。

这个特性让我更喜欢mongoDB而不是其他键值数据库:)这个答案不准确,mongoDB不是一个键值存储,也不是所有的东西都放在RAM中,它映射到虚拟内存,这是完全不同的。