java caching jooq

java - jOOQ y almacenamiento en caché?



caching (2)

Sí lo harás. jOOQ es solo una forma segura de hacer tipo de SQL y no hace ningún almacenamiento en caché.

Estoy considerando mudarme de Hibernate a jOOQ, pero no estoy seguro si puedo prescindir del almacenamiento en caché. Hibernate tiene un caché de primer y segundo nivel . Sé que jOOQ tiene soporte para reutilizar declaraciones preparadas .

¿Tendré que guardarme el caché solo si uso jOOQ?


Caché de consultas / almacenamiento en caché de resultados:

Menciono esto, porque este tipo de caché también es posible con Hibernate , y podría tener sentido bajo ciertas circunstancias.

En Hibernate, el caché de consultas funciona estrechamente con el caché de segundo nivel. En jOOQ, puede implementar un caché de consultas que intercepta todas las consultas utilizando la API jOOQ VisitListener . Hay algunos artículos de blog sobre este tema:

Habrá un mejor soporte para este tipo de caché en el futuro (no en jOOQ 3.7, aún), ya que este tipo de caché pertenece a una API de SQL. Tenga en cuenta que su controlador JDBC también podría admitir este tipo de caché, por ejemplo, ojdbc.

Almacenamiento en caché de primer nivel:

La idea detrás de la memoria caché de primer nivel de Hibernate no tiene sentido con una API más orientada a SQL como jOOQ. SQL es un lenguaje altamente complejo que funciona entre las entidades realmente persistentes y su representación de cliente de las mismas entidades. Esto significa que una vez que use SQL, probablemente creará tuplas ad-hoc que no tienen nada que ver con la representación de la entidad original de sus datos.

En otras palabras: el almacenamiento en caché de primer nivel es algo que solo es posible si limita la funcionalidad y el alcance de su lenguaje de consulta, y si toma el control de TODAS las interacciones de su base de datos, tal como lo hace Hibernate. jOOQ expresamente no hace eso.

Almacenamiento en caché de segundo nivel:

La memoria caché de segundo nivel en Hibernate es una caché que es principalmente útil con datos maestros y tipos similares de datos donde la obtención de datos de la base de datos casi nunca tiene sentido, ya que los datos no cambian.

No hay ninguna razón en absoluto, por qué un ORM debe implementar este tipo de caché, por conveniencia en casos simples. Pero en muchos casos, es mejor anotar un método de servicio con @Cacheable , por ejemplo, como se documenta aquí en esta página de Spring . Esta sería una memoria caché en una capa más alta que en la capa ORM / query, donde podrá correlacionar el almacenamiento en caché mucho más estrechamente con su lógica de negocio.