偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

主流NoSQL數(shù)據(jù)庫(kù)評(píng)測(cè)之HandlerSocket

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
NoSQL是伴隨著web2.0的迅猛發(fā)展而在2009年被提出的一個(gè)概念,一般可以通俗的理解為高性能的Key Value存儲(chǔ)結(jié)構(gòu)的數(shù)據(jù)庫(kù),當(dāng)然也有其他更廣泛的類(lèi)型。它基于CAP和BASE理論,強(qiáng)調(diào)最終一致性,具有數(shù)據(jù)結(jié)構(gòu)靈活、擴(kuò)展方便、大數(shù)據(jù)量下讀寫(xiě)性能高效等特點(diǎn),在互聯(lián)網(wǎng)行業(yè)被廣泛采用。

NoSQL是伴隨著web2.0的迅猛發(fā)展而在2009年被提出的一個(gè)概念,一般可以通俗的理解為高性能的Key Value存儲(chǔ)結(jié)構(gòu)的數(shù)據(jù)庫(kù),當(dāng)然也有其他更廣泛的類(lèi)型。它基于CAP和BASE理論,強(qiáng)調(diào)最終一致性,具有數(shù)據(jù)結(jié)構(gòu)靈活、擴(kuò)展方便、大數(shù)據(jù)量下讀寫(xiě)性能高效等特點(diǎn),在互聯(lián)網(wǎng)行業(yè)被廣泛采用。本系列文章將評(píng)測(cè)廣受關(guān)注的幾個(gè)NoSQL數(shù)據(jù)庫(kù)產(chǎn)品。本文關(guān)注的是HandlerSocket Plugin for MySQL。

HandlerSocket簡(jiǎn)介:

HandlerSocket是日本DeNA公司的架構(gòu)師Yoshinori開(kāi)發(fā)的一個(gè)NoSQL產(chǎn)品,以MySQL Plugin的形式運(yùn)行。其主要的思路是在MySQL的體系架構(gòu)中繞開(kāi)SQL解析這層,使得應(yīng)用程序直接和Innodb存儲(chǔ)引擎交互,通過(guò)合并寫(xiě)入、協(xié)議簡(jiǎn)單等手段提高了數(shù)據(jù)訪(fǎng)問(wèn)的性能,在CPU密集型的應(yīng)用中這一優(yōu)勢(shì)尤其明顯。

另外,HandlerSocket還幫我們解決了緩存的問(wèn)題,因?yàn)镮nnodb已經(jīng)有了成熟的解決方案,通過(guò)參數(shù)可以配置用于緩存數(shù)據(jù)的內(nèi)存大小,這樣只要我們分配合理的參數(shù),就能在應(yīng)用程序無(wú)需干涉的情況下實(shí)現(xiàn)熱點(diǎn)數(shù)據(jù)的緩存,降低緩存維護(hù)的開(kāi)發(fā)成本。

因?yàn)镠andlerSocket是MySQL的一個(gè)Plugin,集成在mysqld進(jìn)程中,對(duì)于NoSQL無(wú)法實(shí)現(xiàn)的復(fù)雜查詢(xún)等操作,仍然可以使用MySQL自身的關(guān)系型數(shù)據(jù)庫(kù)功能來(lái)實(shí)現(xiàn)。在運(yùn)維層面,原來(lái)廣泛使用的MySQL主從復(fù)制等經(jīng)驗(yàn)可以繼續(xù)發(fā)揮作用,相比其他或多或少存在一些bug的NoSQL產(chǎn)品,數(shù)據(jù)安全性更有保障。

可以說(shuō)這是一個(gè)很有創(chuàng)意的產(chǎn)品,因此HandlerSocket的作者在2010年10月在博客上宣稱(chēng)這一產(chǎn)品能達(dá)到75K QPS的時(shí)候,在業(yè)界引起了廣泛的關(guān)注,包括MySQL官方在新的5.6版本中推出的Memcached API,相信也是受了HandlerSocket的啟發(fā)。

測(cè)試說(shuō)明:

一、測(cè)試環(huán)境

Handlersocket部署在一臺(tái)PC 服務(wù)器上,配置如下:

CPU為Xeon 2.80GHz *4

內(nèi)存為4G

硬盤(pán)為一塊400G SATA盤(pán)

操作系統(tǒng)為64位CentOS 5.3版本

二、測(cè)試方法

Handlersocket的客戶(hù)端幾乎涵蓋了各種語(yǔ)言,都實(shí)現(xiàn)了通過(guò)以上兩個(gè)端口對(duì)數(shù)據(jù)讀寫(xiě)的操作,其中查詢(xún)操作必須通過(guò)建立有索引的列來(lái)進(jìn)行。

考慮到NoSQL在互聯(lián)網(wǎng)行業(yè)應(yīng)用較為廣泛,采用PHP實(shí)現(xiàn)客戶(hù)端程序的做法,通過(guò)一定的并發(fā)去讀寫(xiě)數(shù)據(jù),觀(guān)測(cè)每秒讀寫(xiě)的記錄數(shù)作為主要的衡量指標(biāo)。當(dāng)然也可以利用Java的多線(xiàn)程進(jìn)行并發(fā)測(cè)試,但由于篇幅和時(shí)間所限,本文不再涉及此方面的內(nèi)容。

這里采用第三方實(shí)現(xiàn)的一個(gè)PHP客戶(hù)端,網(wǎng)址為http://code.google.com/p/php-handlersocket/,可以編譯到PHP運(yùn)行環(huán)境中。

為了不對(duì)測(cè)試服務(wù)器產(chǎn)生額外的影響,測(cè)試客戶(hù)端部署在另外一臺(tái)獨(dú)立的服務(wù)器上,運(yùn)行的PHP的版本是5.3.5,web server是Nginx 0.8.54,通過(guò)fastcgi的方式調(diào)用PHP服務(wù)。使用apache ab工具實(shí)現(xiàn)多個(gè)請(qǐng)求和并發(fā)操作。

測(cè)試分為兩個(gè)步驟,首先是寫(xiě)操作,通過(guò)500個(gè)請(qǐng)求,每個(gè)請(qǐng)求寫(xiě)入10000條記錄,并發(fā)度為2來(lái)共寫(xiě)入500萬(wàn)條數(shù)據(jù),數(shù)據(jù)的key為數(shù)字1到5000000,value大小為100個(gè)字節(jié)。然后是讀操作,也是用500個(gè)請(qǐng)求,每個(gè)請(qǐng)求隨機(jī)根據(jù)key值讀出10000條記錄,并發(fā)度為10共讀出500萬(wàn)條記錄,評(píng)測(cè)的重點(diǎn)是寫(xiě)入和讀出數(shù)據(jù)的時(shí)間,以及在此過(guò)程中服務(wù)器的資源使用情況。

MySQL 數(shù)據(jù)庫(kù)安裝:

一、安裝MySQL

通過(guò)編譯源碼的方式安裝MySQL,這里選擇的版本是5.5.8版本。由于這不是本文的重點(diǎn),這里只簡(jiǎn)單的提及一下要點(diǎn)。

首先到MySQL的官網(wǎng)http://dev.mysql.com/downloads/mysql/下載源碼,要注意的是從MySQL 5.5版本開(kāi)始需要Cmake編譯工具和bison。然后開(kāi)始安裝:

安裝完成后配置my.cnf文件,最重要的參數(shù)是分配給innodb存儲(chǔ)引擎的內(nèi)存大小,也就是innodb_buffer_pool_size參數(shù),這里設(shè)置為2G。

  1. [root@localhost mysql558]# vi my.cnf  
  2.  
  3. ……  
  4.  
  5. innodb_buffer_pool_size = 2G  
  6.  
  7. …… 

二、安裝HandlerSocket

首先到以下地址下載代碼:

https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL

開(kāi)始安裝HandlerSocket:

  1. [root@localhost handlersocket]# tar -zxvf ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-67-g25f4957.tar.gz  
  2.  
  3. [root@localhost handlersocket]# cd handlersocket/  
  4. [root@localhost handlersocket]# ./autogen.sh  
  5.  
  6. [root@localhost handlersocket]# ./configure --with-mysql-source=/home/handlersocket/mysql-5.5.8 --with-mysql-bindir=/home/handlersocket/mysql558/bin --with-mysql-plugindir=/home/handlersocket/mysql558/lib/plugin  
  7.  
  8. [root@localhost handlersocket]# make  
  9.  
  10. [root@localhost handlersocket]# make install 

三、修改MySQL配置

在my.cnf配置文件增加以下內(nèi)容:

  1. [root@localhost mysql558]# vi my.cnf  
  2.  
  3. [mysqld]  
  4.  
  5. ......  
  6.  
  7. loose_handlersocket_port = 9998 
  8.  
  9. # the port number to bind to (for read requests)  
  10.  
  11. loose_handlersocket_port_wr = 9999 
  12.  
  13. # the port number to bind to (for write requests)  
  14.  
  15. loose_handlersocket_threads = 16 
  16.  
  17. # the number of worker threads (for read requests)  
  18.  
  19. loose_handlersocket_threads_wr = 16 
  20.  
  21. # the number of worker threads (for write requests)  
  22.  
  23. open_files_limit = 65535 
  24.  
  25. # to allow handlersocket accept many concurrent connections  
  26.  
  27. #make open_files_limit as large as possible. 

這里增加的這些主要是針對(duì)handlersocket的配置,它有2個(gè)端口,9998用來(lái)讀數(shù)據(jù),9999讀寫(xiě)均可,但是通過(guò)9998來(lái)讀的效率更高。這里我們?cè)O(shè)置處理讀寫(xiě)的線(xiàn)程數(shù)均為16個(gè),另外為了處理更多的并發(fā)連接,設(shè)置能打開(kāi)的文件描述符個(gè)數(shù)為65535。

四、安裝MySQL授權(quán)表并啟動(dòng)數(shù)據(jù)庫(kù):

  1. [root@localhost mysql558]# scripts/mysql_install_db --user=mysql 
  2.  
  3. [root@localhost mysql558]# bin/mysqld_safe --user=mysql & 

五、登錄MySQL安裝HandlerSocket Plugin:

  1. [root@localhost mysql558]# bin/mysql -u root -p  
  2.  
  3. mysql> install plugin handlersocket soname 'handlersocket.so';  
  4.  
  5. Query OK, 0 rows affected (0.01 sec) 

通過(guò)以下命令查看也可見(jiàn)handlersocket已經(jīng)成功安裝到MySQL中:

  1. mysql> show processlist;  
  2. mysql> show plugins; 

測(cè)試結(jié)果:

一、寫(xiě)操作

成功寫(xiě)入500萬(wàn)條記錄,共耗時(shí)4300秒,平均每秒寫(xiě)入數(shù)據(jù)1163筆。

寫(xiě)入過(guò)程中,服務(wù)器比較穩(wěn)定,CPU使用率平穩(wěn),Idle值穩(wěn)定在70到72之間,等待時(shí)間穩(wěn)定在14到19之間。內(nèi)存分配上的變化較大,free部分從1.3G下降到25M,buffer部分從630M下降到65M,cache部分從1.5G上升到2.9G,虛擬內(nèi)存從0上升到376K,但是沒(méi)有交換區(qū)到內(nèi)存的換入換出。磁盤(pán)IO表現(xiàn)平穩(wěn),每秒寫(xiě)入的塊數(shù)穩(wěn)定在10000到12000之間。

二、讀操作

成功讀出500萬(wàn)條記錄,共耗時(shí)193秒,平均每秒讀出數(shù)據(jù)25906筆。

讀數(shù)據(jù)過(guò)程中沒(méi)有發(fā)生磁盤(pán)IO。CPU較繁忙,Idle在39到51之間,等待CPU資源的進(jìn)程一直在1到6個(gè)之間。內(nèi)存表現(xiàn)平穩(wěn)沒(méi)有波動(dòng)。

通過(guò)以上測(cè)試結(jié)果可以說(shuō)明,寫(xiě)入的數(shù)據(jù)完全緩存到了文件系統(tǒng)中,所以cache部分占用的內(nèi)存大量增加,這也是讀取數(shù)據(jù)的時(shí)候沒(méi)有發(fā)生磁盤(pán)IO的原因。

總結(jié):

要說(shuō)明的是,雖然這是一份真實(shí)的測(cè)試數(shù)據(jù),但是并不一定具有普遍意義。因?yàn)閼?yīng)用場(chǎng)景是千差萬(wàn)別的,服務(wù)器的資源配置、數(shù)據(jù)記錄的多少、單條數(shù)據(jù)的大小、讀寫(xiě)的比例、客戶(hù)端程序的質(zhì)量等因素都會(huì)影響測(cè)試結(jié)果,甚至差別會(huì)非常大,對(duì)我們來(lái)說(shuō),更重要的是了解這個(gè)NoSQL產(chǎn)品的特性,知道它的適用場(chǎng)景,并且能夠根據(jù)自己實(shí)際的應(yīng)用場(chǎng)景針對(duì)性的進(jìn)行測(cè)試,這樣才能做到針對(duì)性的選型,只有最適合自己需求的產(chǎn)品才是最好的產(chǎn)品。

【編輯推薦】

  1. 數(shù)據(jù)庫(kù)日常維護(hù)常用的腳本部分收錄
  2. SQL與NoSQL——MySQL與NoSQL的融合
  3. MySQL中的NoSQL插件
  4. HandlerSocket是神馬
  5. 微軟WP7本地?cái)?shù)據(jù)庫(kù)之Sterling編程技巧

 

責(zé)任編輯:艾婧 來(lái)源: it68
相關(guān)推薦

2011-07-13 09:58:15

HBase

2011-07-06 16:36:40

Redis

2011-05-30 09:27:35

NoSQL評(píng)測(cè)

2011-06-14 09:09:13

NoSQLMongoDB

2011-09-21 11:21:00

NoSQL

2019-03-20 15:59:11

NoSQLRedis數(shù)據(jù)庫(kù)

2024-02-02 10:51:53

2021-09-28 09:25:05

NoSQL數(shù)據(jù)庫(kù)列式數(shù)據(jù)庫(kù)

2011-10-09 09:38:03

OracleNoSQL

2011-07-19 09:08:50

JavaNoSQL

2019-07-08 10:36:34

數(shù)據(jù)庫(kù)WebNoSQL

2010-04-01 09:45:38

NoSQL

2024-03-28 09:00:00

NoSQL數(shù)據(jù)庫(kù)

2011-03-01 09:10:19

開(kāi)源數(shù)據(jù)庫(kù)

2011-04-14 11:14:21

OracleNoSQLMySQL

2014-02-27 10:08:33

NoSQL

2019-07-23 11:41:45

數(shù)據(jù)庫(kù)SQLDocker

2011-03-25 14:40:29

Trinity數(shù)據(jù)庫(kù)

2020-10-31 22:01:40

NoSQL數(shù)據(jù)庫(kù)

2017-05-25 10:11:46

數(shù)據(jù)庫(kù)令牌節(jié)點(diǎn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)