现在有很多项目对计数器的实现非常随意。For example, when we click the number of web articles, we design data tables, such as article_id, article_name, article_content, article_author, article_view...The amount of browsing of this article is recorded in article_view.It seems that there is no problem.For small stations, such as this blog, that's what it does, because can the blogs of the small dish involve concurrent problems答案很明显,一天IP不多,将来也不会很大。

嗯,主要物品的信息,当浏览一个网页,不仅大量的检查(检查上面的记录,有名字的,受欢迎的文章信息审查、标签),但也写(更新通过点击)。具体内容和桌子上反而发展很方便,但会导致压力过大的数据库(或为什么大项目必须拆分表格)。

那么,两张桌子可以存放吗一个表保存文章的细节,而另一个表只保存计数器。

复制代码代码如下所示:

创建表` article_view `(

` article_id ` int(11)不为空,

int(11)不为空,

主键(` article_id `)

InnoDB引擎=);



这样,虽然共享表表的压力,但每次进程请求更新时,都会产生全局独占锁,只能是串行的,而不是并行的。

另一个好方法是,每个文章的计数器不是一行,而是多行,例如,一百行。每次更新一行时,文章的视图数是所有行的和。

复制代码代码如下所示:

创建表` article_view `(

` article_id ` int(11)不为空,

`池塘` tinyint(4)非空评论池用于随机使用,

int(11)不为空,

主键(` article_id `,`池塘`)

InnoDB引擎=);



100随机池小数量更是超过了35。在每次访问时,一个随机数(1-100)作为池塘,池塘的存在以及如何更新视图+ 1,否则,插入,查看= 1.重复键的帮助下,或在该程序实现的是第一选择,判断插入或更新。

复制代码代码如下所示:

插入` article_view `(` article_id `,`池塘`,`观`)值(` 123 `,RAND()* 100, 1)重复



当获得指定文章的总访问量时:

复制代码代码如下所示:

选择和(`观`)从` article_view `哪里` article_id ` = '123



PS:任何事物都是一把双刃剑。为了读得更快,我们通常不得不做出一些牺牲。多读表来加快阅读,写更多的表来加快写作。各自的权衡。在阅读的速度,我们奉献的不只是性能,而且开发成本,更复杂的开发、维护成本,因此不是更快更好的阅读速度,需要找到一个平衡点。