我正在为我的站点构建一个顶级列表,而不是每24小时录制和删除数据库并清空数据库我希望在“最近24小时内”录制点击和点击“ ,这样,无论你看什么时候,顶部列表总是会看起来很忙,同时仍然非常有效地排列网站。因此,基本上我必须向数据库中添加一条记录,记录'in'命中(例如),并在24小时后将其删除,或者在对网站进行排名时根本不考虑该记录。PHP MySql 24小时存储数据
我想知道这样做的最有效的方式,我有一些想法,但他们都似乎真的资源很重。我希望你明白我想达到什么:)任何帮助,将不胜感激。
我正在为我的站点构建一个顶级列表,而不是每24小时录制和删除数据库并清空数据库我希望在“最近24小时内”录制点击和点击“ ,这样,无论你看什么时候,顶部列表总是会看起来很忙,同时仍然非常有效地排列网站。因此,基本上我必须向数据库中添加一条记录,记录'in'命中(例如),并在24小时后将其删除,或者在对网站进行排名时根本不考虑该记录。PHP MySql 24小时存储数据
我想知道这样做的最有效的方式,我有一些想法,但他们都似乎真的资源很重。我希望你明白我想达到什么:)任何帮助,将不胜感激。
您不必一直删除“旧”数据。查询数据时,您还可以在过去24小时内将数据集限制为记录。
WHERE
site='xyz'
AND hit_datetime > Now()-Interval 24 hour
看到http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
编写一个存储过程,删除超过24小时的记录。然后编写一个在每个INSERT语句上运行并调用SP的trigger。
,你可以存储与每一个“打”,然后时间戳调用诸如
$time = time()-86400;
mysql_query("DELETE FROM xxx WHERE timestamp < $time");
,或者你可以在SELECT语句中同样的事情,取决于如果你还需要命中事后查询等
如果时间约束是不是真的很难(例如,你会失去金钱,是非常恼人的用户,如果将数据保存在数据库超过24小时),我会用使用PHP的register_shutdown_function这样的:
function cleanup() {
// open db-connection etc.
$query = 'DELETE FROM <yourtable> ' .
'WHERE UNIX_TIMESTAMP(<timstampfield>) < ' . (time() - 86400);
mysql_query($query);
// close connection
}
register_shutdown_function('cleanup');
上面的代码假定,<timestampfield>是MYSQL的最新-数据类型之一(TIME STAMP,DATE,DATETIME)。
我会删除早于24小时的数据用一个简单的
DELETE...WHERE hit_time < now() - interval 24 hour
另一个问题是 - 什么时候调用呢?权衡是在性能和陈旧数据之间进行的。你调用它的频率越高,数据就会越少,但服务器负载将会增长。
我看到几个方法,挑选一个适合您的需求最:
您也可以创造一些其他方案 - 例如,每个用户会话运行一次;或者只有在执行时间可以平均分配7时才运行它;或者是其他东西。无论哪种方式,你都要牺牲性能来保证正确性。
这显然是这里的方式,恕我直言。 – n3rd 2009-07-14 10:53:18
这是一个很好的解决方案,但是如果你喜欢大量的流量,我会考虑从vilx那里得到一个,因为它可能会用时间 – Flo 2009-07-14 11:18:37