escalado: cómo CQRS con EventSourcing optimiza la lectura/escritura

CorePress2024-01-24  11

Por lo que entiendo, CQRS & Los ES están ahí para ayudarnos a optimizar las operaciones de lectura y escritura de forma independiente. Cuando utilizamos bases de datos separadas para lectura/escritura, podemos configurar índices apropiados en la base de datos de lectura para que la lectura sea eficiente y también podamos guardar datos rápidamente en almacenes de eventos con el costo de una eventual coherencia.

Este es mi problema: si los datos de ambas bases de datos deben sincronizarse, escribir en la base de datos de lectura hace que los índices se reconstruyan y, por lo tanto, puede bloquear nuestras lecturas.

Mi impresión es que entra en conflicto con la idea de leer/escribir de forma independiente. ¿Cuál es la ganancia de guardar datos rápidamente en el almacén de eventos, cuando al final guardar para leer la base de datos es más largo, por lo que en realidad no estamos escalando las operaciones de lectura y escritura de forma independiente? Tal vez me estoy perdiendo algo, todavía estoy aprendiendohablando sobre estos patrones.

PD. El inglés es mi segundo idioma, lamento haber cometido algún error.



------------------------------------

Según mi experiencia con CQRS, le brinda flexibilidad en el uso de múltiples técnicas y tecnologías que mejoran el rendimiento, según sus requisitos.

Ejemplo:

Para la parte de comando de CQRS, puede usar ORM avanzado como EF Core, Mientras que para la parte de consulta, puede usar Micro ORM como Dapper (más rápido) o ADO.NET (incluso más rápido).

Otro ejemplo sobre cómo diseñar la Base de Datos:

Diseñas una base de datos para Transacciones de Comando (Normalizada) Otra base de datos sincronizada para Query (desnormalizado) proporciona un mejor rendimiento en el lado de la consulta.

También tienes muchas opciones de cómo sincronizar entre Bases de Datos

Así podrás ser flexible a la hora de mejorar el rendimiento.



------------------------------------

No estoy seguro de cuál es exactamente tu pregunta, pero intentaré exponer mi opinión aquí.

Si las bases de datos para lectura/escritura están completamente separadas, por definición no se afectarán entre sí. Usar CQRS de esta manera significa que podemos escalar las operaciones de lectura/escritura de forma independiente.

Sin embargo, puede pasar algún tiempo antes de que una actualización se propague al modelo de lectura y esté disponible.Etiqueta para realizar consultas a un cliente. Ese es el costo que usted paga por diseñar un sistema distribuido eventualmente consistente.

El mecanismo de sincronización entre el modelo de escritura y el modelo de lectura puede diferir entre las implementaciones. Sin embargo, en un sistema CQRS distribuido, el modelo de lectura eventualmente es consistente con el modelo de escritura por diseño, por lo que no están sincronizados en todo momento. El modelo de lectura siempre se está poniendo al día y, a veces, tendrá toda la información.

Espero que eso responda a tu pregunta.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare