2017-07-02 4 views
-1

以下のキャッシュ実装では、put操作とremove操作でかなりのスループットがあります。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

ありがとうバレンタイン。 –

関連する問題