处理mongodb中的大数据

时间:2016-08-30 16:30:22

标签: mongodb mapreduce amazon-redshift elastic-map-reduce bigdata

这将成为一个“普遍问题”,但我有理由这样做。我问这个是因为我不确定采取什么样的方法来加快速度。

我有一个运行在BIG aws实例上的mongoDB服务器(r3.4xlarge 16核心vCPU和122 GB主内存)。该数据库有一个HUGE集合,其中包含293017368个文档,其中一些有一个名为paid的字段,其中包含字符串值,而其中一些字段不包含。还有一些他们有一个名为payment_history的数组,其中一些没有。我需要在该数据库上执行某些任务,但所有没有paidpayment_history或两者的文档都与我无关。所以我想在继续实际操作之前清理(缩小)数据库。我认为,因为我必须检查类似({paid:{$ exists:false}})的内容以删除第一步的记录,我应该在paid上创建一个索引。我可以看到,按照目前的速度,该指数需要80天才能完成。

我不确定这种情况应该采取什么方法?我应该写一个map-reduce来访问每个文档并执行我需要执行的任何操作,并将结果文档写入不同的集合中吗?或者我应该以某种方式(不确定如何)将大型数据库分成小部分并对每个部分应用转换,然后将每个服务器的结果记录合并到最终的cleaned记录集中?或者我应该以某种方式(不确定如何)将数据放入Elastic Map-Reduce或redshift来对其进行操作?简而言之,您认为这种情况的最佳途径是什么?

如果这个问题听起来有点模糊,我很抱歉。我试图尽可能多地解释实际情况。

非常感谢您的帮助:)

编辑

根据关于稀疏索引的评论,我现在正在执行partialIndexing。使用此命令 - db.mycol.createIndex({paid: 1}, {partialFilterExpression: {paid: {$exists: true}}})它大致每秒创建53个索引...按此速率,我不确定将整个集合编入索引需要多长时间。但我会保持这个晚上,明天我会回来更新这个问题。我打算把这个问题放在我将要经历的整个旅程中,只是为了将来有同样问题和相同情况的人们。

0 个答案:

没有答案