Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较两大数据-2000万种产品_Php_Mysql_Compare_Bigdata - Fatal编程技术网

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

Php 比较两大数据-2000万种产品,php,mysql,compare,bigdata,Php,Mysql,Compare,Bigdata,我想比较两个基于标题的产品数据库 我想比较的第一个数据大约是300万,第二个数据是1000万,我这样做是为了删除重复的产品 我用PHP中的MySQL查询编写程序尝试了这一点,该程序检查title(name='$name'),如果数据返回零,那么它将是唯一的,但每个结果的速度非常慢,为2秒 我使用的第二种方法是将数据存储在文本文件中并使用正则表达式,但它也会变慢 比较大数据以找出独特产品的最佳方法是什么 表DDL: CREATE TABLE main ( id int(11) NOT NULL A

我想比较两个基于标题的产品数据库

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

我用PHP中的MySQL查询编写程序尝试了这一点,该程序检查title(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;

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


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

因为您需要超过1000万个标题300万次,这将需要一些时间。我的方法是看看是否可以在php脚本中从两个列表中获取所有标题。然后在内存中比较它们。让脚本创建一个文本文件中的delete语句,然后在db上执行

不在你的问题中,但你可能会遇到下一个问题:不同的拼写,请参见

   similar_text()
   soundex()
   levenshtein()
这方面需要一些帮助。

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

重要的是,它提供了一个选项来比较块上的数据,这是为了避免连接丢失

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

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

    类似的方法(未测试)
    从t2上的table1 t1内部联接table2 t2中选择stuff。name=t1。name
    将为您提供每个表中具有匹配名称的产品列表。然后您可以修改它以更新或删除等。如果名称没有正确索引,那么是的,它将非常慢。显示输出关闭
    Show create table[table\u name]
    statement您的问题太模糊,无法回答。从两个表中提供示例数据,并准确解释重复项的含义。创建表
    main
    id
    int(11)非空自动增量,
    name
    text,
    image
    text,
    price
    int(11)默认为空,
    store\u链接
    text,
    status
    int(11)不为空,
    cat
    text不为空,
    store\u single
    text,
    brand
    text,
    imagestatus
    int(11)默认为空,
    time
    text,主键(
    id
    )引擎=InnoDB自动增量=9250887默认字符集=latin1;重复产品是指,根据两个表中的标题比较产品,如果第一个数据库中的产品来自第二个数据库,则它将是重复产品。