2012-06-03 63 views
0

我一直在嘗試制定一些基於某些日誌文件的報告(約5000萬條記錄,並且可以增長10倍) - 我已經將這個加載到表中並進行必要更改(刪除dups等) - 該表應該保存每種產品每種類型和每天的請求數量,所以我試圖將其降低爲僅用於表示請求數量的計數列的不同產品來自大型數據集的報告 - Mysql

原來這裏是表的日誌數據:

*************************** 1. row *************************** 
     Table: cdnlog2 
Create Table: CREATE TABLE `cdnlog2` (
    `serial` int(32) DEFAULT NULL, 
    `ip` varchar(100) DEFAULT NULL, 
    `country` varchar(100) DEFAULT NULL, 
    `productid` int(11) DEFAULT NULL, 
    `type` varchar(100) DEFAULT NULL, 
    `query_date` date DEFAULT NULL, 
    KEY `aaa` (`country`), 
    KEY `ccc` (`productid`), 
    KEY `type` (`type`), 
    KEY `date_index` (`query_date`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

目標表:

*************************** 1. row *************************** 
     Table: cdnlogfinal 
Create Table: CREATE TABLE `cdnlogfinal` (
    `country` varchar(100) DEFAULT NULL, 
    `productid` int(11) DEFAULT NULL, 
    `type` varchar(100) DEFAULT NULL, 
    `request_count` int(11) DEFAULT NULL, 
    `query_date` date DEFAULT NULL, 
    KEY `aaa` (`country`), 
    KEY `ccc` (`productid`), 
    KEY `type` (`type`), 
    KEY `date_index` (`query_date`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

但是,我試圖現在減少記錄的數量,以記錄分組值,只用不同的行和計數(日誌可以包含dups,因爲可以在同一天多次選擇相同的產品),但是,插入到輔助表中已經運行了幾個小時,狀態爲「複製到磁盤上的tmp表」 - 我已經更改了臨時目錄以允許有足夠的空間 - 任何指針?

在此先感謝

+1

請發佈您的查詢和目標表的「CREATE TABLE」。 – Quassnoi

+1

另外,爲什麼你沒有接受任何你之前問過的問題的答案? – Quassnoi

+0

添加了目的地表 - 對不起,我以爲我有(原來我沒有)標記接受的答案 - 現在完成 - 感謝您指出 –

回答

0

你的想法是好的,而最終的結果會加快您的報告查詢非常多。你只需要一塊來解決這個難題:

問題是基表中有太多的行在一個查詢中創建派生表中的所有行 - 事務需要這麼長時間,創建的行非常大,超出了事務的超時和/或日誌空間。分別對每天都在你的數據範圍

insert into cdnlog2 (country, productid, type, query_date) 
select country, productid, type, date(transaction_time) 
from cdnlog 
where transaction_time between '2012-01-01 00:00:00' and '2012-01-01 23:59:59' 
group by country, productid, type 

運行此查詢,因此改變了開始/結束時間戳:

相反,你必須做一次這樣的一天。

一旦您的歷史數據計算出來,作爲批處理的一部分,每天運行一次前一天。


你在做什麼是創建一個data warehouse。考慮將這些數據強烈地放在單獨的專用服務器上。這樣做有許多好處 - 閱讀以瞭解具體內容。

+0

哪些事務? – Quassnoi

+0

好,我想我有一個合理的解決方案 - 感謝您的提示波希米亞 - 對於希望實現類似的東西,這是什麼工作對我來說: 的原始數據導入到非索引表(這將是一天的在時刻數據),然後導入到一個表僅與關鍵字字段(即那些將需要具有用於後負載清理的索引,並且在下一步驟中引用的) - 最後的彙總表被裝入在清理數據批次(我選擇類型在時間和分組的副本) - 此顯著減少的記錄數 –