Кеширование с Kotlin Exposed? - PullRequest
0 голосов
/ 12 ноября 2018

Мне интересно, как добавить кэширование при использовании библиотеки Kotlin-Exposed для доступа к SQL.

Для экспериментов я написал небольшое приложение, использующее Spring Boot + Hibernate и KTOR + Exposed.

Я провел некоторое нагрузочное тестирование, и при выполнении POSTing для обеих версий приложения производительность довольно схожа с версией KTOR + Exposed, имеющей преимущество.

Однако при получении существующей записи из обеих версий разница шокирует, особенно когда база данных увеличивается - и все время в Postgres. Мой вывод заключается в том, что разница может заключаться только в кэшировании второго уровня Hibernate, которое настраивает Spring Boot.

Видя значение кэширования для элементов, которые неоднократно запрашиваются в нескольких транзакциях / сессиях, мне интересно, как настроить это в низкоуровневой структуре Exposed?

1 Ответ

0 голосов
/ 19 ноября 2018

На данный момент Exposed поддерживает только уровень транзакции.

Кроме того, есть ImmutableCachedEntityClass, который позволяет вам определять некоторые объекты (в основном словарные) как кэшированные и делиться ими между приложениями. Вы должны управлять аннулированием кэша вручную с помощью функции expireCache() или актуализировать объекты с помощью forceUpdateEntity.

Правильное кэширование в эпоху распределенных систем не так просто реализовать. Вы можете использовать любую библиотеку кэширования (например, кофеин ) и сделать кеш недействительным, если знаете, когда изменяются ваши данные (возможно, с помощью Exposed StatementInterceptor s).

Если вы сможете реализовать хорошее решение для кэширования, не стесняйтесь отправлять PR в проект.

...