<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

    Redis和Ssdb讀取性能對比

    最近關注了一下ssdb,它的特點是基于文件存儲系統(tǒng)所以它支撐量大的數(shù)據(jù)而不因為內(nèi)存的限制受取約束.從官網(wǎng)的測試報告來看其性能也非常出色和redis相當,因此可以使用它來代替redis來進行k-v數(shù)據(jù)業(yè)務的處理.想法總是美好的,不過現(xiàn)實中就可能帶點骨感.
      幸好ssdb是兼容redis的部份協(xié)議,所以直接用redis client庫就可以進行一個壓力測試.以于針對Redis和ssdb的幾個讀操進行一個簡單的性能測試對比,這個測試不是直接在本機調(diào)用Redis和ssdb. 而是通過一個程序在別的服務器上調(diào)用.測試指令(get,hget,lregion)以下是測試結(jié)果截圖
    class Test
    {
    long mCount = 0;
    long mIndex = 0;
    private bool mRuning = true;
    public long Count
    {
    get
    {
    return mCount;
    }
    }
    public void Execute()
    {
    Console.WriteLine("* -----------------------------------------------");
    Console.WriteLine("* redis get");
    ConsoleWait.Start();
    string result = OnTest(Config.RedisClient,GetHandler);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* ssdb get");
    ConsoleWait.Start();
    result = OnTest(Config.SSDBClient, GetHandler);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* -----------------------------------------------");
    //
    Console.WriteLine("* redis lregion[1-2]");
    ConsoleWait.Start();
    result = OnTest(Config.RedisClient, LRegionHandler1TO2);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* ssdb lregion[1-2]");
    ConsoleWait.Start();
    result = OnTest(Config.SSDBClient, LRegionHandler1TO2);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* -----------------------------------------------");
    //
    Console.WriteLine("* redis lregion[50-60]");
    ConsoleWait.Start();
    result = OnTest(Config.RedisClient, LRegionHandler1TO2);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* ssdb lregion[50-60]");
    ConsoleWait.Start();
    result = OnTest(Config.SSDBClient, LRegionHandler1TO2);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* -----------------------------------------------");
    //
    Console.WriteLine("* redis lregion[100-110]");
    ConsoleWait.Start();
    result = OnTest(Config.RedisClient, LRegionHandler1TO2);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* ssdb lregion[100-110]");
    ConsoleWait.Start();
    result = OnTest(Config.SSDBClient, LRegionHandler1TO2);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* -----------------------------------------------");
    //
    Console.WriteLine("* redis hget");
    ConsoleWait.Start();
    result = OnTest(Config.RedisClient, HGetHandler);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* ssdb hget");
    ConsoleWait.Start();
    result = OnTest(Config.SSDBClient, HGetHandler);
    ConsoleWait.End();
    Console.WriteLine(result);
    Console.WriteLine("* -----------------------------------------------");
    }
    private void HGetHandler(RedisClient e)
    {
    while (mRuning)
    {
    long index = System.Threading.Interlocked.Increment(ref mIndex);
    ProtobufKey key = "user_" + Data.Import.Users[(int)(index % Data.Import.Users.Count)].Name;
    key.Get<Model.Order, Model.Employee, Model.Customer>(e);
    System.Threading.Interlocked.Increment(ref mCount);
    }
    }
    private void LRegionHandler1TO2(RedisClient e)
    {
    while (mRuning)
    {
    ProtobufList<Model.Order> list = "Orders";
    list.Range(1, 2, e);
    System.Threading.Interlocked.Increment(ref mCount);
    }
    }
    private void LRegionHandler50TO60(RedisClient e)
    {
    while (mRuning)
    {
    ProtobufList<Model.Order> list = "Orders";
    list.Range(50, 60, e);
    System.Threading.Interlocked.Increment(ref mCount);
    }
    }
    private void LRegionHandler100TO110(RedisClient e)
    {
    while (mRuning)
    {
    ProtobufList<Model.Order> list = "Orders";
    list.Range(100, 110, e);
    System.Threading.Interlocked.Increment(ref mCount);
    }
    }
    private  void GetHandler(RedisClient e)
    {
    while (mRuning)
    {
    long index = System.Threading.Interlocked.Increment(ref mIndex);
    ProtobufKey key = "user_" + Data.Import.Users[(int)(index % Data.Import.Users.Count)].Name;
    key.Get<Model.User>(e);
    System.Threading.Interlocked.Increment(ref mCount);
    }
    }
    private string OnTest(RedisClient client,Action<RedisClient> handler)
    {
    mCount = 0;
    mRuning = true;
    for (int i = 0; i < 20; i++)
    {
    System.Threading.ThreadPool.QueueUserWorkItem((o) =>
    {
    GetHandler((RedisClient)o);
    }, client);
    }
    int s = 20;
    while (s > 0)
    {
    System.Threading.Thread.Sleep(1000);
    s--;
    }
    mRuning = false;
    System.Threading.Thread.Sleep(1000);
    return string.Format("* [seconds:{1}/total:{0}]", mCount, mCount / 20);
    }
    }
      從測試結(jié)果看來差距還是非常明顯,并不象官網(wǎng)那樣說得這么理想.雖然SSDB效率上不如REDIS,但其基于磁盤存儲有著其最大的優(yōu)勢,畢竟很多業(yè)務數(shù)據(jù)遠超過服務器內(nèi)存的容量.
      SSDB的測試結(jié)果不理想也許是硬件環(huán)境受限,如果有個SSD硬盤的測試環(huán)境估計也得到一個更好的結(jié)果,但在測試過程中發(fā)現(xiàn)一個問題就是SSDB占用的CPU資源也是非常大的,在以上測試過程SSDB的并發(fā)效率比不上REDIS,同時CPU損耗上基本要比REDIS高出一倍的樣子.
      以上測試結(jié)果緊緊是是一些情況下的性能測試對比,不能完全表述出兩者在應用的差距的結(jié)果,如果需要用到這些產(chǎn)品的同學不防在實施前進行一些測試為實施選擇提供一個更可靠的結(jié)果.
     

    posted on 2014-08-27 10:19 順其自然EVO 閱讀(350) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

    <2014年8月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 色视频在线观看免费| 国产精品亚洲精品青青青| 亚洲avav天堂av在线网毛片| 麻豆精品不卡国产免费看| 亚洲国产精品碰碰| 亚洲AV日韩AV一区二区三曲| 久草在视频免费福利| 内射少妇36P亚洲区| 成人久久免费网站| 亚洲熟妇av一区二区三区| 一出一进一爽一粗一大视频免费的| 国产成人精品男人免费| 亚洲依依成人亚洲社区| 美女被免费视频网站a国产| 亚洲视频无码高清在线| 大香人蕉免费视频75| 亚洲色大成网站www| 国产色婷婷精品免费视频| 爱情岛亚洲论坛在线观看 | 亚洲成?Ⅴ人在线观看无码| 高清免费久久午夜精品| 亚洲欧洲日产国码无码网站| 色www永久免费| 亚洲色av性色在线观无码| 91视频国产免费| 色吊丝免费观看网站| 亚洲啪啪综合AV一区| 100部毛片免费全部播放完整| 亚洲免费网站在线观看| 国产免费资源高清小视频在线观看| 亚洲AV无码一区二区三区牲色| 亚洲男人的天堂一区二区| 久久久国产精品无码免费专区| 亚洲一级片在线播放| 久久精品亚洲福利| 每天更新的免费av片在线观看| 亚洲 欧洲 自拍 另类 校园| 亚洲精品视频在线观看你懂的| 99久久免费观看| 免费无遮挡无遮羞在线看| 亚洲综合在线成人一区|