Pregunta

¿Sería una buena idea usar Terracotta como una solución de persistencia (reemplazando una base de datos)? Me pregunto específicamente sobre problemas de integridad de datos y soporte para sistemas transaccionales.

¿Fue útil?

Solución

Terracota es transaccional (bloques sincronizados forma transacciones de objetos modificados) pero no es y no quiere ser compatible con JTA. Hay una discusión bastante extensa sobre las transacciones y algunas ideas falsas comunes sobre Terracota aquí .

Escribí una publicación de blog sobre la vida útil de los datos y cómo eso debería enmarcar su pensamiento sobre la identificación de oportunidades para el uso de terracota. En resumen, el punto óptimo de la terracota es el caso de uso donde necesita persistencia y disponibilidad (su aplicación podría fallar pero aún necesita los datos) pero donde los datos no son necesariamente críticos a largo plazo.

Un ejemplo canónico son los datos importantes en el contexto de una sesión de usuario en una aplicación web, como la información del carrito de compras. Desea mantener esos datos persistentes para que si su aplicación web falla, mantenga el carrito de compras. Pero el carro en sí puede o no ser comprado. Por lo tanto, lo almacena en terracota hasta que se compra, luego lo guarda en la base de datos como "sistema de registro". datos.

Históricamente, los datos que almacenó en una base de datos siempre fueron "sistema de registro" datos que fueron críticos para el éxito a largo plazo de su negocio: clientes, pedidos, etc. Con la actual "apátrida" arquitecturas (que realmente no son apátridas), trasladamos todos los datos a medio plazo a la base de datos. Esto significa que estamos castigando innecesariamente nuestra base de datos (con trabajo y almacenamiento adicionales) y nuestros desarrolladores (que tienen que manejar la falta de coincidencia de impedancia relacional del objeto, incluso si se usa ORM). Un mejor enfoque es dejarlo en objetos y agruparlo con terracota. Varios usuarios recientes de terracota han utilizado esta técnica para reducir significativamente la huella de su base de datos (ahorrándoles millones de dólares) y al mismo tiempo aumentar su capacidad de escalar.

Existe la cuestión del punto de integración con la base de datos y cómo realizar la transferencia de manera confiable. Vimos esto como un caso de uso en la Examinator (una aplicación web de referencia Spring / Terracotta / Tomcat / MySql) recientemente lanzada. . Cuando los exámenes están en progreso, el estado (respuestas a las preguntas, órdenes de elección aleatorias, preguntas marcadas para revisión) se almacena en Terracota. Pero cuando se completan los exámenes, la puntuación resultante se calcula y almacena a largo plazo en la base de datos.

Para hacer esto de manera segura, usamos una estrategia de clave de Hibernate que genera la identificación de la fila de la base de datos en el objeto en Terracota primero, luego guarda los datos en la base de datos, luego los elimina de la Terracota. Este escenario tiene una posible condición de carrera si la aplicación se bloquea después de guardarla en la base de datos pero antes de eliminarla de Terracotta. En ese caso, la aplicación podría intentar volver a guardar los datos en la base de datos, posiblemente creando dos filas. Pero debido a la ID pregenerada, podemos saber si la fila se escribió correctamente o no y evitar ese problema.

En resumen, no creo que Terracotta reemplace su base de datos en el corto plazo. Es demasiado nuevo desde el punto de vista operativo como para ser considerado como tal en la mayoría de las tiendas. El modelo de uso es muy diferente. No hay capacidad de consulta o SQL en el montón (su capacidad de consulta está definida por su modelo de objeto). Creo que puede y está comenzando a reemplazar el uso de datos a medio plazo, donde es una alternativa mucho más barata y fácil. Sin embargo, algunas personas están comenzando a experimentar con el almacenamiento a largo plazo.

Otros consejos

Terracota es solo Java. Si está bien que esté bloqueado en esta tecnología, sin la posibilidad de escribir algunos scripts (sin la JVM) en otros idiomas, vaya con ellos.

El artículo Mata tu base de datos con terracota fue realmente agradable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top