国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Tokyo Tyrant安裝配置參數(shù)及效率測試
作者:小超
轉(zhuǎn)載請(qǐng)注明出處:
http://www.eb163.com/club/thread-2470-1-1.html

TokyoCabinet是日本人平林幹雄開發(fā)的一款DBM數(shù)據(jù)庫,該數(shù)據(jù)庫讀寫非??臁5菃螁蔚腡C數(shù)據(jù)庫,用處不大,宿主程序需要進(jìn)行很多開發(fā)。TC的作者開發(fā)了TokyoTyrant(TT)這個(gè)網(wǎng)絡(luò)服務(wù)程序,除了自己的二進(jìn)制協(xié)議,還提供了現(xiàn)在被廣泛應(yīng)用的HTTP協(xié)議,memcached協(xié)議來訪問TC數(shù)據(jù)庫,這樣一來,一下子就擴(kuò)展了TC的使用范圍,讓TC從一個(gè)單純的開發(fā)庫變成了易用,高效的數(shù)據(jù)庫系統(tǒng)。

Tokyo Tyrant是由同一作者開發(fā)的 Tokyo Cabinet 數(shù)據(jù)庫網(wǎng)絡(luò)接口。它擁有Memcached兼容協(xié)議,也可以通過HTTP協(xié)議進(jìn)行數(shù)據(jù)交換。
Tokyo Tyrant 加上 Tokyo Cabinet,構(gòu)成了一款支持高并發(fā)的分布式持久存儲(chǔ)系統(tǒng),對(duì)任何原有Memcached客戶端來講,可以將Tokyo Tyrant看成是一個(gè)Memcached,但是,它的數(shù)據(jù)是可以持久存儲(chǔ)的。
#建立Tokyo Tyrant日志及數(shù)據(jù)存放目錄
  1. mkdir /ttserver
復(fù)制代碼
#下載安裝tokyocabinet
  1. wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.3.17.tar.gz
  2. tar zxvf tokyocabinet-1.3.17.tar.gz
  3. cd tokyocabinet-1.3.17/
  4. ./configure
  5. make
  6. make install
  7. cd ../
復(fù)制代碼
#下載安裝tokyotyrant
  1. wget http://tokyocabinet.sourceforge.net/tyrantpkg/tokyotyrant-1.1.7.tar.gz
  2. tar -xzvf tokyotyrant-1.1.7.tar.gz
  3. cd tokyotyrant-1.1.7
  4. ./configure --prefix=/usr/local/tokyotyrant
  5. make
  6. make  install
復(fù)制代碼
#啟動(dòng)Tokyo Tyrant服務(wù)器端
如果大量的客戶端訪問ttserver,請(qǐng)確保文件描述符夠用。許多服務(wù)器的默認(rèn)文件描述符為1024,可以在啟動(dòng)ttserver前使用ulimit命令提高這項(xiàng)值。例如:
  1. ulimit -SHn 51200
復(fù)制代碼
啟動(dòng)的時(shí)候,根據(jù)參數(shù)dbname名來確定使用的TC數(shù)據(jù)庫類型。如果為"*",則使用內(nèi)存hash表,如果為"+",則使用內(nèi)存B+庫,如果后綴為".tch",則使用hash表,如果后綴為".tcb",則使用B+樹數(shù)據(jù)庫,如果后綴為".tcf",則使用定長數(shù)組。如果dbname參數(shù)被省略,則采用內(nèi)存hash數(shù)據(jù)庫。
在ttserver眾多的啟動(dòng)參數(shù)中,有兩個(gè)參數(shù)在正式使用時(shí)非常有用,-mask expr, -unmaskexpr,分別是禁止的命令,允許的命令。在正式使用時(shí),最好能把vanish(刪除所有數(shù)據(jù))屏蔽掉,就像linux系統(tǒng)中把rm -rf *屏蔽了一樣。
參數(shù)解釋
  1. ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [-ext path] [-mask expr] [-unmask expr] [dbname]
  2.   -host name : 指定需要綁定的服務(wù)器域名或IP地址。默認(rèn)綁定這臺(tái)服務(wù)器上的所有IP地址。
  3.   -port num : 指定需要綁定的端口號(hào)。默認(rèn)端口號(hào)為1978
  4.   -thnum num : 指定線程數(shù)。默認(rèn)為8個(gè)線程。
  5.   -tout num : 指定每個(gè)會(huì)話的超時(shí)時(shí)間(單位為秒)。默認(rèn)永不超時(shí)。
  6.   -dmn : 以守護(hù)進(jìn)程方式運(yùn)行。
  7.   -pid path : 輸出進(jìn)程ID到指定文件(這里指定文件名)。
  8.   -log path : 輸出日志信息到指定文件(這里指定文件名)。
  9.   -ld : 在日志文件中還記錄DEBUG調(diào)試信息。
  10.   -le : 在日志文件中僅記錄錯(cuò)誤信息。
  11.   -ulog path : 指定同步日志文件存放路徑(這里指定目錄名)。
  12.   -ulim num : 指定每個(gè)同步日志文件的大?。ɡ?28m)。
  13.   -uas : 使用異步IO記錄更新日志(使用此項(xiàng)會(huì)減少磁盤IO消耗,但是數(shù)據(jù)會(huì)先放在內(nèi)存中,不會(huì)立即寫入磁盤,如果重啟服務(wù)器或ttserver進(jìn)程被kill掉,將導(dǎo)致部分?jǐn)?shù)據(jù)丟失。一般情況下不建議使用)。
  14.   -sid num : 指定服務(wù)器ID號(hào)(當(dāng)使用主輔模式時(shí),每臺(tái)ttserver需要不同的ID號(hào))
  15.   -mhost name : 指定主輔同步模式下,主服務(wù)器的域名或IP地址。
  16.   -mport num : 指定主輔同步模式下,主服務(wù)器的端口號(hào)。
  17.   -rts path : 指定用來存放同步時(shí)間戳的文件名。
  18.   -ext path : 擴(kuò)展的腳本文件
  19.   -mask expr : 需要禁止的命令,多個(gè)命名用","隔開
  20.   -unmaks expr : 允許的命令
復(fù)制代碼
  1. 不同數(shù)據(jù)庫類型的詳細(xì)配置參數(shù)解析
  2. 下面我們?cè)賮砜聪聰?shù)據(jù)庫類型的詳細(xì)配置。

  3.     *     數(shù)據(jù)庫名的命名方式被Tokyo Cabinet的抽象API指定。
  4.     *     如果數(shù)據(jù)庫名為"*",表示內(nèi)存hash數(shù)據(jù)庫。
  5.     *     如果數(shù)據(jù)庫名為"+"表示內(nèi)存tree數(shù)據(jù)庫。
  6.     *     如果數(shù)據(jù)庫名為".tch",則數(shù)據(jù)庫為hash數(shù)據(jù)庫。
  7.     *     如果數(shù)據(jù)庫名的后綴為".tcb",數(shù)據(jù)庫將為B+ tree數(shù)據(jù)庫。
  8.     *     如果數(shù)據(jù)庫名的后綴為".tcf"。則數(shù)據(jù)庫將為fixed-length數(shù)據(jù)庫。
  9.     *     如果數(shù)據(jù)庫名的后綴為".tct",則數(shù)據(jù)將為一個(gè)table數(shù)據(jù)庫(有表的概念)。

  10. 數(shù)據(jù)庫的調(diào)整參數(shù)通過數(shù)據(jù)庫名的延伸來指定,通過"#"分開,每個(gè)參數(shù)通過一個(gè)參數(shù)名和值來指定,用"="隔開。

  11. 內(nèi)存hash數(shù)據(jù)庫支持"bnum", "capnum", 和 "capsiz"

  12. 內(nèi)存tree數(shù)據(jù)庫支持"capnum" 和 "capsiz"

  13.     capnum指定記錄的最大容量,capsiz指定最大的內(nèi)存使用量(在內(nèi)存數(shù)據(jù)庫中),記錄通過存儲(chǔ)的順序移除。

  14. hash數(shù)據(jù)庫支持"mode", "bnum", "apow", "fpow", "opts", "rcnum", 和 "xmsiz".

  15.     `rcnum'指定最大的緩存記錄數(shù)。如果它不大于零,那么緩存記錄不可用。默認(rèn)不可用。
  16.     xmsiz  指定外部內(nèi)存的大小。如果不大于0,內(nèi)存不可用。默認(rèn)是67108864,即64M。
  17.     `bnum' 指定bucket存儲(chǔ)桶的數(shù)量。如果指定的數(shù)目不大于0,將會(huì)使用默認(rèn)的數(shù)值131071.推薦數(shù)量應(yīng)該在所有需要存儲(chǔ)的記錄總數(shù)的0.4-4倍
  18.     `apow' 跟一個(gè)key關(guān)聯(lián)的記錄數(shù),2的N次方表示.  如果不指定,默認(rèn)2^4=16.
  19.     `fpow' specifies the maximum number of elements of the free block pool by power of 2.  默認(rèn)2^10=1024.
  20.     `opts' 指定選項(xiàng),位或:`HDBTLARGE' 指定數(shù)據(jù)庫的大小通過使用64位數(shù)組桶能夠超過2G。
  21.                           `HDBTDEFLATE'  指定每個(gè)記錄被Deflate encoding壓縮。
  22.                           `HDBTBZIP' 指定每個(gè)記錄被BZIP2 encoding壓縮
  23.                           `HDBTTCBS'指定每個(gè)記錄被 TCBS encoding壓縮.

  24. B+ tree數(shù)據(jù)庫支持"mode", "lmemb", "nmemb", "bnum", "apow", "fpow", "opts", "lcnum", "ncnum", 和 "xmsiz".
  25. Fixed-length 數(shù)據(jù)庫 支持 "mode", "width", and "limsiz".
  26. Table 數(shù)據(jù)庫支持 "mode", "bnum", "apow", "fpow", "opts", "rcnum", "lcnum", "ncnum", "xmsiz", 和 "idx"
  27.       "idx"指定表的索引。
  28.     "mode"可以包含 "w" 寫, "r" 讀, "c" 創(chuàng)建, "t" 截?cái)啵?e" 無鎖,和"f" 非阻塞鎖。默認(rèn)的的mod為"wc"。
復(fù)制代碼
優(yōu)化性能

    如果使用hash數(shù)據(jù)庫我們可以指定#bnum=xxx來提高性能。xxx大于或等我我們的記錄總數(shù)。

      如果使用B+ tree數(shù)據(jù)庫我們可以通過指定"#lcnum=xxx#bnum=yyy" 來提高性能.第一個(gè)參數(shù)指定被緩存的最大葉子節(jié)點(diǎn)數(shù),受內(nèi)存容量限制,第二個(gè)參數(shù)指定桶的數(shù)量,它應(yīng)該大于總記錄數(shù)的1/128.

    如果有大量的客戶端連接,確保我們的文件描述符夠用。系統(tǒng)默認(rèn)是1024,我們可以用使用“ulimit”來重新設(shè)定



啟動(dòng)命令
  1. /usr/local/tokyotyrant/bin/ttserver -host 192.168.137.64 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch#bnum=1000000
復(fù)制代碼
如果不想這么麻煩的啟動(dòng),可以使用ttservctl簡單的命令來控制。ttservctlstart,stop,restart,hup。使用這個(gè)命令,數(shù)據(jù)庫文件位于/var/ttserver/casker.tch,log等相關(guān)文件位于/var/ttserver。
# 關(guān)閉服務(wù)
  1. cat /ttserver/ttserver.pid |  xargs  kill -TERM
復(fù)制代碼
#

配置主從的一個(gè)例子
TT服務(wù)端(主)
  1. /usr/local/tokyotyrant/bin/ttserver -port 11211 -thnum 16 -dmn -le -ulog /data/ttcache/ -ulim 128m -sid 1 -rts /data/ttcache/ttserver.rts /data/ttcache/database.tch#bnum=100000
復(fù)制代碼
TT客戶端(從)
  1. /usr/local/tokyotyrant/bin/ttserver -port 11211 -sid 1 -mhost 192.168.0.1 -mport 11211 -thnum 16 -dmn -le -ulog /data/ttcache/ -ulim 128m -rts /data/ttcache/ttserver.rts /data/ttcache/database.tch#bnum=100000
復(fù)制代碼
調(diào)用
1、任何Memcached客戶端均可直接調(diào)用tokyotyrant。
2、還可以通過HTTP方式調(diào)用,下面以Linux的curl命令為例,介紹如何操作tokyotyrant:
(1)、寫數(shù)據(jù),將數(shù)據(jù)“value”寫入到“key”中:
  1. curl -X PUT http://127.0.0.1:11211/key -d "value"
復(fù)制代碼
(2)、讀數(shù)據(jù),讀取“key”中數(shù)據(jù):
  1. curl http://127.0.0.1:11211/key
復(fù)制代碼
(3)、刪數(shù)據(jù),刪除“key”:
  1. curl -X DELETE http://127.0.0.1:11211/key
復(fù)制代碼
# 利用memcache協(xié)議存取Tokyo Tyrant

add ($key, $val, $exp = 0)
往 TT 中寫入對(duì)象,$key 是對(duì)象的唯一標(biāo)識(shí)符,$val 是寫入的對(duì)象數(shù)據(jù),$exp 為過期時(shí)間,單位為秒,默認(rèn)為不限時(shí)間;

get ($key)
從 TT 中獲取對(duì)象數(shù)據(jù),通過對(duì)象的唯一標(biāo)識(shí)符 $key 獲??;

replace ($key, $value, $exp=0)
使用 $value 替換 TT 中標(biāo)識(shí)符為 $key 的對(duì)象內(nèi)容,參數(shù)與 add() 方法一樣,只有 $key 對(duì)象存在的情況下才會(huì)起作用;

delete ($key, $time = 0)
刪除 TT 中標(biāo)識(shí)符為 $key 的對(duì)象,$time 為可選參數(shù),表示刪除之前需要等待多長時(shí)間。

下面是一段簡單的測試代碼,代碼中對(duì)標(biāo)識(shí)符為 ‘mykey’ 的對(duì)象數(shù)據(jù)進(jìn)行存取操作:

PHP代碼:
  1. //需要安裝php的memcahce擴(kuò)展 就不用包含外部memcache類文件了
  2. // 選項(xiàng)設(shè)置

  3. // 創(chuàng)建 memcache 對(duì)象實(shí)例
  4. $mc=new Memcache();
  5. $mc->addServer('127.0.0.1',11211);  //添加tt服務(wù)器端ip和端口 可以多個(gè)
  6. $mc->addServer('127.0.0.2',11211);

  7. // 設(shè)置此腳本使用的唯一標(biāo)識(shí)符
  8. $key = "mykey";
  9. // 往 TT 中寫入對(duì)象
  10. $mc->add($key, "some random strings");
  11. $val = $mc->get($key);
  12. echo "n".str_pad("$mc->add() ", 60, "_")."n";
  13. var_dump($val);
  14. // 替換已寫入的對(duì)象數(shù)據(jù)值
  15. $mc->replace($key, array("some"=>"haha", "array"=>"xxx"));
  16. $val = $mc->get($key);
  17. echo "n".str_pad("$mc->replace() ", 60, "_")."n";
  18. var_dump($val);
  19. // 刪除 TT 中的對(duì)象
  20. $mc->delete($key);
  21. $val = $mc->get($key);
  22. echo "n".str_pad("$mc->delete() ", 60, "_")."n";
  23. var_dump($val);
  24. ?>
復(fù)制代碼
#實(shí)時(shí)查看監(jiān)控?cái)?shù)據(jù)命令
  1. watch "echo stats | nc 192.168.12.6 11211"                                                               
  2. Every 2.0s: echo stats | nc 192.168.12.6 11211                                                       Thu Feb 12 18:32:57 2009
  3. STAT pid 18860
  4. STAT uptime 7973
  5. STAT time 1234434777
  6. STAT version 1.1.7
  7. STAT rusage_user 7.550852
  8. STAT rusage_system 17.756300
  9. STAT curr_items 100000
  10. STAT bytes 7398720
  11. END
  12. # 效率測試
  13. 我們用tokyotyrant自帶的工具tcrmttest,用來測試(多線程)對(duì)Tokyo Tyrant網(wǎng)絡(luò)接口的寫入、讀取移動(dòng)做效率測試。
  14. # 查看tcrmttest工具的幫助及參數(shù)
  15. cd  /usr/local/tokyotyrant/bin/
  16. ./tcrmttest
  17. ./tcrmttest: test cases of the remote database API of Tokyo Tyrant
  18. usage:
  19.   ./tcrmttest write [-port num] [-tnum num] [-nr] [-ext name] [-rnd] host rnum
  20.   ./tcrmttest read [-port num] [-tnum num] [-mul num] host
  21.   ./tcrmttest remove [-port num] [-tnum num] host
  22.   ./tcrmttest write -port 11211 192.168.137.64 100000
  23. <Writing Test>
  24.   host=192.168.137.64  port=11211  tnum=1  rnum=100000  nr=0  ext=  rnd=0
  25. ......................... (00010000)
  26. ......................... (00020000)
  27. ......................... (00030000)
  28. ......................... (00040000)
  29. ......................... (00050000)
  30. ......................... (00060000)
  31. ......................... (00070000)
  32. ......................... (00080000)
  33. ......................... (00090000)
  34. ......................... (00100000)
  35. record number: 2103120
  36. size: 1245941232
  37. time: 636.535
  38. ok
復(fù)制代碼
在已經(jīng)有2百萬數(shù)據(jù)的基礎(chǔ)上追加10萬數(shù)據(jù),2百萬數(shù)據(jù)占用數(shù)據(jù)庫文件大小約為1.2G,平均每條數(shù)據(jù)用0.00637秒,平均每秒158條記錄(該服務(wù)器為一臺(tái)1u服務(wù)器做服務(wù)器端 2G物理內(nèi)存  cpu為雙核Intel(R) Xeon(TM) CPU 2.80GHz  32位平臺(tái))。
重新配置Tokyo Tyrant一臺(tái)服務(wù)器,試試從0條數(shù)據(jù)寫入的效率(該服務(wù)器為一臺(tái)1u服務(wù)器做服務(wù)器端 2G物理內(nèi)存  cpu為雙核Intel(R) Xeon(TM) CPU 2.40GHz 32位平臺(tái))。
  1. #   ./tcrmttest write -port 11211 192.168.12.6 100000
  2. <Writing Test>
  3.   host=192.168.12.6  port=11211  tnum=1  rnum=100000  nr=0  ext=  rnd=0
  4. ......................... (00010000)
  5. ......................... (00020000)
  6. ......................... (00030000)
  7. ......................... (00040000)
  8. ......................... (00050000)
  9. ......................... (00060000)
  10. ......................... (00070000)
  11. ......................... (00080000)
  12. ......................... (00090000)
  13. ......................... (00100000)
  14. record number: 100000
  15. size: 7398720
  16. time: 6.845
  17. ok
復(fù)制代碼
平均每條插入時(shí)間為0.006845秒,每秒插入14609條記錄。
兩臺(tái)服務(wù)器硬件及負(fù)載相當(dāng),看來原有的數(shù)據(jù)庫文件大小的插入效率有很大影響,那么讀取數(shù)據(jù)的效率呢?
繼續(xù)測試。
  1. ./tcrmttest read -port 11211 192.168.12.6
  2. <Reading Test>
  3.   host=192.168.12.6  port=11211  tnum=1  mul=0  rnd=0
  4. ......................... (00010000)
  5. ......................... (00020000)
  6. ......................... (00030000)
  7. ......................... (00040000)
  8. ......................... (00050000)
  9. ......................... (00060000)
  10. ......................... (00070000)
  11. ......................... (00080000)
  12. ......................... (00090000)
  13. ......................... (00100000)
  14. record number: 100000
  15. size: 7398720
  16. time: 5.559
  17. ok
復(fù)制代碼
每秒約讀取17989條記錄。

前段時(shí)間做過一個(gè)壓力測試

名詞解釋
最大:緩存命中率約為0時(shí)的響應(yīng)時(shí)間
最?。壕彺婷新始s為100%時(shí)的響應(yīng)時(shí)間
平均:緩存命中率從0~100%的平均響應(yīng)時(shí)間
平穩(wěn):系統(tǒng)平穩(wěn)時(shí)的響應(yīng)時(shí)間(約等于最?。?/font>
數(shù)據(jù)訪問時(shí)間:從數(shù)據(jù)發(fā)起請(qǐng)求到數(shù)據(jù)下載完畢的時(shí)間間隔。
命中率:系統(tǒng)已有內(nèi)存緩存的數(shù)據(jù)與總測試數(shù)據(jù)相比的百分比。


實(shí)驗(yàn)環(huán)境硬件:
一臺(tái)pc機(jī)做TT客戶端 2G物理內(nèi)存  cpu為Intel(R) Pentium(R) 雙核核 CPU 2.40GHz  
一臺(tái)1u服務(wù)器做TT服務(wù)器端 4G物理內(nèi)存  cpu為雙核Intel(R) Xeon(TM) CPU 2.80GHz  
軟件環(huán)境:tc的數(shù)據(jù)庫大約是1.2G ,保存單元300多萬

測試方法
使用1-1000000寫入的key的對(duì)應(yīng)value值,通過Tokyo Tyrant的http網(wǎng)絡(luò)接口,組合URL,通過LoadRunner模擬大并發(fā)訪問該URL。

結(jié)論
不同并發(fā)對(duì)數(shù)據(jù)訪問時(shí)間的長短影響比較明顯,并發(fā)數(shù)越高數(shù)據(jù)訪問時(shí)間越長。根據(jù)測試中的平均時(shí)間數(shù)據(jù)與平穩(wěn)時(shí)間數(shù)據(jù)之比,預(yù)計(jì)用戶查詞未命中內(nèi)存緩存訪問時(shí)間是未命中內(nèi)存緩存數(shù)據(jù)訪問時(shí)間的3倍左右。該架構(gòu)性能良好,在測試中為發(fā)現(xiàn)有效服務(wù)器錯(cuò)誤。


測試數(shù)據(jù),在內(nèi)存緩存命中率100%下平穩(wěn)數(shù)據(jù)訪問時(shí)間
2000并發(fā)平穩(wěn)數(shù)據(jù)訪問時(shí)間為0.31秒,1000并發(fā)時(shí)為0.19秒。
tt的接口沒有顯示并發(fā)數(shù)的功能
我用的方法 watch "netstat -ant |grep 192.168.xx.xx:11211 |wc -l"

本文部分資料來源于 特此致謝
http://blog.s135.com/post/362.htm
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服