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

Posted

技术标签:

【中文标题】比较两个大数据——2000万件产品【英文标题】:Compare two big data - 20 million products 【发布时间】:2015-09-08 13:08:34 【问题描述】:

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

我要比较的第一个数据大约是 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;

【问题讨论】:

类似(未测试)SELECT stuff FROM table1 t1 INNER JOIN table2 t2 ON t2.name = t1.name 之类的东西应该会为您提供在每个表中具有匹配名称的产品列表。然后你可以修改它以更新或删除等。如果名称没有正确索引,那么是的,它会很慢。 向我们展示show create table [table_name]语句的输出 您的问题太模糊,无法回答。提供两个表中的示例数据,并准确解释重复项的含义。 创建表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, 主键 (id) ENGINE=InnoDB AUTO_INCREMENT=9250887 默认字符集=latin1; 重复产品意味着,根据两个表中的标题比较产品,如果在第一个数据库中产品来自第二个数据库,那么它将是重复产品。 【参考方案1】:

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

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

   similar_text()
   soundex()
   levenshtein()

寻求帮助。

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于比较两个大数据——2000万件产品的主要内容,如果未能解决你的问题,请参考以下文章

大数据早报:三星设立新人工智能研究中心 微软发布预览版SQL Server跨平台开发工具(11.24)

大数据应用“信息化+智能化”!永年区打造晋冀鲁豫四省交界重要物流枢纽基地

什么是大数据

大数据量情况下高效比较两个list

大数据详解平安人寿2020年理赔半年报

linux 两个大数据量的文件如何比较