存储每日页面访问量的最有效的方式,以及总计数(Most efficient way of stori

2019-07-04 08:25发布

讨论对存储在数据库中的文章或视频页面访问量有配发,但我似乎无法找到上存储日常网页浏览的任何信息。 例如DeviantArt的显示你在过去的15天左右,有多少页面浏览量每一个在一个小图了,以及配置文件的总页面浏览。

你可以看到上面正是我想要实现的,deviantART的做一个巨大的规模,因为他们得到百万的点击率。

我使用CodeIgniter的PHP和MySQL

Answer 1:

你可以有一个排的每一天,然后它被视为时增加计数。

INSERT INTO views (day,views) VALUES (CURDATE(),1) ON DUPLICATE KEY UPDATE views=views+1;

和PHP脚本...

mysql_query("INSERT INTO views (day,views) VALUES (CURDATE(),1) ON DUPLICATE KEY UPDATE views=views+1;");

它使用了一个名为“若干意见”和2行“天”和“若干意见”表。

请参阅这篇文章以获取更多信息。



Answer 2:

通常你在这些情况下,做的是有一个记录表,每个视图1分的纪录。 你必须要在一定的时间间隔(每日)一个cron运行到日志数据汇总到另一个汇总表。 在最基本的层面上,你会每天1条记录与总观看次数汇总表。 由于历史数据永远不会改变,你不需要做更新。 这让你每年最多365个记录每个项目。 不是很多的记录,所以它很好地扩展。

这鳞比,有每一天的单个记录和更新计数更好。 您可能会遇到争/锁定问题,如果你想在同一记录多次更新。 通过这样做一个INSERT DELAYED和使用MyISAM表,你的日志表可以很好地进行缩放。

然后,您可以从汇总表中选择,以获得每天计数,如果你想显示当前的天数,您可以从日志表中选择。

如果你想保持你的记录表小,当你的cron运行,你可以重命名的记录表,并创建一个新的空单。 然后处理更名记录表。

RENAME TABLE logging TO logging_old;CREATE TABLE logging LIKE logging_old;

如果你真的需要扩展,您可以使用复制招极快登录意见。 用来登录数据黑洞表类型,它复制到另一台服务器,其中表的MyISAM或InnoDB的。



Answer 3:

我不使用笨,但这里是你如何在PHP中直做到这一点。

基本上,您可以使用会议记录每次访问您的网站,并记录他们的页面请求,也可以简单地记录页面上的每个命中。 第一个选项为您提供更多的信息(有多少独特的命中提出,许多命中如何回访者等),但需要更多的编程设置,并要求用户会话管理。 所以,你的目的,我会解释选项2。

SQL:

Table 'pageViews'
Id  - Integer, auto Increment, primary key
page - varchar(150)
datetime - datetime

在我的监视页面,你可以这样:

    $query2 = "INSERT INTO `pageViews` (page, datetime) VALUES ('".$_SERVER["SCRIPT_NAME"]."', ".date("Y-M-d H:I:s").")";
    $result2 = //insert DB connection etc. to apply update to DB

然后,您可以从基于网页和日期时间戳的数据库获取行,重要的结果,并使用HTML5画布显示。 或者,因为每个创下了一个日期,您可以进一步将其细分为一天中的时间等。

我希望这有帮助。


要修改此为简单的日常柜台,添加一个名为“若干意见”一个额外的列,这只是一个整数。 然后在页面上放一个检查,看看是否有当前页面今天在数据库中的一行。 如果是这样,那么得到的当前观点保值增值,并转售给DB。

对于总浏览数我可能会创建另一个表使用相同的列,但不能与日期时间列。 那么你的页面上,你增加新表中为当前页面的看法太超值了。

这将减轻快。 权衡的是细节的损失。 所以,这里的MySQL和PHP这个第三选项:

MySQL的:

Table 'dailyViews'
Id  - Integer, auto Increment, primary key
views - integer
page - varchar(150)
datetime - datetime

Table 'totalViews'
Id  - Integer, auto Increment, primary key
views - integer
page - varchar(150)

PHP:

// Search the DB for an entry today for this page in dailyViews
$query = "SELECT views FROM `dailyViews` WHERE `page`='".$_SERVER["SCRIPT_NAME"]."' AND `datetime`=".date("Y-M-d H:I:s")."";
$result = //insert your db connection etc to execute the query

if (mysqli_num_rows($result)==1) {
    $resultArray = mysqli_fetch_array($result, MYSQLI_ASSOC);
    $views = $resultArray['views']+1;
    $query2 = "UPDATE `dailyViews` SET `views`=".$views." WHERE `page`='".$_SERVER["SCRIPT_NAME"]."' AND `datetime`=".date("Y-M-d H:I:s")."";
    $result2 = //insert DB connection etc. to apply update to DB
} else if (mysqli_num_rows($result)<1) {
    $query2 = "INSERT INTO `dailyViews` (views, page, datetime) VALUES (1, '".$_SERVER["SCRIPT_NAME"]."', ".date("Y-M-d H:I:s").")";
    $result2 = //insert DB connection etc. to apply update to DB
} else {
    // there is more than one entry for this page and date in the DB. An error has ccurred
}

// Then just get the total views for this page and increase it by 1.


文章来源: Most efficient way of storing daily page views, as well as a total count