2016-08-23 114 views
0

我有一个文档在数组中的某些字段中包含大数据结构,由于频繁点击以读取此类数据,它正在放慢我的应用程序。我想在几个解决方案来实现,但我需要的意见之前,我进行,甚至可能是更好的解决方案,这里有我的想法/问题:对于大型文档的mongodb性能

  1. 将帮助它来缓存数据?
  2. 我应该使用memcached还是redis作为缓存引擎?为什么?
  3. 它可以帮助从本文档读取单个字段而不是每次都读取它?
  4. 我应该做点别的吗?!

回答

0

缓存会帮助,因为它会避免你的数据库被过于频繁

打的Memcache或Redis的就看你。我prefere redis,但如果你已经有一个memcache它没问题。

如果你有一个服务器集群,认为如果你需要一个集中的缓存或不

缓存完整的文档不会为获得单场帮助,因为你缓存查询的结果,不知道是什么包含的内容。

0

你的问题需要更多的澄清。例如,你说的数据有多大是几兆字节还是千兆字节。所有这些因素改变了解决方案。但是,如果我们认为你有几兆字节,并且每当最佳解决方案缓存时都想阻止调用数据库。如何选择缓存也完全取决于你的情况。如果您的Web应用程序在一台服务器上运行,则可以使用内存缓存,如ASP.Net缓存,这对于内存缓存非常快速和快速。此缓存存储在堆中,因此您可以将所有对象放入缓存中而无需序列化。但请考虑每当您的应用程序像大多数部署一样重新启动时。您的堆将被删除,并且堆内的所有缓存都将被清除。

如果您有多个服务器,那么您可以开始考虑内存不足的缓存,因为两台服务器不共享堆内存,并且使用所有内存缓存都无用,因为它会复制数据并使其无效恶梦。但是,这是更可靠的缓存,而不在堆中,并且持久性远远超过内存缓存。但是当你通过网络连接传输对象时,无论你想放入这种缓存,都应该可以串行化。所以你不能把你的所有对象放入缓存中。 Redis和memcached都可以用于此目的。 Redis比Memcached功能更复杂,但为了您的目的,memcached相当不错。

无论您选择哪种缓存系统,都应该从广泛的角度来处理它。在您的应用程序中设计一个缓存系统,但随着时间的推移,您需要将更多东西放入缓存中。所以从现在开始准备好一切。另一件在缓存中非常重要的事情是,只要你在缓存中设置了某些东西,你就必须考虑何时会使其无效。

0

缓存是否有帮助取决于文档的加入。如果多次访问文档,由于MongoDB对内存缓存的实际工作方式,缓存将无济于事。

首先,您需要了解您的数据加入模式。