약 5천만건 이상의 자료중 agent 정보가 있은 http_user_agent 필드에 인덱스가 걸려있지 않아서 운영서버 작업이 불가능한 상태.
TEST 서버에 DB를 와 TABLE을 다시 구축한후 작업에 필요한 필드에 인덱스를 건 후 자료를 밀어넣었더니 이틀정도의 시간이 소요되더군요. ㅡ.ㅡa
그 후 agent를 uniq로 뽑아 낸 후 php에서 제공하는 get_browser(); 로 agent를 정보를 갱신하는 작업을 진행했습니다.
막노동이 따로없군요.
mysql 자체에서는 agent정보를 기초로 브라우저, 버전, 플랫폼, 모바일, 크롤러 정보를 뽑아주는 기능이 있는지 검색을 열심히(!) 해 봤지만 없더군요.
INSERT INTO sta.agent ( agent_md5, agent_name )
SELECT md5(a.http_user_agent), a.http_user_agent
FROM p.analy AS a
WHERE a.http_user_agentt IS NOT NULL
AND a.http_user_agent != ''
AND a.http_user_agentt NOT IN ( SELECT agent_name FROM sta.agent )
GROUP BY a.http_user_agentt
#!/opt/lampp/bin/php -q
<?php
$i = 1;
while(1)
{
$mysqli = @mysqli_connect('localhost', 'pickup', 'pick123$%^', 'sta');
$qry = "SELECT agent_idx, agent_name FROM sta.agent WHERE browser_name IS NULL ";
if(! empty($agent_idx)) $qry .= " AND agent_idx =----> {$agent_idx}";
$qry .= " LIMIT 1000";
$rs = $mysqli->query($qry) or die(__LINE__.' : '.$mysqli->error."\n");
if($mysqli->affected_rows < 1)
{
echo $qry."\n";
echo "fatch rows : ".$mysqli->affected_rows."\n";
break;
}
$sql = '';
while($row = $rs->fetch_assoc())
{
$agent = (! empty($row['agent_name']))?get_browser($row['agent_name'], TRUE):Array();
$sql .= "UPDATE agent SET
browser_name='{$agent['browser']}',
browser_version='{$agent['version']}',
platform_name='{$agent['platform']}',
mobile='{$agent['ismobiledevice']}',
crawler='{$agent['crawler']}'
WHERE agent_idx = {$row['agent_idx']}
;";
$agent_idx = $row['agent_idx'];
if($i%100 == 0){
$sql = str_replace("=''", '=NULL', $sql);
$sql = str_replace("\n", '', $sql);
$sql = str_replace(" ", '', $sql);
$sql = str_replace(";", ";\n", $sql);
$mysqli->multi_query( $sql );
echo "{$i}({$agent_idx}) fatch ".$mysqli->affected_rows."\n";
// echo $sql;
$sql = '';
}
$i++;
}
$rs->free_result();
$mysqli->close();
echo "agent idx : {$agent_idx} fatch executed !!\n";
}
/*
* End of file
*/
반응형
'db > mysql' 카테고리의 다른 글
mysql "The total number of locks exceeds the lock table size" (0) | 2010.11.10 |
---|---|
mysql 쿼리 자료 OUTFILE INFILE query (0) | 2010.11.08 |
mysql 통계자료 이전 쿼리 (0) | 2010.10.26 |
mysqldump 옵션 스키마, 데이터만 백업 (0) | 2010.10.22 |
mysql error 2013 Lost connection to MySQL server during query (0) | 2010.10.20 |