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

时间:2017-07-02 07:02:23

标签: c++ ignite in-memory

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

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 个答案:

答案 0 :(得分:1)

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

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