2017-07-02 62 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

谢谢瓦伦丁。 –