我应该有两个单独的mongoDB实例吗?

时间:2017-04-05 14:44:49

标签: mongodb

我的服务器经常查询数据库。 但通常情况下,查询会检索未更改的数据。 因此,我想创建并存储缓存的结果。

我的主mongoDB存储在远程地址中,因此与本地mongoDB实例相比,响应时间稍长。我认为在localhost上运行一个额外的,更小的,更静态的mongoDB是有益的。

这样,实时查询将在远程主数据库上运行,较小的,时间有效的查询将在localhost中的缓存集合上运行,以优化速度。

  • 这是可以做到的吗?
  • 人们建议避免使用吗?
  • 如何设置两个连接,一个连接到我的主远程服务器,另一个连接 到我的本地服务器?

这对我来说似乎不对

    var mongooseMain = require ('mongoose');
    var mongooseLocal = require ('mongoose');
    mongooseMain.connect(mainDBInfo.url);
    mongooseLocal.connect(localDBInfo.url);

1 个答案:

答案 0 :(得分:0)

原则上,你有正确的想法!缓存是构建高性能Web应用程序的重要组成部分。

首先,MongoDB希望缓存它在内存中使用的所有内容,并且有一个设计良好的系统,用于决定内存中的内容以及从内存中删除的内容。当要求对象不在其缓存中时,它必须从磁盘读取它。当MongoDB从磁盘而不是内存中读取时,它被称为页面错误。

当然,这个内存缓存位于远程服务器上,因此您仍然需要处理网络延迟。

为了消除这种延迟,我建议您在Redis中保存经常读取但很少写入的序列化对象。这就是Redis的目的。它基本上是一个字典(键:值),您可以轻松地SETGET。您可以在本地计算机上轻松运行redis-server,甚至可以使用SETEX将对象设置为具有一些唯一密钥的字典,以及何时应该从缓存中逐出该对象。

您也可以在更新时手动从缓存中逐出对象(我建议此时将它们重新写入缓存)。然后,只要您需要一个对象,只需确保始终首先尝试从缓存中读取,如果缓存返回null密钥,则返回MongoDB。

检查一下,祝你的申请好运!