Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取类似stackoverflow视图计数器的post的视图计数?_Php_Database Design_Relational Database_Database Schema - Fatal编程技术网

Php 如何获取类似stackoverflow视图计数器的post的视图计数?

Php 如何获取类似stackoverflow视图计数器的post的视图计数?,php,database-design,relational-database,database-schema,Php,Database Design,Relational Database,Database Schema,对于stackoverflow.com,有一个统计一个问题有多少个视图 它是如何被追踪的?已注册和未注册的用户可以查看任何问题 该计数的数据库关系模式是什么 我是否应该增加数据库表中特定问题的列值 或者,当用户查看该问题时,我是否应该添加一个新记录/行,然后显示该表总和(该列)的计数结果?如果您感兴趣的只是查看问题的次数,我会在特定问题记录中添加一个计数器。在另一个表中为每个问题视图设置一个条目可能会很容易失控 每次汇总这些记录只是为了获得一个视图计数,也可能导致繁忙系统上的性能问题 因此,为了

对于stackoverflow.com,有一个统计一个问题有多少个视图

它是如何被追踪的?已注册和未注册的用户可以查看任何问题

该计数的数据库关系模式是什么

我是否应该增加数据库表中特定问题的列值


或者,当用户查看该问题时,我是否应该添加一个新记录/行,然后显示该表总和(该列)的计数结果?

如果您感兴趣的只是查看问题的次数,我会在特定问题记录中添加一个计数器。在另一个表中为每个问题视图设置一个条目可能会很容易失控

每次汇总这些记录只是为了获得一个视图计数,也可能导致繁忙系统上的性能问题


因此,为了进一步解释,我建议您在问题表中添加一个整数列。每次查看问题时,只需增加计数器。保持简单。保持速度。

有很多方法可以做到这一点。你提到的有两种,但根据你的情况,还有一些更适合你

如果您的站点像stackoverflow一样点击率很高,那么在一个人查看问题时增加数据库表上的计数器可能会非常昂贵(我不确定这取决于他们的数据库是如何设置的)

我以前使用过的另一种方法是将视图存储在一个缓存引擎中,比如memcache/xcache/eaccelerator(每个都有自己的优点),并有一个cron,它将每小时/每夜/等运行一次,它将清理视图,并将问题id插入到由SO.com中的唯一id引用的数据库表中,并重置缓存中的计数器


如果您希望获得全面的可靠性,像noSQL引擎这样的引擎将在快速高效的键值数据存储方面表现出色。

请告诉我们stackoverflow的结构。这是秘密。具体一点,你的问题太笼统了。你能解释得更多吗?我听不懂你的回答。我应该为每个视图增加行数吗?为什么在页面/问题/帖子中增加行数的值会很昂贵?在我提到的两种方法中,哪一种更好?缓存引擎是否增加计数?缓存引擎的机制是什么?不是说它很贵(可能很贵),而是不知道你的系统可能很贵。您的系统每秒处理10000次更新的能力如何?看到我从哪里来了吗?缓存引擎不增加计数,您读取缓存,将其增加1,然后将其存储在缓存中,以便下一个人使用视图增加计数。我不能说这两者中哪一个更好,因为我们不知道你们的系统。如果你一小时只有500-1000次浏览量,那么增加列数不是一个坏方法。第二种方法呢?为每个视图添加一个新的记录/行,然后为显示该表的count do sum(that column)或count(*)。由于您在计划阶段,您确实需要考虑它将如何扩展。现在你每天可能只有50-100次访问,但是在接下来的6个月里,当访问量增加20倍时会发生什么,不是按天而是按小时。这里是我个人的观点,但我不喜欢在关系数据库中有统计数据,尤其是视图和读取统计数据,因为它们不断变化。假设页面将有20000多个视图。那你喜欢什么?