2010-11-25 72 views

回答

54

使用内存缓存的概念从你有想法源于“额外内存“坐在某处。 MongoDB和MySQL(以及大多数数据库)都会占用每一个他们可以获得的RAM。

对于非常常见的MySQL/Memcache,有很好的文档记载,使用Memcache更多的是减少服务器上的查询负载,而不是加快查询速度。一个好的内存缓存实现基本上只是试图将最常见的数据保存在内存中,这样数据库服务器就可以在更大的内存上流失。

事实上,这是我的经验是使用内存缓存的通常成为依赖内存缓存以保持系统性能。

回到原来的问题,你在哪里有额外的RAM?

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

如果您在其他计算机上有额外的RAM,那么使用memcache并没有什么意义。只需将更多节点添加到MongoDB副本集或分片。这是MongoDB实际照耀的地方。由于分片/复制,您可以向Mongo Horizo​​ntally添加更多RAM以提高性能。有了SQL,“添加更多服务器”非常困难,因为连接不能很好地扩展。但是对于Mongo来说,仅仅为一个问题添加更多的节点是完全可能的。

3

起初没有。如果稍后遇到性能问题,请添加缓存层(memcache)。但是,如果您要使用Redis,则无法获取任何内容,因为Redis已将所有内容存储在内存中。

11

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

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

+3

该功能让我更喜欢mongoDB比其他键值数据库:) – 2010-11-25 14:21:21

0

答案取决于您的使用情况。
通常,访问RAM比访问磁盘快几个数量级。
即使是最快的SSD驱动器,其访问速度也要比RAM慢100倍。

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

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