Кеширование с Kotlin Exposed?
Мне интересно, как добавить кэширование при использовании библиотеки Kotlin-Exposed для доступа к SQL.
Для экспериментов я написал небольшое приложение, использующее Spring Boot + Hibernate и KTOR + Exposed.
Я провел некоторое нагрузочное тестирование, и при выполнении POSTing для обеих версий приложения производительность довольно схожа с версией KTOR + Exposed, имеющей преимущество.
Однако при получении существующей записи из обеих версий разница шокирует, особенно когда база данных увеличивается - и все время в Postgres. Мой вывод заключается в том, что разница может заключаться только в кэшировании второго уровня Hibernate, которое настраивает Spring Boot.
Видя значение кэширования для элементов, которые неоднократно запрашиваются в нескольких транзакциях / сеансах, мне интересно, как настроить это в низкоуровневой структуре Exposed?
1 ответ
На данный момент Exposed поддерживает только уровень каждой транзакции.
Также есть ImmutableCachedEntityClass
который позволяет вам определять некоторые сущности (в основном словарь) как кешируемые и делиться ими между приложениями. Вы должны управлять аннулированием кэша вручную с помощью expireCache()
функционировать или актуализировать объекты с forceUpdateEntity
,
Правильное кэширование в эпоху распределенных систем не так легко реализовать. Вы можете использовать любую библиотеку кеширования (например, кофеин) и аннулировать кеш, если вы знаете, когда ваши данные изменяются (возможно, с помощью Exposed. StatementInterceptor
с).
Если вы сможете реализовать хорошее решение для кэширования, не стесняйтесь отправлять PR в проект.