使用Node处理内存中的大型JSON数据集



我正在从Salesforce中提取JSON数据。我可以有大约1万张唱片,但永远不会更多。为了防止Api限制和每次请求都必须访问Salesforce,我想我可以每小时查询一次数据,然后将其存储在内存中。显然,这将更快,也更不容易出错。

一个JSON对象大约有10个属性,可能还有一个嵌套的JSON对象,有两个或三个属性。

我正在使用类似于下面的方法来查询记录。

getUniqueProperty: function (data, property) {
return _.chain(data)
.sortBy(function(item) { return item[property]; })
.pluck(property)
.uniq()
.value();
}

我的问题是

  • 将数据存储到内存中并处理内存中的数据会产生什么后果?我显然不想通过对数据进行大量过滤来阻止服务器。

  • 我以前从未使用过redis,但像缓存数据库这样的东西会有帮助吗?

  • 最好每小时查询一次数据,并将JSON响应存储在类似Mongo的文件中。然后我会对Mongo进行所有查询,而不是在内存中进行查询?我查询Salesforce的每一个小时,都会刷新数据库并重新插入数据。

将数据存储在内存中有几个缺点:

  • 不可扩展——当您决定使用更多的进程时,每个进程都需要发出相同的api请求
  • 脆弱的——如果您的进程崩溃,您将丢失数据

此外,处理大量数据可能会比您希望的更长时间阻碍处理。

解决方案:-使用外部存储!它可以是redis,也可以是MongoDB或RDBMS;-在单独的过程中更新数据,由cron触发;-不要丢弃整个数据库:有人可能会在那之后立即提出更新记录的请求(当然,如果您的存储不支持事务)。

最新更新