Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json MongoDB-在不中断正常查询的情况下每小时更新一次收集_Json_Node.js_Mongodb_Web Services_Bigdata - Fatal编程技术网

Json MongoDB-在不中断正常查询的情况下每小时更新一次收集

Json MongoDB-在不中断正常查询的情况下每小时更新一次收集,json,node.js,mongodb,web-services,bigdata,Json,Node.js,Mongodb,Web Services,Bigdata,我正在实现一个web服务,它需要查询JSON文件(大小:~100MB;格式:[{},{},{},{},{}]),大约每秒70-80次,JSON文件将每小时更新一次。“查询JSON文件”意味着检查文件中是否有JSON对象具有特定值的属性 目前,我认为我将在Node.js中实现该服务,并将JSON文件导入(mongoimport)到MongoDB中的集合中。当请求传入时,它将查询MongoDB集合,而不是直接读取和查找文件。在Node.js服务器中,应该有另一个计时器服务,它每小时检查JSON文件是

我正在实现一个web服务,它需要查询JSON文件(大小:~100MB;格式:[{},{},{},{},{}]),大约每秒70-80次,JSON文件将每小时更新一次。“查询JSON文件”意味着检查文件中是否有JSON对象具有特定值的属性

目前,我认为我将在Node.js中实现该服务,并将JSON文件导入(mongoimport)到MongoDB中的集合中。当请求传入时,它将查询MongoDB集合,而不是直接读取和查找文件。在Node.js服务器中,应该有另一个计时器服务,它每小时检查JSON文件是否已更新,如果已更新,则需要使用新文件中的数据“重新填充”集合

通过向外部API发送请求来检索JSON文件。API有两种方法:methodA让我下载整个JSON文件;methodB实际上只是一个HTTP头调用,它只是告诉文件是否已更新。我无法从API获取增量更新的数据

我的问题是每小时更新一次。随着服务的运行,不断有请求进来。当计时器检测到JSON文件有更新时,它将下载该文件,下载完成后,它将尝试将该文件重新导入集合,我认为这至少需要几分钟。有没有一种方法可以在不中断对集合的查询的情况下执行此操作


以上是我处理这一问题的第一个想法。这个过程有什么问题吗?直接查找文件似乎太贵了,尤其是请求每秒大约100次。

老实说,考虑到你所说的数据有多小,我根本不会为数据库费事(或者我只会使用数据库作为正在返回的“文件”的备份)。@wiredparie,如果我不使用数据库,每秒读取文件70-80次不会导致性能问题吗?我知道Node.js handels异步请求,文件I/O是非阻塞的,但该文件包含大约20k个JSON对象。我对处理这些问题没有经验,你能说得具体一点吗?谢谢我相信@user1693347不希望将文件发送到客户端。他所指的“下载”必须意味着让服务器获得文件的新副本。我认为这无关紧要。关键是,他希望在写入数据库时读取它。Mongo(和mongoimport)将确保您不会读取损坏的数据,因为Mongo import所做的每一次写入都是原子的。您介意查询可能是新旧混合的数据吗?如果是这样,请在阅读时导入,并让mongo处理锁。谢谢@ixe013!你是对的,我不需要将文件发送给客户。我不知道“mongoimport”只锁定它写入的记录;我不介意查询混合数据,事实上我只是尝试了一下,并在一秒钟内导入了20k条记录!