Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Database node.js DB批量插入vs插入一次一个tme_Database_Node.js - Fatal编程技术网

Database node.js DB批量插入vs插入一次一个tme

Database node.js DB批量插入vs插入一次一个tme,database,node.js,Database,Node.js,我是一个nodejs新手,我想知道哪种方法更适合在数据库中插入大量行。从表面上看,一次插入一个东西看起来更像是一种方式,因为我可以快速释放事件循环并服务于其他请求。但是,代码看起来很难以这种方式理解。对于批量插入,我必须事先准备好数据,这意味着一定要使用循环。这将导致在此期间服务的请求减少,因为事件循环正忙于循环 那么,首选的方式是什么?我的分析正确吗?这里没有正确的答案。这取决于细节:为什么要插入大量行?多久?这只是一次引导,还是你的应用每10秒就启动一次?它还关系到可用的计算/IO资源。您的

我是一个nodejs新手,我想知道哪种方法更适合在数据库中插入大量行。从表面上看,一次插入一个东西看起来更像是一种方式,因为我可以快速释放事件循环并服务于其他请求。但是,代码看起来很难以这种方式理解。对于批量插入,我必须事先准备好数据,这意味着一定要使用循环。这将导致在此期间服务的请求减少,因为事件循环正忙于循环


那么,首选的方式是什么?我的分析正确吗?

这里没有正确的答案。这取决于细节:为什么要插入大量行?多久?这只是一次引导,还是你的应用每10秒就启动一次?它还关系到可用的计算/IO资源。您的应用程序是唯一使用数据库的应用程序,还是用请求对其进行爆破将成为对其他用户的拒绝服务


如果没有这些细节,我的经验法则是具有较小并发限制的批量插入,比如最多启动10个插入,然后等待其中一个插入完成,然后再向数据库发送另一个插入命令。这遵循
async.eachLimit
的模型。这就是浏览器处理对给定网站的并发请求的方式,并且已经证明这是一种合理的默认策略。

这里没有正确的答案。这取决于细节:为什么要插入大量行?多久?这只是一次引导,还是你的应用每10秒就启动一次?它还关系到可用的计算/IO资源。您的应用程序是唯一使用数据库的应用程序,还是用请求对其进行爆破将成为对其他用户的拒绝服务


如果没有这些细节,我的经验法则是具有较小并发限制的批量插入,比如最多启动10个插入,然后等待其中一个插入完成,然后再向数据库发送另一个插入命令。这遵循
async.eachLimit
的模型。这就是浏览器处理对给定网站的并发请求的方式,并且已被证明是一种合理的默认策略。

一般来说,内存对象上的循环应该非常快

我知道您担心CPU阻塞,但您应该考虑要完成的总工作量。一次发送一个项目会带来很多开销。对DB的每个查询都有自己的内部
for
循环序列,这可能会使您的
for
循环“批处理”看起来非常小

如果您需要在数据库中转储1000个内容,那么您可以做的最小工作量就是一次运行所有这些内容。如果你做了10批100件“事情”,你必须做所有相同的工作+你必须生成和跟踪所有这些请求

那么您多久做一次这些批量插入?如果这是经常发生的情况,您可能希望将总工作量降至最低,并一次性大容量插入所有内容

这里的权衡是日志记录和重试。仅仅执行某种类型的大容量插入并忘记它通常是不够的。大容量插入最终将失败(全部或部分),您需要某种类型的逻辑来重试或整合


如果这是一个问题,您可能希望管理大容量插入的大小,以便可以智能地重试块。

通常,内存对象上的循环应该非常快

我知道您担心CPU阻塞,但您应该考虑要完成的总工作量。一次发送一个项目会带来很多开销。对DB的每个查询都有自己的内部
for
循环序列,这可能会使您的
for
循环“批处理”看起来非常小

如果您需要在数据库中转储1000个内容,那么您可以做的最小工作量就是一次运行所有这些内容。如果你做了10批100件“事情”,你必须做所有相同的工作+你必须生成和跟踪所有这些请求

那么您多久做一次这些批量插入?如果这是经常发生的情况,您可能希望将总工作量降至最低,并一次性大容量插入所有内容

这里的权衡是日志记录和重试。仅仅执行某种类型的大容量插入并忘记它通常是不够的。大容量插入最终将失败(全部或部分),您需要某种类型的逻辑来重试或整合


如果这是一个问题,您可能希望管理大容量插入的大小,以便可以智能地重试块。

MyISAM引擎的mysql,但这不重要,不是吗?好吧,mysql与NoSQL不同:)此外,我在mysql上找到了这篇文章:同意,不知道为什么我没有想到这一点。我同意批量插入mysql的速度很快。但是,为了准备庞大的阵列,nodejs可能永远都在这样做,而无法满足其他请求。这不是对其他请求的饥渴吗?mysql带有MyISAM引擎,但这不重要,不是吗?好吧,mysql不同于NoSQL:)另外,我在mysql上找到了这篇文章:同意,不知道为什么我没有想到这一点。我同意批量插入mysql的速度很快。但是,为了准备庞大的阵列,nodejs可能永远都在这样做,而无法满足其他请求。这不是对其他请求的饥渴吗?好吧,这看起来是一个平衡的方法。我必须实现自己的async.eachLimit吗?好的,这看起来是一种平衡的方法。我必须实现我自己的async.eachLimit吗?嗯,我不经常这么做。我现在会选择批量插入。大容量插入最终会失败是什么意思?最终,您将尝试大容量插入,但由于某种原因它将失败。坏数据、网络故障、服务器错误等。在批量插入的情况下,您需要特别注意,因为您需要识别哪些数据成功,哪些数据失败。对于某些数据库,它是“全部或无”,