2012-02-07 10 views
27

No estoy muy seguro de haber entendido lo que es un Almacén de eventos, lo consideré como un tipo de "Transactionlog" para Domainobjects. ¿Cuáles son las ventajas/desventajas de esto y cuáles son los buenos escenarios para usarlo y cuándo no debería usarse?Cuándo usar un Almacén de eventos

EDIT:

Dado que se me puede pedir demasiado, yo sería feliz si habría un escenario "simple" cuándo utilizar un EventStore y cuando no? En otras palabras: ¿es posible describir los 2 escenarios en algunas oraciones o necesito leer 5 libros para entenderlo?

Respuesta

42

Sí, la obtención de eventos es como un registro de transacciones para los objetos de su dominio y el registro de transacciones es la fuente autorizada de todos sus datos. Es posible que tenga copias de los datos en otros formularios diseñados para facilitar la consulta, pero no son más que copias que se pueden eliminar y reconstruir en cualquier momento. El registro de transacciones es la única fuente de verdad.

Estoy de acuerdo con Craig que es difícil responder a su pregunta de manera sucinta, porque es muy dependiente del contexto, pero aquí hay una breve lista de razones por las que podría considerar el uso de un almacén de eventos:

  • Usted se preocupa por hacer análisis histórico complejo de sus datos. Por ejemplo, alguien podría acudir a usted en el futuro y preguntarse: "¿Cuántos de nuestros clientes colocaron un artículo en su carrito de compras, luego lo sacaron, pero después de que les enviamos un cupón, volvimos y lo compramos?" Puede haber un suministro interminable de tales preguntas de BI y no puede anticiparlas todas por adelantado. Si captura todos los eventos en el sistema, puede reconstruir la respuesta a cualquier pregunta futura.
  • Del mismo modo, le importa auditar y ser capaz de demostrar sin ninguna duda quién cambió qué datos en qué momento y por qué. Su tienda de eventos es su registro de auditoría.
  • Le importa tener un sistema altamente escalable. Dado que el modelo de escritura de una tienda de eventos es de solo conexión, puede ser adecuado para aplicaciones de gran volumen. Debido a que no es intrínsecamente relacional, generalmente se puede dividir fácilmente.

Por otro lado, hay algunas buenas razones para no hacerlo:

  • Usted no tiene ninguna de las necesidades mencionadas anteriormente.
  • No desea lidiar con la molestia de tener que crear herramientas de depuración para poder ver y modificar fácilmente los datos en el almacén de eventos.
  • Está construyendo un proyecto efímero que no espera tener por mucho tiempo, por lo que no desea invertir una tonelada de esfuerzo de arquitectura en él.
  • No está preparado para aprender CQRS, DDD y EDA al mismo tiempo que el abastecimiento de eventos. Esas ideas no son estrictamente necesarias para el abastecimiento de eventos, pero a menudo se entrelazan y el verdadero valor se encuentra cuando cambias por completo tu paradigma y los utilizas todos juntos. El abastecimiento de eventos forma parte de un paquete de técnicas que juntas representan una forma muy diferente de pensar sobre la arquitectura del software. Puede ser intimidante.
+1

Gracias por su respuesta, ya que era exactamente lo que necesitaba (algunos ejemplos "simples" a favor/en contra del uso de una tienda de eventos). –

18

Eso es mucho pedir en una pregunta de stackoverflow. Una cosa que falta en su pregunta es cuáles son sus desventajas. De todos modos, en lugar de responder aquí, me gustaría proporcionar algunos enlaces a videos para que los mires. Hay mucho contexto que debe establecerse antes de que las respuestas a esta pregunta tengan sentido.

Greg Young: Hay un video de ~ 2 horas here que proporciona una excelente descripción de todo lo que está pidiendo en su pregunta. También hay una clase en línea ~ 6 horas here.

Udi Dahan: Hay un video de 1 hora here que brinda una perspectiva sobre cuándo usar estas tecnologías.

Lista de correo: Hay un grupo here donde puede hacer todas sus preguntas y tener una agradable discusión sobre el tema.

Espero que esto sea útil. Hay tanta carga en su pregunta que no creo que sea posible que usted o alguien más intente responderla en una corta diatriba y engañar a la gente.


Actualización: No creo que deba leer 5 libros o incluso ver los videos a continuación. Creo que vale la pena su tiempo para hacerlo, pero no es obligatorio. El problema con su pregunta es que los escenarios "simples" generalmente no necesitan el origen del evento. La mayoría de las aplicaciones serán principalmente CRUD e impulsadas por datos. Quizás esta es una respuesta a tu pregunta. Si no hay mucho "comportamiento" en su sistema, entonces no lo necesita. Si hay mucho comportamiento, entonces puede necesitarlo.

+0

Gracias por su respuesta, los enlaces ayudaron (aunque creo que ya sabía la mayoría de ellos). Acabo de ver su actualización en la respuesta, eso ayudó más. Voto tu respuesta, pero creo que la respuesta de Eric Lee se ajusta mejor a mi pregunta. –

Cuestiones relacionadas