Кеширование с 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 в проект.

Другие вопросы по тегам