Стоит ли кэширование для огромного количества данных? - PullRequest
0 голосов
/ 27 июня 2019

Предположим, что у нас есть данные пары ключ-значение 500TB. Мы можем использовать 2.5TB памяти для кэширования этих пар для будущих запросов. Запросы несколько случайные.

The probability of cache hit would be 2.5/500 = 0.5%

Я знаю, что частота попаданий может увеличиваться со временем, если мы используем вытеснение LFU, поскольку со временем все чаще ключи остаются в кеше, увеличивая частоту обращений в кеш.

Таким образом, если пропускная способность чтения системы из хранилища 10K QPS, то использование кэша повысит скорость на 0.05% (без учета времени поиска в памяти).

Тогда пропускная способность будет 10,050 QPS.

Насколько эффективно использовать кеш в этом случае?

Должны ли мы идти без кеша?

UPDATE

Я думаю, что здесь произошла ошибка. Если у нас будет 100% попадание, то пропускная способность будет 1MQPS. Если у нас 0% попаданий, то пропускная способность будет 10KQPS.

При коэффициенте попадания 0,5% (в предположении линейного отношения) доходность составляет

(0.5*(1M-10K)/100)+10K = 14950 QPS 

Это увеличение пропускной способности на 50%.

1 Ответ

1 голос
/ 27 июня 2019

«Каким-то образом случайным» является ключом.

Если запрос действительно случайный, кеш вряд ли поможет. Ваша логика верна. Но в реальных системах оказывается, что многие хранилища данных имеют неоднородные, сильно коррелированные шаблоны доступа.

Это все еще верно для огромных объемов данных. Неважно, сколько всего данных. Просто важно, как мало нужно часто.

[править] Обновление не имеет смысла. Вы усредняете скорости там, но вам нужно усреднить время операций.

...