比较两个大数据——2000万种产品

Compare two big data - 20 million products

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

我第一个数据大约是300万,我想从中进行比较,第二个数据是1000万,我这样做是为了删除重复的产品。

我已经尝试过在 PHP 中使用 MySQL 查询编写程序来检查标题 (name = '$name') 如果数据 return 为零,那么它将是独特,但每个结果非常慢 2 秒。

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

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

Table 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;

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

一旦同意,您应该真正检查数据库结构和索引以加快您的操作。

由于您必须将 10 个 mio 标题进行 3 mio 次,因此需要一些时间。我的方法是查看是否可以在 php 脚本中从两个列表中获取所有标题。然后在内存中比较它们。让脚本创建删除语句到一个文本文件,然后在数据库上执行该文件。

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

   similar_text()
   soundex()
   levenshtein()

寻求一些帮助。

我一直在使用 SQLyog 来比较大约 1-2 百万数据的数据库。它提供了“单向同步”、“双向同步”和“视觉合并数据" 来同步数据库。

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

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

我使用 MySQL 查询进行了很多尝试,但数据速度非常慢,只发现解决方案是使用 sphinx,索引整个数据库并搜索 sphinx 索引上的每个产品字符串,同时删除重复的产品从狮身人面像获取 ID。