2017-07-02 5 views
-1

Pour l'implémentation de cache ci-dessous, j'ai un débit considérable pour les opérations de mise et de suppression. Lorsque j'utilise une chaîne comme clé, il y a une réduction très importante d'environ 10 fois le débit.Comment les paires valeur/clé stockées dans Apache s'enflamment-elles?

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

La paire valeur-clé que je suis peuplant est dans la mise en œuvre ci-dessous

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

Structure CacheData.

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

Pourquoi y a-t-il une réduction du débit pour l'implémentation ci-dessus?

Répondre

1

La chaîne n'est pas le meilleur type à utiliser comme clé. Chaque fois que vous lisez ou mettez à jour une entrée, Ignite calcule le code de hachage de la clé, puis vérifie l'égalité. La vérification égale de la chaîne implique une itération sur tous les caractères, ce qui est évidemment pire que la comparaison d'une seule valeur double, et s'aggrave également pour les chaînes plus longues. Ce qui précède est réellement vrai pour toute carte de hachage, non seulement pour Ignite.

+0

Merci Valentin. –