V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
huyinjie
V2EX  ›  MongoDB

请教百万条数据在 MongoDB 中的去重问题

  •  
  •   huyinjie · 2020-08-03 09:19:55 +08:00 · 6056 次点击
    这是一个创建于 1334 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据库在本地,有某个 Field 重复,需要找出所有值相同的 Field 并合并。用 Python 简单遍历了下运行了几个小时后提示连接断开,请问还有别的方法吗~这种级别的数据是否必须要放到大数据框架中运算了
    10 条回复    2020-08-10 16:56:15 +08:00
    wangyanrui
        1
    wangyanrui  
       2020-08-03 09:28:06 +08:00   ❤️ 1
    假设一条数据假设 10KB, 全部加载也才 1GB 左右吧,现在普通电脑也都 16G 左右了,拿出来内存里面操作呗~
    咋会运行几个小时~ 有点懵
    fhsan
        2
    fhsan  
       2020-08-03 09:32:00 +08:00   ❤️ 1
    估计是顺序计算,找找并行方法,
    pushback
        3
    pushback  
       2020-08-03 09:33:50 +08:00   ❤️ 1
    你是不是批处理语句太长了
    ghostviper
        4
    ghostviper  
       2020-08-03 09:34:29 +08:00   ❤️ 1
    合并的逻辑你要先定义好;几个小时断开估计是 mongodb 的 connection 连接超时了;如果数据过大,你可以将 Field hash 以下利用 bloom filter 作为去重机制,放在内存或者 redis 很快就完了;另外不知道你合并逻辑是否耗时,如果耗时可以先标记再来查找合并
    swulling
        5
    swulling  
       2020-08-03 09:53:18 +08:00   ❤️ 1
    写一个简单的 Python 脚本:

    1. 顺序读出所有数据的对应 Field,放入 Python 的 Dict,Key 为 Field 值,Value 为 ObjectID
    2. 放入之前判断是否已经有对应的 Key,如果有,和对应的 ObjectID 的数据进行合并写回 MongoDB 即可。此处也可以不直接写回,而是将重复的 ObjectID 写到别的什么地方,最后再统一处理

    百万条没有任何问题,估计内存也就消耗 1G 这个量级。而且怎么可能用几个小时,顺序读取速度可以拉满的
    janxin
        6
    janxin  
       2020-08-03 09:53:57 +08:00   ❤️ 1
    用 pymongo 操作过几百万数据,不至于几个小时没处理完啊...实在不行可以跑 MongoDB aggregate
    CoderGeek
        7
    CoderGeek  
       2020-08-03 09:58:07 +08:00
    我觉得你们是在嗨 py 233
    gnozix
        8
    gnozix  
       2020-08-04 10:05:03 +08:00   ❤️ 1
    aggregate 不能做吗?
    libook
        9
    libook  
       2020-08-05 11:33:05 +08:00   ❤️ 1
    上千万数据做过遍历,没遇到过这个问题。。。

    跑脚本的时候看一下数据库负载,用了聚合的话看看是不是需要 allowDiskUse,如果断开了看看脚本和数据库的日志,是不是需要调节一些超时时间。

    另外 Python 脚本本身会不会因为资源不足而挂掉。
    514146235
        10
    514146235  
       2020-08-10 16:56:15 +08:00
    试一下 mongodb 的 mapreduce,应该很快就完成了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5364 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 07:30 · PVG 15:30 · LAX 00:30 · JFK 03:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.