比较两个大数据——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)