Date: Sat, 22 Jul 2017 19:00:00 -0400
<h3>Summary</h3> <p>There are dozens of decisions that need to be made when building an application. Sometimes this can lead to analysis paralysis and prevent you from making progress, so don’t let the perfect be the enemy of the good. This week Michael Kennedy shares his experience with evolving his application architecture when his business needs outgrew his initial designs.</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 us 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">www.podastinit.com/linode?utm_source=rss&utm_medium=rss</a> and get a $20 credit to try out their fast and reliable Linux virtual servers for running your awesome app.</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, read the show notes, and get in touch.</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 Mike Kennedy about his work scaling his apps and his business</li> </ul> <h3>Interview</h3> <ul> <li>Introductions</li> <li>How did you get introduced to Python?</li> <li>In some of your recent episodes you have mentioned the work that you did to migrate your applications to run on MongoDB. Can you start by describing the business case for these applications and how you arrived at the initial design?</li> <li>What was the limiting factor that led you to consider such a drastic shift in how you store and manage your data and what benefits did you gain when the work was complete? <ul> <li>If the issue was with scaling, how did you identify the choke points?</li> <li>Why go from relational (SQLite) to document (Mongo) instead of what would seem a more obvious choice of a production grade relational engine such as PostGreSQL or MySQL?</li> </ul> </li> <li>Are there any particular synergies that arise from using a document as opposed to a relational store when working with Python and what are some of the main considerations when deciding between them?</li> <li>What was happening in your business that precipitated the need for this work?</li> <li>How are you talking to MongoDB from Python? Directly (via pymongo) or ORM-style? <ul> <li>Why did you make that choice?</li> <li>How well is that working out? Advantages / drawbacks?</li> </ul> </li> <li>In addition to podcasting you have also been working to create a number of successful courses to teach people how to use Python. Is there anything specific to the language that translates into how you design the material?</li> <li>For anyone who wants to learn more about the benefits and tradeoffs of using a document store with their Python applications, what are some resources that you recommend?</li> </ul> <h3>Keep In Touch</h3> <ul> <li>Michael <ul> <li><a href="https://twitter.com/mkennedy?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">@mkennedy</a> on Twitter</li> <li>Websites <ul> <li><a href="https://talkpython.fm?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Talk Python</a></li> <li><a href="https://pythonbytes.fm?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Python Bytes</a></li> </ul> </li> </ul> </li> </ul> <h3>Picks</h3> <ul> <li>Tobias <ul> <li><a href="http://orgmode.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Org Mode</a></li> <li><a href="https://art19.com/shows/levar-burton-reads?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Levar Burton Reads</a></li> </ul> </li> <li>Mike <ul> <li><a href="https://newspaper.readthedocs.io/en/latest/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Newspaper</a></li> <li><a href="https://robomongo.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Robomongo (now Robo 3T)</a></li> <li><a href="https://www.technologyreview.com/s/604087/the-dark-secret-at-the-heart-of-ai/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Dark Secret at the Heart of AI</a></li> <li><a href="http://www.haibike.com/en-US/US/bikes/344/2017-sduro-cross-4-0?variant=3848009748&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Haibike SDURO Cross 4.0</a></li> </ul> </li> </ul> <h3>Links</h3> <ul> <li><a href="http://www.sqlalchemy.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">SQLAlchemy</a></li> <li><a href="https://www.sqlite.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">SQLIte</a></li> <li><a href="https://www.mysql.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">MySQL</a></li> <li><a href="https://www.postgresql.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">PostGreSQL</a></li> <li><a href="http://nosql-database.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">NoSQL</a></li> <li><a href="https://www.mongodb.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">MongoDB</a></li> <li><a href="https://en.wikipedia.org/wiki/Database_normalization?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Database Normalization</a></li> <li><a href="https://en.wikipedia.org/wiki/Foreign_key?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Foreign Keys</a></li> <li><a href="https://en.wikipedia.org/wiki/Document-oriented_database?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Document Database</a></li> <li><a href="https://rollbar.com/podcastinit?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Rollbar</a></li> <li><a href="http://mongoengine.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">MongoEngine</a></li> <li><a href="https://docs.mongodb.com/manual/administration/security-checklist/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Mongo Security Checkup</a></li> <li><a href="https://mlab.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">MLab</a></li> <li><a href="https://www.mongodb.com/cloud/atlas?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">MongoDB Atlas</a></li> <li><a href="https://www.mongodb.com/world17?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">MongoDB World</a></li> <li><a href="http://amzn.to/2un8V3r?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">O’Reilly Python Mongo Book</a></li> <li><a href="https://training.talkpython.fm/courses/details/mongodb-for-python-for-developers-featuring-orm-odm-mongoengine?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">MongoDB For Python Developers</a></li> <li><a href="https://momentumdash.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Momentum Dash</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%2Fmoving-to-mongodb-with-michael-kennedy-episode-119%2F&action_name=Moving+to+MongoDB+with+Michael+Kennedy+-+Episode+119&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>