我們剛剛構建了一個系統,可在午夜彙總其數據。它必須遍歷多個表的組合才能彙總所需的數據。不幸的是,UPDATE
查詢正在持續進行。我們擁有我們預測的用戶數的1/1000,每天只需要28分鐘即可彙總我們的測試用戶數據。使用MySQL巨大更新進行擴展
由於主要延遲是UPDATE
查詢,可能很難委派服務器來處理數據處理。對於優化數百萬個UPDATE
查詢有什麼其他選擇?我的縮放問題是否在下面的代碼中?:
$sql = "SELECT ab_id, persistence, count(*) as no_x FROM $query_table ftbl
WHERE ftbl.$query_col > '$date_before' AND ftbl.$query_col <= '$date_end'
GROUP BY ab_id, persistence";
$data_list = DatabaseManager::getResults($sql);
if (isset($data_list)){
foreach($data_list as $data){
$ab_id = $data['ab_id'];
$no_x = $data['no_x'];
$measure = $data['persistence'];
$sql = "SELECT ab_id FROM $rollup_table WHERE ab_id = $ab_id AND rollup_key = '$measure' AND rollup_date = '$day_date'";
if (DatabaseManager::getVar($sql)){
$sql = "UPDATE $rollup_table SET $rollup_col = $no_x WHERE ab_id = $ab_id AND rollup_key = '$measure' AND rollup_date = '$day_date'";
DatabaseManager::update($sql);
} else {
$sql = "INSERT INTO $rollup_table (ab_id, rollup_key, $rollup_col, rollup_date) VALUES ($ab_id, '$measure', $no_x, '$day_date')";
DatabaseManager::insert($sql);
}
}
}
你有沒有想過[複製](http://dev.mysql.com/doc/refman/5.0/en/replication.html)? –
您的SELECT查詢需要多長時間才能在沒有UPDATE或INSERT語句的情況下進行處理?那些可能解決你的性能問題的瓶頸可能會有更大的瓶頸嗎?是否有必要在PHP源代碼級而不是MySQL存儲過程級上遍歷數據?是否有必要通過記錄迭代程序,還是有可能通過基於集合的操作完成相同的事情? –
要回答@ Shan的問題:SELECT需要很少的時間。你有沒有在「MySQL程序級別」或「基於集合」操作的例子中這樣做的例子?我現在正在尋找喬伊的鏈接 – Kyle