我有大约 200 万条记录,每个记录大约有 4 个字符串字段,需要检查是否有重复项。更具体地说,我有姓名、电话、地址和父亲姓名作为字段,我必须使用所有这些字段和其余数据检查重复数据删除。生成的唯一记录需要记录到 db.xml 中。
我已经能够实现mapreduce,迭代所有记录。任务速率设置为 100/s,存储桶大小设置为 100。启用计费。
目前,一切正常,但性能非常缓慢。我已经能够在 6 小时内完成 10,000 条记录的测试数据集中仅 1000 条记录的重复数据删除处理。
java中的当前设计是:
- 在每次地图迭代中,我都会将当前记录与之前的记录进行比较
- 上一条记录是 db 中的一条记录,它就像一个全局变量,我在每次映射迭代中用另一个以前的记录覆盖它
- 使用算法进行比较,并将结果作为新实体写入 db
- 在一个 Mapreduce 作业结束时,我以编程方式创建另一个作业
- 上一个记录变量有助于作业将下一个候选记录与其余数据进行比较
我准备增加任何数量的 GAE 资源以在最短的时间内实现这一目标。
我的问题是:
- 重复数据删除(检查重复项)的准确性是否会因并行作业/任务而受到影响?
- 如何改进这种设计?
- 这是否会扩展到 2000 万条记录
- 在映射迭代期间读取/写入变量(不仅仅是计数器)的最快方法是什么,可以在一个 mapreduce 作业中使用。
最欢迎自由职业者在这方面提供帮助。
谢谢你的帮助。