2017-07-02 59 views
-1

對於下面的緩存實現,我有一個相當大的吞吐量,用於放置和移除操作。apache中存儲的鍵值對如何被點燃?

Cache<double , CacheData> lCache = gGrid.GetOrCreateCache<double, CacheData>("myCache"); 

當我使用字符串作爲鍵時,吞吐量有10倍的劇烈減少。

Cache<string , CacheData> lCache = gGrid.GetOrCreateCache<string, CacheData>("myCache"); 

的鍵值對,我正在填充在下面執行

double lKey=111111111111111; 
CacheData lCacheData; 
string lKeyStr; 
std::ostringstream strs; 
strs << (lKey+=mIncrement); 
lKeyStr = strs.str(); 
cache.Put(lKeyStr,lCacheData); 

CacheData結構。

namespace ignite 
{ 
     struct CacheData 
     { 
       CacheData() : 
         data() 
       { 
        data.assign(2048, 'a'); 
       } 
       std::string data; 
     }; 
} 

爲什麼上述實現的吞吐量會有所下降?

回答

1

字符串不是用作鍵的最佳類型。每次讀取或更新條目時,Ignite會計算關鍵哈希碼,然後檢查相等性。對字符串進行等於檢查意味着對所有字符進行迭代,這顯然比比較單個double值更差,並且對於更長的字符串也會變得更糟。

以上實際上對任何哈希映射都是如此,而不僅僅是Ignite。

+0

謝謝瓦倫丁。 –