我想向您征求与我自己的分析系统相关的建议。 到目前为止,我的系统收集所有点击并将它们保存在 SQL 数据库中。
分析的第一部分。
SQL 数据库日志
如下所示:
+----+----------------------+-------------+---------------------------------------------+----------------+--------------+----------+
| id | time | address | address_to | ip | resolution | id_guest |
|----+----------------------+-------------+---------------------------------------------+----------------+--------------+----------|
| 1 | 2013-12-03#14:31:35 | index.php | https://www.youtube.com/watch?v=6VJBBUqr1wM | 89.XX.XXX.6 | 1366x768 | 6 |
| 2 | 2013-12-03#14:48:21 | file.php | https://www.youtube.com/watch?v=0EWbonj7f18 | 89.XX.XXX.6 | 1366x768 | 6 |
| 3 | 2013-12-03#16:16:55 | contact.php | https://www.youtube.com/watch?v=_o-XIryB2gg | 178.XX.XXX.140 | 1920x1080 | 11 |
| 4 | 2013-12-03#16:21:32 | index.php | https://www.youtube.com/watch?v=z0M96LyTyX4 | 178.XX.XXX.140 | 1920x1080 | 11 |
| 5 | 2013-12-03#16:44:32 | movies.php | https://www.youtube.com/watch?v=cUhPA5qIxDQ | 178.XX.XXX.140 | 1920x1080 | 11 |
+----+----------------------+-------------+---------------------------------------------+----------------+--------------+----------+
每次点击都会作为新记录添加到数据库中。
我网站上的所有电影都在 SQL 数据库的第二个表中(电影):
+----+----------------------+-------------+---------------------+
| id | name | address | tags |
|----+----------------------+-------------+---------------------|
| 1 | 2013-12-03#14:31:35 | 6VJBBUqr1wM | bass,electro,trance |
| 2 | 2013-12-03#14:48:21 | 0EWbonj7f18 | electro,house,new |
| 3 | 2013-12-03#16:16:55 | _o-XIryB2gg | electro,party,set |
| 4 | 2013-12-03#16:21:32 | z0M96LyTyX4 | trance,house,new |
| 5 | 2013-12-03#16:44:32 | cUhPA5qIxDQ | techno,new,set |
+----+----------------------+-------------+---------------------+
一切都完美无缺。在数据库中我有用户观看的所有电影,我想精确定义它们,所以记下 IP + 分辨率。
第一个问题: 这是确定用户的好方法吗?
--
分析的第二部分。
现在我想将收集的日志和基于浏览 Material 的电影显示界面一起使用。
我为进入网站的用户从数据库中选择所有日志。
我从日志中选择标识符 film 并在表 components
中扫描它以获取日志并将其放入数组中。例如,ID = 6
的用户将有一个数组:
array(
[0] = > bass,
[1] = > electro,
[2] = > trance,
[3] = > electro,
[4] = > house,
[5] = > new
);
现在我将按照最常出现的顺序对数组的内容进行排序:
array(
[2] = > electro,
[1] = > bass,
[1] = > trance,
[1] = > house,
[1] = > new
);
根据数组的内容可以向用户展示他可能感兴趣的视频。
一切都很完美,但我现在才发现的问题......
在表 logs
中,我有超过 450 万条记录。可想而知,搜索如此大量的记录需要花费大量时间,有时进入站点长达10秒...
我希望我糟糕的英语还算清楚。
请提供有关如何解决加载页面问题的任何建议。
最佳答案
在需要的地方使用索引,很难准确地说出在哪里 - 你没有显示任何查询 - 基本上你希望在查询的 WHERE 部分和 JOINS 中有索引列。您不必为大部分时间保持不变的列编制索引 - isloggedin、isadmin、语言等等
为您需要搜索的数据制作搜索表 - 例如,如果您需要了解首选分辨率或用户访问网站的次数,您可以制作一个 cron 作业来为所有用户解析这些数据并存储它在搜索表中。如果需要,这也可以用于进行一些统计。对于这些标签,您可以使用包含
user_id
、tag
、count
的表格
如果您只需要上次访问的网站、上次的分辨率...只需为此制作一个表格,您可以在其中为每个用户存储和更新一行
关于php - 加载页面时间过长 - 分析系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23736019/