プロセス:
1. csdn のユーザー データベースを取得し、ローカルにインポートします
editplus を開こうとすると、メモリが不足しているというメッセージが表示され、方法が見つかりません。私の同僚は Linux でそれを確認しましたが、基本的な形式は次のとおりです。次のように:
ユーザー名 # パスワード # 電子メール
ユーザー名# パスワード# 電子メール
対応するデータ構造:
コードをコピー コードは次のとおりです
CREATE TABLE IF NOT EXISTS `csdn_userdb` (
`id` int(10) NOT NULL auto_increment,
`username` varchar(50) 文字セット gbk NOT NULL,
`password` varchar(50) 文字セット gbk NOT NULL、
`email` varchar(50) 文字セット gbk NOT NULL、
PRIMARY KEY (`id`)、
KEY `username` (`username`),
KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1;
コードをコピーします コードは次のとおりです。
$ link = mysql_connect('localhost', 'root', 'admin', true); 'csdn',$link);
$handle = fopen("C:UserszhudongDesktopwww.csdn.net.sql ", "r");
while (!feof($handle)){
$ i ;
$buffer = fgets($handle);
list($u,$p,$ e) =explode(" # ",$buffer);
mysql_query("INSERT INTO csdn_userdb(ユーザー名) ,password,email) VALUES ('$u','$p','$e')",$link );
if ($i 00 == 0) echo $i."n";
}
fclose($handle);
?>
コードは次のとおりです: $link = mysql_connect('localhost', 'root', 'admin', true);
mysql_select_db('csdn',$link);
$handle = fopen("C:UserszhudongDesktopwww.csdn .net.sql", "r"); = 50;
while (!feof($handle)){
$buffer = fgets($handle) = 爆発(" # ",$buffer);
$insertValue[] = "('$u','$p','$e') ";
if ($i% $perpage == 0) { $perpage == 0){
$insrtValueString = implode(',',$insertValue);
mysql_query("INSERT INTO csdn_userdb( username,password,email) VALUES $instrtValueString",$link); 🎜>echo $i."n";
$insertValue = array();
}
}
fclose($ handle);インポートされたデータの効率に影響を与える要因を調査し、さまざまな設定に基づいてテストを実施しました。
CSDN ユーザー データの総数 6428600
$perpage=500 の場合、インポート後のデータ: 5,902,000、データ損失率: 8%テーブル エンジン: MyISAM; 合計所要時間: 15 分
$perpage=200 の場合、データ損失: 218400; データ テーブル エンジン: MYISAM;はい; 合計所要時間: 30 分
$perpage=200 の場合、データの総数: 218400; データ テーブル エンジン: INNODB; 合計時間所要時間: 65 分
$perpage=200 の場合、インポート後のデータの総数: 218400; データ テーブル エンジン: MYISAM ; 合計所要時間: 14 分(データのインポート後に別途インデックスを再構築します)
$perpage=50 の場合、インポート後のデータの総数: 57400、データ テーブル エンジン: MYISAM、インデックス: なし: 合計所要時間: 20 分
上記の状況に基づく要約は次のとおりです:
1. 最初にデータをインポートしてからインデックスを追加すると、最初にインデックスを追加してからデータをインポートするよりも 2 倍効率的です
しかし、エラーが報告され続けました: call to unknown function mysql_connect 苦労した結果、php.ini がロードされていないことがわかりました。正しいコード: php.exe -c E:/usr/local/apache2/php.ini importcsdndb.php
2. ローカルの
コマンド ラインに一致させる必要があるユーザー データをインポートします。msyql と入力します (Baidu の使用方法がわかりません)
次に、mysql>source C: を実行します。 /Users/zhudong/Desktop/userdb.sql
3. ユーザーの比較とフィルタリング
比較プログラムを作成したら、次の行の下の Run コマンドに忘れずに追加してください。
コードをコピーします
コードは次のとおりです:
$link = mysql_connect('localhost', 'root', 'admin', true);
mysql_select_db('csdn',$link);
$handle_username = fopen("E:/records_username.txt","a");
//$handle_email = fopen("E:/records_email.txt","a");
$username_num = $email_num = $uid = 0;
while ($uid<2181106) {
$nextuid=$uid 10000;
$query = mysql_query("SELECT * FROM pw_members WHERE uid>'$uid' AND uid<'$nextuid'");
while ($rt = mysql_fetch_array($query,MYSQL_ASSOC)) {
$username = $rt['username'];
$email = $rt['email'];
$query2 = mysql_query("SELECT * FROM scdn_userdb WHERE username='$username' OR email='$email'");
while ($rt2 = mysql_fetch_array($query2,MYSQL_ASSOC)) {
if ($rt['password'] = md5($rt2['password'])) {
if ($rt2[ 'ユーザー名'] == $ユーザー名) {
$ユーザー名_番号 ;
fwrite($handle_username,'OWN:'.$rt['uid'].'|'.$rt['username'].'|'.$rt['password'].'|'.$ rt['電子メール'].' CSDN:'.$rt2['ユーザー名'].'|'.$rt2['パスワード'].'|'.$rt2['電子メール']."rn");
エコー 'username_num='.$username_num."rn";
続き;
}
/*
if ($rt2['email'] == $email) {
$email_num ;
fwrite($handle_email,'OWN:'.$rt['uid'].'|'.$rt['username'].'|'.$rt['password'].'|'.$ rt['電子メール'].' CSDN:'.$rt2['ユーザー名'].'|'.$rt2['パスワード'].'|'.$rt2['電子メール']."rn");
エコー 'email_num='.$email_num."rn";
}
*/
}
}
mysql_free_result($query2);
}
$uid = $nextuid;
}
?>
复制代代码如下:
$link = mysql_connect('localhost', ' root'、'admin'、true);
mysql_select_db('csdn',$link);
$handle_username = fopen("E:/records_username.txt","a");
while($uid$nextuid= $uid 10000;
$query = mysql_query("SELECT m.uid,m.username,m.password,m.email,u.password as csdn_password,u.email as csdn_email FROM own_members m LEFT JOIN csdn_userdb u USING(username) WHERE m .uid>'$uid' AND m.uidwhile ($rt = mysql_fetch_array($query,MYSQL_ASSOC)) {
if ($rt['password'] == md5($rt['csdn_password'])) {
$username_num ;
fwrite($handle_username,'OWN:'.$rt['uid'].'|'.$rt['username'].'|'.$rt['password'].'|'.$ rt['電子メール'].' CSDN:'.$rt['ユーザー名'].'|'.$rt['csdn_password'].'|'.$rt['csdn_email']."rn");
エコー 'username_num='.$username_num."rn";
}
}
$uid = $nextuid;
エコー 'uid='.$uid;
}
?>