对于网站上的活动/游戏,我想跟踪用户访问的每个页面并按用户名存储它。它需要通过数据库完成,以便可以访问,并且可以操作数据。我只使用过MySQL,所以我现在所处的解决方案只是一个页面访问表,其中包含用户名和访问过的页面。
但这对于扩展目的来说似乎非常低效。在几周或更短的时间内,这类事情最终会导致数百万行。
另一个看似不高效的例子是投票系统。例如,在堆栈溢出时,某人放置的每个投票都是表的另一行。这似乎不是存储数据的最佳方式。
这些应用的最佳选择是什么? 谢谢!
答案 0 :(得分:0)
@Andrewsi说的是什么。只要db被正确构造 - 即至少第二,但取决于它的复杂性,可能更好地成为第三范式 - 这不会是一个问题。这就是数据库的用途。
对数据库规范化和正确的索引技术进行一些研究,你会没事的。
答案 1 :(得分:0)
如果我们使用您的第一个示例 - 捕获分析数据 - 将每个页面访问存储为新行是数据的最灵活和最有用的格式。您可以为每个用户和页面组合存储一行,然后在每次页面访问时增加一个值,但是您将无法根据日期/时间执行过滤/分组数据等操作。
MySQL可以毫无问题地处理数百万行。毕竟,这正是数据库的用途。您需要确保使用innodb表并索引要筛选的字段。您还应该选择合理的数据类型,例如选择尽可能小的数据类型。
查询数百万行不会“快速”,但另一方面,这不是你会让用户做的事情,所以它不应该影响他们的体验。
答案 2 :(得分:0)
这种方式编程是标准方法。这是数据库的用途。但是,正如您所指出的那样,随着应用程序的增长,它最终将达到无法管理的大小,并且是时候进行扩展了。 (至少,假设它是成功的,并且像你暗示它一样受欢迎。)
此时,是时候研究诸如分片,副本集或ElasticSearch之类的东西了。你可能想要考虑使用MongoDB而不是MySQL来设计它,因为Mongo使得设置分片和副本集相当容易,并且基于JSON使它与Elastic Search高度兼容。
这一切都取决于你想要计划多少,以及你是否真的相信该网站的受欢迎程度会爆炸到那个水平。