Sumber acara dan ketekunan


11

Saya membaca tentang sumber acara dan memiliki pertanyaan tentang kegigihan.

Saya masih dapat memiliki DB dengan semua entitas, bukan? Atau haruskah peristiwa diputar ulang setiap kali aplikasi mulai mendapatkan versi terbaru dari setiap entitas dalam memori? Tampak seperti pemborosan pada sistem yang lebih besar (seperti dalam jumlah besar data)?

Intinya dengan sumber acara adalah bahwa saya dapat memutar ulang acara untuk mengisi penyimpanan data jika diperlukan? (atau menganalisis data)

Jawaban:


9

Dengan Event Sourcing, pertanyaan utama adalah "apa buku catatan Anda".

Jika buku catatan Anda adalah aliran acara Anda, maka Anda tidak akan mengalami masalah. Jika buku catatan Anda adalah "model entitas" Anda, maka masalah akan mulai terjadi di semua tempat. Sebagian dari ini adalah Anda dapat mengatakan "jika saya kehilangan model entitas saya, bisakah saya membangunnya kembali dari aliran acara saya". Jika Anda positif tentang pertanyaan ini maka Log Peristiwa Anda adalah buku catatan Anda.

Penting juga untuk diingat bahwa kebanyakan orang yang menggunakan sumber acara menggunakan model baca. Model ini digunakan untuk menanyakan data. Ini lebih cenderung terlihat seperti model 1nf daripada model entitas 3nf. Mereka hanya memutar ulang acara untuk mendapatkan kembali status agregat untuk menentukan apakah penulisan harus diizinkan.


Halo Greg, saya baru dalam sumber acara tetapi saya benar-benar ingin menguasai ini, dapatkah Anda menyarankan beberapa sumber untuk contoh-contoh praktis dan penjelasan, saya telah menyaksikan dan membaca banyak tentang CQRS, ES tetapi ketika saya ingin memulai prototipe menggunakannya saya benar-benar tidak tahu di mana kapan :) Saya harap Anda dapat menyarankan sesuatu untuk saya (saya di sisi java). Terima kasih atas waktunya.
vach

8

Anda akan mendapat manfaat terbesar dari sumber acara ketika Anda memutuskan untuk mengubah arsitektur sistem Anda juga. Pergi ke arsitektur gaya CQRS dikombinasikan dengan DDD akan memunculkan manfaat sebenarnya dari sumber acara, setidaknya menurut pendapat saya.

Membangun toko acara yang berperilaku baik dalam sistem besar bukanlah tugas yang mudah. Memutar ulang semua data mungkin memang mahal, sangat tergantung pada jumlah data yang perlu diputar ulang. Tetapi ada beberapa teknik yang dapat membantu Anda dengan ini, salah satunya adalah konsep snapshot. Pemutaran ulang hanya dilakukan dari titik tertentu ke depan. Keuntungan yang dibawa oleh toko peristiwa ke dalam sistem Anda sangat berharga. Memiliki semua yang terjadi di sistem Anda dapat diputar ulang, semua data di setiap momen adalah hal yang hebat. Pikirkan tentang analisis, tentang reproduksi bug, tentang statistik.

Ada banyak toko acara yang hebat, yang terakhir baru saja dirilis kemarin, Toko Acara dan sepertinya yang benar-benar bagus.

Database tradisional dapat disimpan untuk bagian permintaan sistem Anda untuk membangun DTO dengan data yang diminta. Basis data ini dapat diatur dan dioptimalkan dengan mempertimbangkan kebutuhan permintaan aplikasi dan klien Anda.

Saya menulis artikel terperinci tentang apa manfaatnya dan bagaimana arsitektur CQRS dikombinasikan dengan sumber acara benar-benar terlihat. Anda dapat memeriksanya CQRS, Peristiwa Domain dan ulasan DDD .


1
Saya tahu semua tentang CQRS dan DDD. Saya mengerti manfaat dari sumber acara. Jepretan adalah cara yang bagus untuk mempercepat proses. Namun itu bukan bagian dari pertanyaan. Tetapi pertanyaannya adalah di mana semua model / entitas akan disimpan setelah dimuat. Dalam memori (akan membutuhkan banyak memori pada sistem yang lebih besar) atau dalam DB? Apa praktik terbaik?
jgauffin

1
Ketika membuat ulang agregat untuk melakukan perintah yang diberikan, peristiwa akan diputar ulang dan agregat disimpan dalam memori, melakukan tindakan, menghasilkan peristiwa dan kemudian menyimpan peristiwa di toko peristiwa. Tapi ya agregat dengan objek nilainya dan entitas akan disimpan dalam memori. Tidak perlu menyimpannya di database lain. Itu biasanya akan menjadi periode waktu yang singkat sampai perintah selesai. Jika Anda memiliki perintah yang menjangkau beberapa agregat yang sedikit berbeda, mungkin juga menandakan beberapa masalah desain dengan konteks terbatas Anda.
Vadim

1

Saya masih dapat memiliki DB dengan semua entitas, bukan? Atau haruskah peristiwa diputar ulang setiap kali aplikasi mulai mendapatkan versi terbaru dari setiap entitas dalam memori?

Jawabannya tergantung pada persyaratan aplikasi Anda. Saya telah melihatnya melakukan dua arah.

Satu paket perangkat lunak yang sangat sukses untuk firma akuntansi kecil membaca log CQRS-nya setiap kali saat start-up. Jumlah data mentah relatif kecil, sehingga waktu memulai di bawah satu menit bahkan pada komputer yang lebih lambat. Mereka telah melakukan CQRS selama lebih dari satu dekade sebelum praktik menjadi populer. Mereka tahu mereka sedang melakukan sesuatu yang baik ketika mereka menyadari bahwa mereka dapat memutakhirkan data klien mereka lagi dan lagi tanpa mengalami masalah yang mereka lihat dengan sistem mereka yang lebih besar.

Dalam sistem dengan volume data yang lebih besar dan / atau sistem yang bergantung pada fungsionalitas RDBMS untuk mengimplementasikan sisi permintaan Anda memiliki database untuk "tampilan saat ini" dari data yang bersumber dari peristiwa (Anda bahkan dapat memiliki banyak tampilan seperti itu). Keuntungan dari pendekatan ini adalah memungkinkan Anda membangun sisi permintaan menggunakan teknologi yang sudah dikenal.


Paket akuntansi mana yang melakukan ini?
magnus

@ user1420752 AXYS .
dasblinkenlight
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.