【发布时间】:2014-07-07 07:28:25
【问题描述】:
我想就我自己的分析系统向您征求意见。 到目前为止,我的系统会收集所有点击并将它们保存在 SQL 数据库中。
分析的第一部分。
SQL 数据库logs 如下所示:
+----+----------------------+-------------+---------------------------------------------+----------------+--------------+----------+
| 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 数据库的第二张表上(movies):
+----+----------------------+-------------+---------------------+
| 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 +分辨率。
第一个问题: 这是确定用户的好方法吗?
--
分析的第二部分。
现在我想使用收集的日志和显示界面与基于浏览材料的电影。
我从数据库中为进入网站的用户选择所有日志。
从日志中我选择标识符 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秒...
我希望我蹩脚的英语还算清楚。
请提供任何关于如何解决加载页面问题的建议。
【问题讨论】:
-
你在使用索引吗?你到底在寻找什么?它必须是 100% 准确的最新数据吗?您可以做一些工作来分析数据并在某个搜索表中准备结果,大约每小时一次。
-
您可以考虑做很多事情:高性能服务器、高性能数据库引擎、查询优化、数据库优化、缓存等
-
@Uriel_SVK 我从来没有对索引造成伤害...谢谢,它很有帮助,听起来像是我解决问题的方法:) 从
components我选择所有日志,其中 id = USER_ID。你想 CRON 吗? -
@PatrykSzram 是的,你可以使用 cron。另外,您将日志中的数据用于什么目的?例如,如果您需要用户首选的分辨率,您可以为所有用户创建一个首选分辨率的搜索表,然后您可以通过该 cron 作业填写它
-
请编辑您的问题并显示您真正使用的查询。
标签: php jquery mysql sql database