Linux環境下後台所產生的海量數據大多是借助於Log保存的,但文本文件處理數據是有很大局限性的,因此需要對數據進行格式化處理,並存入數據庫。其工作流程可以分為以下幾方面:
一、數據拉取環節
數據拉取環節主要實現的是將數據從游戲服務器端拉取到跳板機端,對Log數據的處理要放在跳板機或實驗機上完成,而不能直接在服務器上處理,因為服務器主要用於提供後台服務。
數據拉取實現的關鍵在於:實現一個可復用的Log拉取腳本,只要保證任意一份Log成功地從服務器端拉取到跳板機上,就能夠重復地利用該腳本完成將整個Log數據拉取的過程。
需要考慮的參數有:數據拉取超時限制、服務器的IP、用戶名、密碼、目標文件、存儲文件路徑,這些都會以命令行參數的形式進行傳入。
set timeout 1000
set ip [lindex $argv 0]
set user [lindex $argv 1]
set fromFile [lindex $argv 2]
set toFile [lindex $argv 3]
set password [lindex $argv 4]
最後使用rsync命令進行最後的數據拉取:
set pid [spawn /usr/bin/rsync -avzu ${user}@${ip}#36000:${fromFile} ${toFile}]
同時,還必須要考慮,在數據拉取的過程中,服務器端會要求用戶的身份驗證,為了避免在使用自動拉取腳本過程中還需要輸入用戶名和密碼的問題。使用了spawn命令-Expect編程工具語言,用於自動和交互式任務進行通信。
expect {
"password:" {
send "${password}\r"
exp_continue
}
"yes/no)?" {
send "yes\r"
exp_continue
}
}
最後,我們可以復用數據自動拉取的腳本,遍歷服務器端所需要拉到的所有文件,即可成功實現整個數據拉取的過程。比如拉取的是2010-8-30號~2010-9-05號的廣東1~廣東5區的所有Log,拉取過程持續約一個半小時。
二、數據庫表的創建
當數據拉取完成之後,就進入了數據表的創建過程。對於Log日志中的每一條數據而言,都是用“|”進行分隔的。在這些數據段中,並非所有的數據項都是我們所需要的,通常在做數據分析之前,我們需要篩選有用的數據項。並將這些數據項創建成數據表,最後再將Log中的數據進行入庫。
數據庫選用MySQL,SQL語句的寫法一般類似於:
create database if not exists `qxzb_log`;
USE `qxzb_log`;
/*Table structure for table `AccountLogin` */
DROP TABLE IF EXISTS `AccountLogin`;
CREATE TABLE `AccountLogin` (
`region` varchar(48) NOT NULL,
`iEventId` int(20) NOT NULL DEFAULT 0,
`iUin` int(20) NOT NULL,
`rankId` int(3) NOT NULL DEFAULT 0,
`dtEventTime` datetime DEFAULT NULL,
`vClientIp` varchar(20) NOT NULL,
`dtCreateTime` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
編碼的格式采用UTF-8,存儲引擎采用MyISAM,並且為了保證數據插入的效率,最初時候並不創建任何索引,而由後期一次性地將數據LOAD完成之後,再創建索引。