2012-03-29 48 views
0

对于stackoverflow.com有一个问题的多少个视图的统计。我如何获得像stackoverflow视图计数器的职位的查看计数?

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

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

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

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

+0

请,我们不能告诉你stackoverflow的结构。那是秘密=)。更具体地说,你的问题太笼统 – safarov 2012-03-29 20:23:23

+0

跟踪页面视图。 – shibly 2012-03-29 20:29:43

回答

0

这有很多方法。有你提到的两个,但也有其他的将取决于你的情况适合你更好。

如果你有很多点击到你的网站,像stackoverflow一样,当一个人查看问题时增加数据库表上的计数器可能是非常昂贵的(取决于他们的数据库如何设置我不确定)。

我以前使用的另一种方法是将视图存储在像memcache/xcache/eaccelerator之类的缓存引擎中(每个缓存引擎都有各自的优点),并且具有每小时/每晚/每秒运行一次的cron。这将清理视图并插入SO.com情况下唯一ID所引用的数据库表中的问题ID,并重置缓存中的计数器。

如果您想要总体可靠性,像mongoDB这样的noSQL引擎在快速和有效的键值数据存储方面会非常出色。

+0

为什么用该页面/问题/帖子增加该行的价值是很昂贵的?在我提到的这两种方法之间哪种方法更好?缓存引擎是否增加计数?什么是缓存引擎的机制? – shibly 2012-03-29 20:38:05

+0

并不是说它很昂贵(可能很贵),但不知道你的系统可以。你的系统每秒能处理10,000次更新?看看我来自哪里?缓存引擎不会增加计数,您读取缓存,将其增加1,然后将其存储在缓存中,以便下一个要增加视图的人员。我不能说哪个更好,因为我们不知道你的系统。如果你只有一个小时可以说500-1000次观看的话,那么增加列并不是一个坏方法。 – ncremins 2012-03-29 20:47:43

+0

第二种方式呢?为每个视图添加一个新的记录/行,然后显示该表的计数总和(thatcolumn)或计数(*)。 – shibly 2012-03-29 20:50:09

0

如果您只想查看问题的次数,我会在特定问题记录中添加一个计数器。在每个问题视图的另一个表格中输入内容可能非常容易失控。

总结这些记录只是为了每次查看计数都会导致繁忙系统出现性能问题。

所以,为了进一步解释,我建议你在问题表中添加一个整数列。每次查看问题时,只需增加计数器即可。把事情简单化。保持快速。

+0

你能解释一下吗?我无法理解你的答案。我应该增加每个视图的行吗? – shibly 2012-03-29 20:30:36