Как пары ключ-значение, хранящиеся в apache, воспламеняются?

Для приведенной ниже реализации кэша у меня есть значительная пропускная способность для операций put и remove.

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 вычисляет ключевой хэш-код, а затем проверяет равенство. Проверка на равенство для строки подразумевает итерацию по всем символам, что, очевидно, хуже, чем сравнение одного двойного значения, а также ухудшается для более длинных строк.

Вышесказанное действительно верно для любой хэш-карты, а не только для Ignite.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]