<ruby id="rxdll"></ruby><strike id="rxdll"></strike>

    <rp id="rxdll"></rp>
      <del id="rxdll"><meter id="rxdll"></meter></del>
      <pre id="rxdll"><font id="rxdll"></font></pre>
        <pre id="rxdll"></pre>
      <p id="rxdll"><thead id="rxdll"></thead></p><dl id="rxdll"><progress id="rxdll"><form id="rxdll"></form></progress></dl>

      <ol id="rxdll"><thead id="rxdll"><track id="rxdll"></track></thead></ol>
      <i id="rxdll"><dfn id="rxdll"></dfn></i>
      <font id="rxdll"><meter id="rxdll"></meter></font>

        <mark id="rxdll"><dfn id="rxdll"></dfn></mark>
        • 軟件測試技術
        • 軟件測試博客
        • 軟件測試視頻
        • 開源軟件測試技術
        • 軟件測試論壇
        • 軟件測試沙龍
        • 軟件測試資料下載
        • 軟件測試雜志
        • 軟件測試人才招聘
          暫時沒有公告

        字號: | 推薦給好友 上一篇 | 下一篇

        php一致性hash性能測試(flexihash/memcache/memcached)

        發布: 2011-2-09 10:18 | 作者: 網絡轉載 | 來源: 領測軟件測試網采編 | 查看: 111次 | 進入軟件測試論壇討論

        領測軟件測試網

          php一致性hash性能測試(flexihash/memcache/memcached)

          一致性hash的使用在PHP中有三種選擇分別是原生的memcache擴展,memcached擴展,還有一個是網上比較流行的flexihash類。

          最近有項目需要使用flexihash類操作memcacheq,想看看,單純使用php的flexihash一致性hash,分布均勻程度,性能差多少。

          php一致性hash類下載地址:http://code.google.com/p/flexihash/

          測試環境:I7 四核 LINUX FEDORA 使用linux英文詞庫作為測試用例 memcached開啟4個線程

          測試結果:

          其中,單節點指的是,在只有一個節點工作情況下的,測試結果。

          小結

          如上所示,就memcache擴展與memcached擴展比較來看,在當全部節點工作正常的時候,測試條件memcached略快,但基本可以忽略不計。當只有單節點正常工作的時候,memcached擴展性能比 memcache快,我想可能是因為,memcached擴展在檢測到連接無效的時候,沒有再進行連接測試,直接將數據hash到連接有效的節點。當然這個只是猜測,需要看源碼才能理解。

          48萬條數據操作,使用flexihash做一致性hash與使用擴展一致性hash,在hash這個過程中,速度仍舊在一個數量級上,大約是使用擴展速度的一半,其效率可以接受。在分布均勻性上,兩個擴展分布基本比較均勻,在使用flexihash不使用虛擬節點時候,分布非常不均勻,在使用16個虛擬節點后,分布均勻性已經接近擴展了。在使用虛擬節點后, set速度相比較沒使用時候略慢,get操作反而變快。

          下面給出測試源碼

          flexihash一致性hash測試

          view source

        print?
        01 require_once 'flexihash.php';
        02 Class FMemcache
        03 {
        04   
        05     public $hash = null;
        06     public $memcache = null;
        07     public $connectPool = null;
        08   
        09     public function __construct()
        10     {
        11         $this->hash = new Flexihash();
        12     }
        13   
        14     public function addServers( $servers )
        15     {
        16         foreach ($servers as $server)
        17         {
        18             $node = $server['host'] . ':' . $server['port'];
        19             $this->connectPool[$node] = false;
        20             $targets[] = $node;
        21         }
        22         $this->hash->addTargets( $targets );
        23     }
        24   
        25     public function set( $key, $value )
        26     {
        27         $nodes = $this->hash->lookupList( $key, count( $this->connectPool ) );
        28         foreach ($nodes as $node)
        29         {
        30             if (!$this->connectPool[$node])
        31             {
        32                 $server = explode( ':', $node );
        33                 $this->connectPool[$node] = @memcache_connect( $server[0], $server[1] );
        34             }
        35             if ($this->connectPool[$node])
        36             {
        37                 if (memcache_set( $this->connectPool[$node], $key, $value ))
        38                 {
        39                     return true;
        40                 }
        41             }
        42         }
        43         return false;
        44     }
        45   
        46     public function get( $key )
        47     {
        48         $nodes = $this->hash->lookupList( $key, count( $this->connectPool ) );
        49         foreach ($nodes as $node)
        50         {
        51             if (!$this->connectPool[$node])
        52             {
        53                 $server = explode( ':', $node );
        54                 $this->connectPool[$node] = @memcache_connect( $server[0], $server[1] );
        55             }
        56             if ($this->connectPool[$node])
        57             {
        58                 if (memcache_get( $this->connectPool[$node], $key ))
        59                 {
        60                     return true;
        61                 }
        62             }
        63         }
        64         return false;
        65     }
        66   
        67 }

          測試代碼:

          view source

        print?
        01 require_once 'flexihash_memcache.php';
        02 require_once 'Config.php';
        03 $st = microtime( true );
        04 $mem = new FMemcache();
        05 $mem->addServers( $tt_server_pool );
        06 $wordAmount = 0;
        07 $getCount = 0;
        08 foreach ($words as $word)
        09 {
        10     if (empty( $word ))
        11     {
        12         continue;
        13     }
        14     $inc = $mem->set( $word, $word );
        15 }
        16 $et = microtime( true ) - $st;
        17 echo "time used:" . $et;

        延伸閱讀

        文章來源于領測軟件測試網 http://www.k11sc111.com/


        關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
        版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
        北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
        技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

        軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

        国产女主播精品_国产片婬乱18一级毛片视频_国产午夜激无码av毛片不卡_国产精品欧美久久久天天影院
          <ruby id="rxdll"></ruby><strike id="rxdll"></strike>

          <rp id="rxdll"></rp>
            <del id="rxdll"><meter id="rxdll"></meter></del>
            <pre id="rxdll"><font id="rxdll"></font></pre>
              <pre id="rxdll"></pre>
            <p id="rxdll"><thead id="rxdll"></thead></p><dl id="rxdll"><progress id="rxdll"><form id="rxdll"></form></progress></dl>

            <ol id="rxdll"><thead id="rxdll"><track id="rxdll"></track></thead></ol>
            <i id="rxdll"><dfn id="rxdll"></dfn></i>
            <font id="rxdll"><meter id="rxdll"></meter></font>

              <mark id="rxdll"><dfn id="rxdll"></dfn></mark>