Php 如何跟踪用户去过的地方?(数据库)

Php 如何跟踪用户去过的地方?(数据库),php,mysql,sql,database,Php,Mysql,Sql,Database,对于站点上的事件/游戏,我希望跟踪用户访问的每个页面,并按其用户名进行存储。它需要通过一个数据库来完成,这样它就可以被访问,并且数据可以被操作。我只使用过MySQL,所以我现在的解决方案就是一个页面访问表,其中包含用户名和访问过的页面 不过,从扩展的角度来看,这似乎非常低效。这类事情可能会在几周或更短的时间内产生数百万行 另一个似乎效率不高的例子是投票系统。例如,在堆栈溢出上,某人的每一次投票都将是表中的另一行。这似乎不是存储数据的最佳方式 这类应用的最佳替代方案是什么? 谢谢 安德鲁斯说了些什

对于站点上的事件/游戏,我希望跟踪用户访问的每个页面,并按其用户名进行存储。它需要通过一个数据库来完成,这样它就可以被访问,并且数据可以被操作。我只使用过MySQL,所以我现在的解决方案就是一个页面访问表,其中包含用户名和访问过的页面

不过,从扩展的角度来看,这似乎非常低效。这类事情可能会在几周或更短的时间内产生数百万行

另一个似乎效率不高的例子是投票系统。例如,在堆栈溢出上,某人的每一次投票都将是表中的另一行。这似乎不是存储数据的最佳方式

这类应用的最佳替代方案是什么?
谢谢

安德鲁斯说了些什么。只要数据库是正确构造的-即至少是第二个,但取决于它的复杂性,最好是第三个标准形式-它不会是一个问题。这就是数据库的用途


对数据库规范化和适当的索引技术做一点研究,你会没事的。

如果我们使用你的第一个示例—捕获分析数据—将每个页面访问存储为新行,这是数据最灵活、最有用的格式。您可以简单地为每个用户和页面组合存储一行,然后在每次页面访问时增加一个值,但这样您就无法根据日期/时间对数据进行筛选/分组

MySQL可以毫无问题地处理数百万行。毕竟,这正是数据库的用途。您需要确保使用innodb表并为要筛选的字段编制索引。您还应选择合理的数据类型,例如,选择尽可能最小的数据类型


查询数百万行不会“快速”,但从另一方面来说,这是你永远不会让用户做的事情,因此不会影响他们的体验。

以这种方式编程是标准方法。这就是数据库的用途。但是,正如您所指出的,随着应用程序的增长,它最终将达到无法管理的规模,是时候对其进行扩展了。(至少,假设它像你所暗示的那样成功和受欢迎。)

到那时,是时候研究切分、副本集或ElasticSearch之类的东西了。现在,您可能需要考虑使用此设计而不是MySQL,因为Mongo使得设置碎片和副本集相当容易,并且基于JSON使其与弹性搜索高度兼容。
这一切都取决于你想在多大程度上提前计划,以及你是否真的相信该网站的受欢迎程度会达到这个水平。

mysql的设计目的是存储大量数据。所以,只要您的存储容量能够容纳它,即使一个表有(比如)5000万行,它也不会是一个问题?我的意思是,别误会,我没有预料到,但我想做好准备。我想这就像一个数据库,只存储一次用户名,然后以某种方式保存与该用户名相关的所有数据,会更有效。(当然,我不知道这是否存在)@user301922-我使用过有数百万行的表。只要你有适当的索引设置,他们是难以置信的速度。你也需要对数据库进行规范化——在一个表中存储一次用户信息,然后将其链接到其他表,而不是到处复制信息。我看到了一些关于数据库实践的真正有参考价值的书籍(特别是一本教科书)。你认为这样就可以了,还是我应该在MySQL上做一些特别的事情呢?如果它谈到规范化,那应该没问题,在DBs中基本上是一样的。理想情况下,用户确实需要能够直接查询表。除了“SELECT*FROM table WHERE username=:username”类型的查询之外,他们还能看到自己访问了哪些页面?