Каковы последствия высокого значения кэша строк? - PullRequest
1 голос
/ 21 марта 2019

Недавно я прошел учебник по кешированию ключей и кешу строк.Может ли кто-нибудь помочь мне с примерами в реальном времени, где эти кэши могут повлиять?И как это повлияет, если мы увеличим эти значения в файле конфигурации?

При использовании таблицы desc я нашел это

AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'

1 Ответ

0 голосов
/ 26 марта 2019

Ваша основная проблема - профиль памяти вашего приложения.

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

enter image description here

Кэш ключей - Кэш ключей включен по умолчанию, поскольку он хранит только ключ строки. Ключи обычно меньше по сравнению с остальной частью строки, поэтому этот кэш может содержать много записей, прежде чем он будет исчерпан.

Кэш строк - Кэш строк содержит всю строку и полезен при наличии довольно статического шаблона запросов. Аргумент для кэша строк заключается в том, что если вы читаете одни и те же строки снова и снова, вы можете просто хранить их в памяти, а не переходить на уровень SSTable (носитель данных) и, таким образом, обходить дорогостоящий поиск на пути чтения. На практике замедление памяти, вызванное использованием кэша строк в неоптимальных случаях использования, делает его непопулярной функцией.

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

А как насчет очень высоких значений кэша? Здесь есть лучшие альтернативы, об этом позже. Увеличение размера кэша строк может привести к проблемам с сборкой мусора, которые, в зависимости от того, что вы делаете, обычно приводят к общему снижению производительности.

Одна идея, которую я видел относительно хорошо используемой, - это наличие слоя кэширования поверх Cassandra, такого как Apache Ignite или Memcached. Вы загружаете горячие данные в слой кэширования, чтобы получить быстрые ЧТЕНИЯ, и пишете с помощью приложения, которое записывает данные в слой кэша, а затем в C * для сохранения. Эти архитектуры имеют множество собственных проблем, но если вы хотите кэшировать данные для меньших задержек запросов, кеш строк C * не лучший инструмент для этой работы.

...