日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql点击计数器_MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能...

發(fā)布時間:2024/9/27 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql点击计数器_MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySql計數(shù)器,如網(wǎng)站點擊數(shù),如何實現(xiàn)高性能高并發(fā)的計數(shù)器功能

Clicks: 5338 Date: 2014-03-29 23:30:42 Power By 李軒Lane

TagMysql計數(shù)器高性能

現(xiàn)在有很多的項目,對計數(shù)器的實現(xiàn)甚是隨意,比如在實現(xiàn)網(wǎng)站文章點擊數(shù)的時候,是這么設計數(shù)據(jù)表的,如:”article_id, menu_id, article_name, article_content, article_author, article_view......在article_view中記錄該文章的瀏覽量。詐一看似乎沒有問題。對于小站,比如本博客,就是這么做的,因為小菜的博客難道會涉及并發(fā)問題嗎?答案顯而易見,一天沒多少IP,而且以后不會很大。

言歸正傳,對文章資訊類為主的項目,在瀏覽一個頁面的時候不但要進行大量的查(查詢上文的記錄,已經(jīng)所屬分類的名字、熱門文章資訊評論、TAG等),還要進行寫操作(更新瀏覽數(shù)點擊數(shù))。把文章的詳細內容和計數(shù)器放在一張表盡管對開發(fā)很方便,但是會造成數(shù)據(jù)庫的壓力過大(不然為什么大項目都要分庫分表呢)。

那么,分兩張表存放就好了么?一張表存文章詳細信息,另一張表單獨存計數(shù)器。CREATE TABLE `article_view`(

`article_id` int(11) NOT NULL,

`view` int(11) NOT NULL,

PRIMARY KEY (`article_id`)

)ENGINE=InnoDB;

這種方式,雖然分擔了文章表的壓力,但是每當有一個進程請求更新的時候,都會產(chǎn)生全局的互斥鎖,只能串行,不能并行。在高并發(fā)下會有較長的等待時間。

另一種比較好的辦法是對每一個文章的計數(shù)器不是一行,而是多行,比如吧,一百行。每次隨機更新其中一行,該文章的瀏覽數(shù)就是所有行的和。CREATE TABLE `article_view`(

`article_id` int(11) NOT NULL,

`pond` tinyint(4) NOT NULL COMMENT '池子,就是用來隨機用的',

`view` int(11) NOT NULL,

PRIMARY KEY (`article_id`, `pond`)

)ENGINE=InnoDB;

小訪問量的隨機池子100個肯定多了,三五個足矣。每次訪問的時候,隨機一個數(shù)字(1-100)作為pond,如何該pond存在則更新view+1,否則插入,view=1。借助DUPLICATE KEY,不然在程序里是實現(xiàn)得先SELECT,判斷一下再INSERT或者UPDATE。

INSERT INTO `article_view` (`article_id`, `pond`, `view`) VALUES (`123`, RAND()*100, 1) ON DUPLICATE KEY UPDATE `view`=`view`+1

獲取指定文章的總訪問量的時候:

SELECT SUM(`view`) FROM `article_view` WHERE `article_id`='123'

Ps:凡事都是雙刃劍。為了更快的讀我們通常要犧牲一些東西。在讀比較多的表要加快讀的速度,在寫較多的表要加快寫的速度。各自權衡。在加快讀的速度的時候,我們犧牲的并不僅僅是寫的性能,還有開發(fā)成本,開發(fā)變的更復雜,維護成本等。所以并不是讀的速度越快越好,需要找一個平衡點。

注:這里僅僅是Mysql方面,有人會說高并發(fā)下你這是直接讀寫Mysql啦,項目的瓶頸本來就在數(shù)據(jù)庫啦。。。其實。。。這里只是說Mysql的表怎么去設計而已。你完全可以在這個地方用隊列去寫表,你也可以把計數(shù)器在內存中保存,一直來累加,1個小時持久化一次。你也可以去用號稱每秒讀寫十萬次的Redis。

本文原創(chuàng)發(fā)布php中文網(wǎng),轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的mysql点击计数器_MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。