存储在 apache 中的键值对如何点燃?

How are the key-value pairs stored in apache ignite?

对于下面的缓存实现,我有相当大的放置和删除操作吞吐量。

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);

缓存数据结构。

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

为什么上述实施的吞吐量会降低?

字符串不是用作键的最佳类型。每次读取或更新条目时,Ignite 都会计算密钥哈希码,然后检查是否相等。字符串的等于检查意味着对所有字符的迭代,这显然比比较单个双精度值更糟糕,并且对于更长的字符串也会变得更糟。

以上内容实际上适用于任何哈希映射,不仅适用于 Ignite。