Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
在实时生产MongoDB数据库上运行ETL的正确方法_Mongodb_Etl - Fatal编程技术网

在实时生产MongoDB数据库上运行ETL的正确方法

在实时生产MongoDB数据库上运行ETL的正确方法,mongodb,etl,Mongodb,Etl,我们有以下环境: 3台服务器+3台副本集服务器 每个服务器有3个碎片 我们的主要收藏有大约40000000个文档,平均约6kb 我们的切分键是散列的(\u id)-\u id是纯BsonID 我们每天的峰值约为25000 I/OPS,低点约为10000 I/OPS 我们希望运行一个ETL,加载主集合上的所有文档,执行一些内存计算(在我们的应用层中),然后将其转储到外部数据库中 我们采用了非常糟糕和幼稚的方法,只是加载文档,而没有使用limit、skip和batchSize进行查询,这是一个完

我们有以下环境:

  • 3台服务器+3台副本集服务器
  • 每个服务器有3个碎片
  • 我们的主要收藏有大约40000000个文档,平均约6kb
  • 我们的切分键是散列的(\u id)-\u id是纯BsonID
  • 我们每天的峰值约为25000 I/OPS,低点约为10000 I/OPS
我们希望运行一个ETL,加载主集合上的所有文档,执行一些内存计算(在我们的应用层中),然后将其转储到外部数据库中

我们采用了非常糟糕和幼稚的方法,只是加载文档,而没有使用limit、skip和batchSize进行查询,这是一个完全的失败(严重损害了我们的服务级别,尽管我们将readPreference设置为secondary)

其中,
i
是我们正在进行的当前迭代,它在多个线程上运行以加快进程

我想知道在不影响数据库性能的情况下加载所有文档的最佳方法是什么

数据可能有点陈旧(与主服务器上的实际数据相隔几秒钟就可以了)

我已经在DB管理员上发布了这个问题,但它似乎没有吸引太多的答案,所以我也在这里发布它。对不起,如果这违反了论坛规则


谢谢

他们已经在使用分片,他们只想在别处读写(ETL)@JonathanMuller-没错,你自己找到过好的解决方案吗?@JobVermeulen我们采用这种方法,从我们的二级服务器读取数据,以避免影响主服务器
db.Collection.find().skip(i * 5000).limit(5000).readPref(secondary)