<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">Hello,</span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">Jesse Gumm and I are working on a Nitrogen how-to book. We'd like to BRIEFLY point our readers in the right direction when they consider a database back-end for their web apps. We understand that this is a much more challenging decision than can be addressed without careful analysis. But we'd like to provide a conceptual framework to help narrow the field and avoid "flavor-of-the-day" snap decisions. Can some experienced Erlangers help correct any misperceptions below and fill in blanks. Please, no flame wars.</span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="-webkit-text-size-adjust: auto;">Many thanks,</span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">Lloyd</span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"><br>SQL/Relational Databases:</span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"><br>postgeSQL<br>- consider when: you want to use a battle-tested relational data store.<br>- reject when: your data needs are more key-value oriented or free form/less structured.<br><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">MySQL/MariaDB/etc:<br>- consider when: You want a SQL datastore that's fast, but that is known to take some shortcuts in the name of speed or "ease of use" (such as silently truncating strings if too long for fields), and master/slave replication is good enough.<br>- reject when: Your data needs are more key-value oriented or free form/less structured.<br><br>NoSQL/Key-Value stores:</span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"><br>ets<br>- consider when: speed is a high priority, since it's all data is stored in ram, like a cache system<br>- reject when: you can afford to lose data, or data needs to be replicated across a cluster.<br><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">dets<br>- consider when: speed is not a priority, since all requests immediately go to and come from disk<br>- reject when: speed is essential or you need replication.<br><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">mnesia<br>- consider when: you want built-in clustering/replication, storing Erlang records and terms natively, and built into the Erlang system (no dependencies needed)<br>- reject when: you don't want to mess around with records or QLC.<br><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">couchDB<br>- consider when _______<br>- reject when __________<br><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">cowDB<br>- consider when _______<br>- reject when __________<br><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">riak<br>- consider when: you need high availability, no-single-point-of-failure, replicated clustered key-value datastore.<br>- reject when: __________<br><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">mongoDB:<br>- consider when: <a href="https://www.youtube.com/watch?v=b2F-DItXtZs" x-apple-data-detectors="true" x-apple-data-detectors-type="link" x-apple-data-detectors-result="0">https://www.youtube.com/watch?v=b2F-DItXtZs</a><br>- reject when: <a href="https://www.youtube.com/watch?v=b2F-DItXtZs" x-apple-data-detectors="true" x-apple-data-detectors-type="link" x-apple-data-detectors-result="1">https://www.youtube.com/watch?v=b2F-DItXtZs</a><br><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">leoFS<br>- consider when _______<br>- reject when __________</span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">other _________________</span></div><div><span style="-webkit-text-size-adjust: auto;">- consider when _______</span><br style="-webkit-text-size-adjust: auto;"><span style="-webkit-text-size-adjust: auto;">- reject when __________</span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);">none of the above<br>- consider when _______<br></span><br><span style="-webkit-text-size-adjust: auto;">Sent from my iPad</span></div></body></html>