小编cha*_*g30的帖子

在Appengine上使用mapreduce重复200万条记录的糟糕表现

我有大约200万条记录,每条记录有大约4个字符串字段,每个字段都需要检查重复项.更具体地说,我将名称,电话,地址和父名称作为字段,我必须使用所有这些字段检查重复数据删除与其余数据.产生的唯一记录需要记录到db中.

我已经能够实现mapreduce,迭代所有记录.任务率设置为100/s,桶大小设置为100.启用计费.

目前,一切正常,但性能非常缓慢.我已经能够在6小时内完成10,000个记录的测试数据集中的1000个记录重复数据删除处理.

java中的当前设计是:

  1. 在每个地图迭代中,我将当前记录与先前记录进行比较
  2. 以前的记录是db中的单个记录,其作用类似于全局变量,我在每个映射迭代中用另一个先前记录覆盖
  3. 使用算法进行比较,并将结果作为新实体写入db
  4. 在一个Mapreduce作业结束时,我以编程方式创建另一个作业
  5. 先前的记录变量有助于将作业与下一个候选记录与其余数据进行比较

我准备增加任何数量的GAE资源,以便在最短的时间内实现这一目标.

我的问题是:

  1. 重复数据删除(检查重复项)的准确性是否会因并行作业/任务而受到影响?
  2. 如何改进这种设计?
  3. 这将扩大到2000万条记录
  4. 什么是在地图迭代期间读取/写入变量(不仅仅是计数器)的最快方法,可以在一个mapreduce作业中使用.

欢迎自由职业者为此提供帮助.

谢谢你的帮助.

java google-app-engine hadoop mapreduce deduplication

5
推荐指数
1
解决办法
1967
查看次数

为服务媒体项目生成密钥的最佳实践(照片,mp3,文档等)

我正在制作P2P媒体共享功能,用户可以与他人共享文件(图像,mp3等).当用户与另一个共享文件时,我只需向他们发送该文件的链接即可.链接看起来像:

http://www.domain.com/file?q=unique_key

现在,unique_key必须是字母数字且不易猜测,所以我打算使用文件记录的编码密钥.

这在我早期的Python GAE应用程序中很简单,但在我的新Java应用程序中,我无法获得此Key值,我得到的是一个Long(数字)ID.

我的实体有一个名为ID的字段,它是Long,但在我的GAE管理控制台中有一个实体编码的密钥,它是字母数字,我希望这对我数据库中的每条记录都是唯一的.那么如何访问呢?

我正在使用Objectify,当我创建这样的新密钥时

Key myKey = new Key(FileEntity.class,entityID);

myKey是一个包含一些文本的字符串,但它是我正在寻找的uniqye alpha数字id.

对不起我的模糊问题,请帮忙.

java google-app-engine objectify google-cloud-datastore

0
推荐指数
1
解决办法
180
查看次数