比较两个大数据——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 为了避免连接丢失。
- 如果您的数据库支持,请使用左联接并过滤右侧不为空的行。但首先使用您在两个表(列名)中的键创建索引。
- 如果你的 computer/server 内存支持将 300 万个对象上传到内存中,然后使用 NAME 作为键创建一个 HashSet,然后一个一个地读取另一个集合(1000 万个对象) 并验证该对象是否存在于 HashSet 中。如果它存在,那么它是重复的。 (我想建议将数据转储到文本文件中,然后读取文件以创建结构)
- 如果之前的策略失败,那么是时候实施某种 MapReduce 了。您可以将它与以前的方法之一进行比较来实现数据的子集。例如,
比较所有以某个字母开头的产品。
我使用 MySQL 查询进行了很多尝试,但数据速度非常慢,只发现解决方案是使用 sphinx,索引整个数据库并搜索 sphinx 索引上的每个产品字符串,同时删除重复的产品从狮身人面像获取 ID。
我想根据标题比较两个产品数据库,
我第一个数据大约是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 为了避免连接丢失。
- 如果您的数据库支持,请使用左联接并过滤右侧不为空的行。但首先使用您在两个表(列名)中的键创建索引。
- 如果你的 computer/server 内存支持将 300 万个对象上传到内存中,然后使用 NAME 作为键创建一个 HashSet,然后一个一个地读取另一个集合(1000 万个对象) 并验证该对象是否存在于 HashSet 中。如果它存在,那么它是重复的。 (我想建议将数据转储到文本文件中,然后读取文件以创建结构)
- 如果之前的策略失败,那么是时候实施某种 MapReduce 了。您可以将它与以前的方法之一进行比较来实现数据的子集。例如, 比较所有以某个字母开头的产品。
我使用 MySQL 查询进行了很多尝试,但数据速度非常慢,只发现解决方案是使用 sphinx,索引整个数据库并搜索 sphinx 索引上的每个产品字符串,同时删除重复的产品从狮身人面像获取 ID。