匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
前端之家收集整理的这篇文章主要介绍了
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
过程:
1、获取csdn的用户数据库导入本地
试用editplus打开提示内存不足,没找到办法,同事的linux下查看了一下,基本的格式如下:
用户名 # 密码 # 邮箱
用户名 # 密码 # 邮箱
相应数据结构:
<div class="codetitle"><a style="CURSOR: pointer" data="75033" class="copybut" id="copybut75033" onclick="doCopy('code75033')"> 代码如下:
<div class="codebody" id="code75033">
CREATE TABLE IF NOT EXISTS
csdn_userdb
(
id
int(10) NOT NULL auto_increment,
username
varchar(50) character set gbk NOT NULL,
password
varchar(50) character set gbk NOT NULL,
email
varchar(50) character set gbk NOT NULL,
PRIMARY KEY (
id
),
KEY
username
(
username
),
KEY
email
(
email
)
) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1 ;
一直怀疑fopen打开
文件是写入缓存的,但是实践证明速度很快,应该是没有写入缓存,以下为导入数据的
代码 <div class="codetitle">
<a style="CURSOR: pointer" data="66747" class="copybut" id="copybut66747" onclick="doCopy('code66747')"> 代码如下: <div class="codebody" id="code66747">
<?
PHP $link =
MysqL_connect('localhost','root','admin',true);
MysqL_select_db('csdn',$link);
$handle = fopen("C:\Users\zhudong\Desktop\www.csdn.net.
sql","r");
while (!feof($handle)){
$i++;
$buffer = fgets($handle);
list($u,$p,$e) = explode(" # ",$buffer);
MysqL_query("INSERT INTO csdn_userdb(username,password,email) VALUES ('$u','$p','$e')",$link);
if ($i%1000 == 0) echo $i."\n";
}
fclose($handle);
?>
以上
代码效率非常差,故做
修改后
代码如下:
<div class="codetitle">
<a style="CURSOR: pointer" data="44720" class="copybut" id="copybut44720" onclick="doCopy('code44720')"> 代码如下: <div class="codebody" id="code44720">
<?
PHP $link =
MysqL_connect('localhost',"r");
$perpage = 50;
while (!feof($handle)){
$i++;
$buffer = fgets($handle);
list($u,$buffer);
$insertValue[] = "('$u','$e')";
if ($i% $perpage == 0){ $perpage == 0){
$instrtValueString = implode(',',$insertValue);
MysqL_query("INSERT INTO csdn_userdb(username,email) VALUES $instrtValueString",$link);
echo $i."\n";
$insertValue = array();
}
}
fclose($handle);
为了搞清楚有那些因素对导入数据的效率产生影响,故根据不同的设置进行了测试
CSDN
用户总数据 6428600
当$perpage=500;导入后数据:5,902,000;数据丢失526600 丢失率:8%;数据表引擎:MyISAM;索引:有;总耗时 :15分钟
当$perpage=200,导入后数据总数:6,210,200;数据丢失:218400;丢失率:3.3%;数据表引擎: MYISAM ;索引:有;总耗时:30分钟
当$perpage=200,导入后数据总数:6,200;数据丢失:218400;丢失率:3.3%;数据表引擎:INNODB;索引:有;总耗时:65分钟
当$perpage=200,导入后数据总数:6,200;数据丢失:218400;丢失率:3.3%;数据表引擎:MYISAM;索引:无;总耗时:14分钟(数据导入完毕后单独再建索引)
当$perpage=50,导入后数据总数:6,371,200;数据丢失:57400,丢失率:0.8%;数据表引擎:MYISAM;索引:无:总耗时:20分钟
根据以上情况总结如下:
1、先导入数据后加索引的效率要比先加索引后导入数据的高一倍
2、InnoDB 在单进程数据插入上的效率要比MYISAM低很多
3、当perpage=50的情况下数据丢失率在1%以下
<div class="codetitle">
<a style="CURSOR: pointer" data="84241" class="copybut" id="copybut84241" onclick="doCopy('code84241')"> 代码如下: <div class="codebody" id="code84241">