我写了一个统计/跟踪平台来监控我的网站活动。对于每个用户,在表格中创建一个条目,其中包含一些相关信息:IP,Ref,GeoLocate,countrycode等。如何管理庞大的数据库(MySQL)
数据库包含超过7MM的结果,大小约为4GB。
现在,我有一个脚本,必须执行SUM查询才能获得定义时间间隔($ from_date & $ to_date)的展示次数,点击次数等。
$query = "SELECT COUNT(ip) as tot, sum(clicked=0) as a0, sum(clicked=1) as a1, sum(converted=0) as a2, sum(converted=1) as a3 FROM tf_data WHERE cid='".$cid."' and stamp between ".$from_date." and ".$to_date." ";
一个这个查询需要永久加载,即使我在一个体面的VPS机器上。在我的摘要页面中,我还有其他一些查询,这会导致脚本经常超时(REQUEST TIMEOUT:此请求需要很长时间才能处理,它由服务器超时,如果不应该超时,请联系管理员本网站增加“连接超时”。)
我该怎么办?我如何处理这些庞大的数据?我应该创建一个单独的表并运行cron作业插入/更新展示次数,请点击数字...?
这样的事情通常如何进行?
一如既往的感谢!
编辑:表结构:
CREATE TABLE `tf_data` (
`click_id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(225) NOT NULL,
`agent` text NOT NULL,
`referer` text NOT NULL,
`stamp` text NOT NULL,
`country` varchar(30) NOT NULL,
`src` text NOT NULL,
`adspot` varchar(250) NOT NULL,
`cid` text NOT NULL,
`adid` text NOT NULL,
`lp` varchar(250) NOT NULL,
`offer` int(11) NOT NULL,
`clicked` int(11) NOT NULL,
`converted` int(11) NOT NULL,
`converted2` int(11) NOT NULL,
`price` varchar(255) NOT NULL,
PRIMARY KEY (`click_id`),
UNIQUE KEY `ip` (`ip`)
) ENGINE=MyISAM AUTO_INCREMENT=9599999 DEFAULT CHARSET=latin1
你有'邮票'的索引吗? – nico
你可以发布你的表结构'SHOW CREATE TABLE tf_data'吗? – Konerak
也许您应该转移到OLAP数据库以汇总数据。像palo http://en.wikipedia.org/wiki/Palo_(OLAP_database),微软分析服务,画面软件,... – danihp