Date: Sun, 15 Oct 2017 03:00:00 -0400
<h3>Summary</h3> <p>The way that your application handles data and the way that it is represented in your database don’t always match, leading to a lot of brittle abstractions to reconcile the two. In order to reduce that friction, instead of overwriting the state of your application on every change you can log all of the events that take place and then render the current state from that sequence of events. John Bywater joins me this week to discuss his work on the Event Sourcing library, why you might want to use it in your applications, and how it can change the way that you think about your data.</p> <h3>Preface</h3> <ul> <li>Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.</li> <li>I would like to thank everyone who supports the show on <a href="https://www.pythonpodcast.com/podcastinit?utm_source=rss&utm_medium=rss">Patreon</a>. Your contributions help to make the show sustainable.</li> <li>When you’re ready to launch your next project you’ll need somewhere to deploy it. Check out Linode at <a href="https://www.pythonpodcast.com/linode?utm_source=rss&utm_medium=rss">podastinit.com/linode</a> and get a $20 credit to try out their fast and reliable Linux virtual servers for running your awesome app. And now you can deliver your work to your users even faster with the newly upgraded 200 GBit network in all of their datacenters.</li> <li>If you’re tired of cobbling together your deployment pipeline then it’s time to try out GoCD, the open source continuous delivery platform built by the people at ThoughtWorks who wrote <a href="http://amzn.to/2z9pVvl?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">the book</a> about it. With GoCD you get complete visibility into the life-cycle of your software from one location. To download it now go to <a href="https://www.pythonpodcast.com/gocd?utm_source=rss&utm_medium=rss">podcatinit.com/gocd</a>. Professional support and enterprise plugins are available for added piece of mind.</li> <li>Visit the <a href="https://www.pythonpodcast.com?utm_source=rss&utm_medium=rss">site</a> to subscribe to the show, sign up for the newsletter, and read the show notes. And if you have any questions, comments, or suggestions I would love to hear them. You can reach me on Twitter at <a href="https://twtiter.com/podcastinit?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">@Podcast__init__</a> or email <a href="mailto:hosts@podcastinit.com">hosts@podcastinit.com</a></li> <li>To help other people find the show please leave a review on <a href="https://itunes.apple.com/us/podcast/podcast.-init/id981834425?mt=2&uo=6&at=&ct=&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">iTunes</a>, or <a href="https://play.google.com/music/m/I7ogju4xv6adasgqz6545jndgsy?t=Podcastinit_-_Python_and_the_people_who_make_it_great&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Google Play Music</a>, tell your friends and co-workers, and share it on social media.</li> <li>Your host as usual is Tobias Macey and today I’m interviewing John Bywater about event sourcing, an architectural approach to make your data layer easier to scale and maintain.</li> </ul> <h3>Interview</h3> <ul> <li>Introductions</li> <li>How did you get introduced to Python?</li> <li>Can you start by describing the concept of event sourcing and the benefits that it provides?</li> <li>What is the event sourcing library and what was your reason for starting it?</li> <li>What are some of the reasons that someone might not want to implement an event sourcing approach in their persistence layer?</li> <li>Given that you are storing a record for each event that occurs on a domain object, how does that affect the amount of storage necessary to support an event sourced application?</li> <li>What is the impact on performance and latency from an end user perspective when the application is using event sourcing to render the current state of the system?</li> <li>What does the internal architecture and design of your library look like and how has that evolved over time?</li> <li>In the case where events are delivered out of order, how can you ensure that the present view of an object is reflected accurately?</li> <li>For someone who wants to incorporate an event sourcing design into an existing application, how would they do that?</li> <li>How do you manage schema changes in your domain model when you need to reconstruct present state from the beginning of an objects event sequence?</li> <li>What are some of the most interesting uses of event sourcing that you have seen?</li> <li>What are some of the features or improvements that you have planned for the future of you event sourcing library?</li> </ul> <h3>Keep In Touch</h3> <ul> <li>John <ul> <li><a href="https://github.com/johnbywater?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">johnbywater</a> on GitHub</li> <li><a href="https://twitter.com/johnbywater?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">@johnbywater</a> on Twitter</li> </ul> </li> </ul> <h3>Picks</h3> <ul> <li>Tobias <ul> <li><a href="https://www.youtube.com/watch?v=RB6MvSEaMKI&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Heresy In The Church Of Docker</a></li> </ul> </li> <li>John <ul> <li><a href="https://github.com/johnbywater/quantdsl?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">QuantDSL</a></li> </ul> </li> </ul> <h3>Links</h3> <ul> <li><a href="https://ckan.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">CKAN</a></li> <li><a href="https://www.data.gov/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Data.gov</a></li> <li><a href="https://martinfowler.com/eaaCatalog/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Patterns of Enterprise Application Architecture</a></li> <li><a href="https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Object Relational Impedance Mismatch</a></li> <li><a href="https://martinfowler.com/eaaDev/EventSourcing.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Event Sourcing (Pattern)</a></li> <li><a href="https://github.com/johnbywater/eventsourcing?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Event Sourcing (Library)</a></li> <li><a href="https://en.wikipedia.org/wiki/Multitier_architecture?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">N-Tiered Architecture</a></li> <li><a href="https://en.wikipedia.org/wiki/Domain-driven_design#Building_blocks?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Domain Driven Design</a></li> <li><a href="https://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Event Storming</a></li> <li><a href="http://blogs.tedneward.com/post/the-vietnam-of-computer-science/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">ORM, The Vietnam of Computer Science</a></li> <li><a href="https://vaughnvernon.co/?page_id=168#iddd&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Vaughn Vernon, Implementing Domain Driven Design</a></li> <li><a href="https://www.martinfowler.com/eaaCatalog/activeRecord.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Active Record Pattern</a></li> <li><a href="https://en.wikipedia.org/wiki/Optimistic_concurrency_control?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Optimistic Concurrency Control</a></li> <li><a href="http://www.cs.utexas.edu/users/lorenzo/corsi/cs380d/past/03F/notes/paxos-simple.pdf?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Paxos</a></li> <li><a href="https://aws.amazon.com/dynamodb/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">DynamoDB</a></li> <li><a href="https://martinfowler.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Martin Fowler</a></li> <li><a href="https://domainlanguage.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Eric Evans</a></li> <li><a href="http://files.movereem.nl/2017saner-eventsourcing.pdf?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Dark Side of Event Sourcing</a></li> </ul> <p>The intro and outro music is from Requiem for a Fish <a href="http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Freak Fandango Orchestra</a> / <a href="http://creativecommons.org/licenses/by-sa/3.0/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">CC BY-SA</a><img alt="" height="0" src="https://analytics.boundlessnotions.com/piwik.php?idsite=1&rec=1&url=https%3A%2F%2Fwww.pythonpodcast.com%2Fevent-sourcing-with-john-bywater-episode-131%2F&action_name=Event+Sourcing+with+John+Bywater+-+Episode+131&urlref=https%3A%2F%2Fwww.pythonpodcast.com%2Ffeed%2F&utm_source=rss&utm_medium=rss" style="border: 0; width: 0; height: 0;" width="0" /></p>