存储在 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。
对于下面的缓存实现,我有相当大的放置和删除操作吞吐量。
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。