日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

MySQL中實(shí)現(xiàn)高性能高并發(fā)計(jì)數(shù)器方案_MySQL教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:創(chuàng)建MySQL從庫(kù)
我們知道Oracle有DataGuard實(shí)時(shí)備份數(shù)據(jù),可以做主備切換,而MySQL也有自己的一套備庫(kù)方案,稱之為主從復(fù)制。 搭建MySQL從庫(kù)是為了實(shí)時(shí)同步主庫(kù)數(shù)據(jù),同時(shí)也可以分擔(dān)主庫(kù)的讀壓力,對(duì)數(shù)據(jù)庫(kù)端做成讀寫(xiě)分離結(jié)構(gòu)。 搭建MySQL主從庫(kù)注意點(diǎn): 1.主庫(kù)和從庫(kù)的 server-id 一

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

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

  那么,分兩張表存放就好了么?一張表存文章詳細(xì)信息,另一張表單獨(dú)存計(jì)數(shù)器。

  代碼如下:

  CREATE TABLE `article_view`(

  `article_id` int(11) NOT NULL,

  `view` int(11) NOT NULL,

  PRIMARY KEY (`article_id`)

  )ENGINE=InnoDB;

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

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

  代碼如下:

  CREATE TABLE `article_view`(

  `article_id` int(11) NOT NULL,

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

  `view` int(11) NOT NULL,

  PRIMARY KEY (`article_id`,`pond`)

  )ENGINE=InnoDB;

  小訪問(wèn)量的隨機(jī)池子100個(gè)肯定多了,三五個(gè)足矣。每次訪問(wèn)的時(shí)候,隨機(jī)一個(gè)數(shù)字(1-100)作為pond,如何該pond存在則更新view+1,否則插入,view=1。借助DUPLICATE KEY,不然在程序里是實(shí)現(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

  獲取指定文章的總訪問(wèn)量的時(shí)候:

  代碼如下:

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

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

分享:mysql語(yǔ)句中使用like后面的%(百分號(hào))的問(wèn)題
問(wèn)題:mysql語(yǔ)句中使用like后面的%(百分號(hào)) 是不是越多執(zhí)行效率越慢! 總用時(shí):0.0489秒 0.0691 0.0485 0.0467 SELECT `goods_name`, `goods_img`, `sku_id`, `import` FROM `goods` WHERE `goods_name` LIKE '%iPhone%iPod%' AND `stime` 1413877244 AND `etime` 14138

來(lái)源:模板無(wú)憂//所屬分類:MySQL教程/更新時(shí)間:2014-10-28
相關(guān)MySQL教程