比较两大数据 - 2000万种产品

时间:2015-09-08 13:08:35

标签: php mysql compare bigdata

我想根据标题比较两个产品数据库

我的第一个数据大概是300万,我想要比较,第二个数据是1000万,我这样做是因为要删除重复的产品。

我已经通过在PHP中使用MySQL查询编写程序尝试了这一点,如果数据将返回零,则检查标题(name ='$ name'),因此它将是唯一的,但每个结果的速度相当慢2秒。

我使用的第二种方法是将数据存储在文本文件中并使用正则表达式,但它也会变慢。

比较大数据以找出独特产品的最佳方法是什么?

表DDL:

CREATE TABLE main ( id int(11) NOT NULL AUTO_INCREMENT, 
                    name text, 
                    image text, price int(11) DEFAULT NULL, 
                    store_link text, 
                    status int(11) NOT NULL, 
                    cat text NOT NULL, 
                    store_single text, 
                    brand text, 
                    imagestatus int(11) DEFAULT NULL, 
                    time text, 
               PRIMARY KEY (id) ) 
               ENGINE=InnoDB AUTO_INCREMENT=9250887               
               DEFAULT CHARSET=latin1;

5 个答案:

答案 0 :(得分:1)

由于你需要花费一些时间才能超过10百万的标题。我的方法是看看你是否可以在PHP脚本中从两个列表中获取所有标题。然后在内存中比较它们。让脚本为文本文件创建删除语句,然后在db上执行该文本文件。

不是你的问题,但可能是你的下一个问题:不同的拼写见

   similar_text()
   soundex()
   levenshtein()

获得一些帮助。

答案 1 :(得分:0)

在我看来,这就是数据库的用途。我不会在你的鞋子里重新发明轮子。

一旦达成一致,您应该检查数据库结构和索引以加快操作速度。

答案 2 :(得分:0)

我一直在使用SQLyog来比较大约1-2百万个数据的数据库。它提供“单向同步”,“双向同步”以及“可视化合并数据”的选项以同步数据库。

重要的是,它提供了一个比较数据块的选项,以及value can be specified by us in writing the chunk limit以避免连接丢失。

答案 3 :(得分:0)

  1. 如果您的数据库支持它,请使用左连接并过滤右侧不为空的行。但首先使用两个表中的键创建索引(列名)。
  2. 如果您的计算机/服务器内存支持在内存中上传HashSet中的3百万个对象,则使用NAME作为密钥创建HashSet,然后逐个读取另一个集合(1000万个对象)并验证是否该对象存在于HashSet中。如果存在,那么它是重复的。 (我想建议将数据转储到文本文件中,然后读取文件以创建结构)
  3. 如果以前的策略失败,那么是时候实现某种MapReduce了。您可以使用以前的方法之一与数据的子集进行比较。例如, 比较所有以某些字母开头的产品。

答案 4 :(得分:0)

我已经使用MySQL查询尝试了很多,但是数据非常慢,仅发现解决方案是使用sphinx,对整个数据库进行索引并在sphinx索引上搜索每个产品字符串,同时删除从sphinx获取ID的重复产品。 / p>