【问题标题】:mongodb performance for large document大文档的mongodb性能
【发布时间】:2016-12-30 04:04:35
【问题描述】:

我有一个文档,其中包含数组内某些字段中的大数据结构,由于经常点击读取此类数据,它正在减慢我的应用程序。我正在考虑实施一些解决方案,但在继续之前我需要建议,甚至可能是更好的解决方案,以下是我的想法/问题:

  1. 缓存数据有帮助吗?
  2. 我应该使用 memcached 还是 redis 作为缓存引擎,为什么?
  3. 从该文档中读取单个字段而不是每次都读取是否会有所帮助?
  4. 我应该做点别的吗?!

【问题讨论】:

    标签: mongodb performance caching redis memcached


    【解决方案1】:

    缓存会有所帮助,因为它可以避免您的数据库被频繁访问

    Memcache 或 redis 由您决定。我更喜欢 redis,但如果你已经有 memcache 也没关系。

    如果您有一个服务器集群,请考虑是否需要集中式缓存

    缓存一个完整的文档对获取单个字段没有帮助,因为您在不知道它包含什么的情况下缓存了查询的结果。

    【讨论】:

      【解决方案2】:

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

      如果您有多个服务器,那么您可以开始考虑内存不足缓存,因为两台服务器不共享堆内存并且使用所有内存缓存是无用的,因为它会复制数据并且无效是噩梦.但是,这是更可靠的缓存,而不是在堆中,并且在持久性方面比内存中缓存更多。但是,当您通过网络连接传输对象时,您想要放入这种缓存中的任何内容都应该是可序列化的。因此,您不能将所有对象都放入缓存中。 Redis 和 memcached 都可以用于此目的。 Redis 比 Memcached 更复杂,功能更多,但对于您的目的而言,memcached 非常好。

      无论您选择哪种缓存系统,都要从广阔的角度来看待它。在您的应用程序中设计一个缓存系统,而随着时间的推移,您需要将更多的东西放入缓存中。所以最好从现在开始为那个时候做好一切准备。 在缓存中非常重要的另一件事是,每当您在缓存中设置某些内容时,您必须考虑何时将其无效。

      【讨论】:

        【解决方案3】:

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

        首先,您需要了解您的数据访问模式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-24
          • 2014-07-13
          • 2015-07-17
          • 2017-07-16
          • 2018-03-25
          • 1970-01-01
          • 1970-01-01
          • 2015-08-15
          相关资源
          最近更新 更多