<story><title>SQLite: The art of keeping it simple</title><url>http://www.jarchitect.com/Blog/?p=2392</url></story><parent_chain><item><author>pjc50</author><text>SQLheavy is called &amp;quot;Oracle&amp;quot;. You want a feature, it&amp;#x27;s in there. You don&amp;#x27;t want a feature? Well, tough, it&amp;#x27;s in there anyway.&lt;p&gt;From &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.sqlite.org&amp;#x2F;about.html&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.sqlite.org&amp;#x2F;about.html&lt;/a&gt; :&lt;p&gt;&lt;i&gt;&amp;quot;SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine&amp;quot;&lt;/i&gt;&lt;p&gt;Zero-configuration is actually quite an onerous design requirement, as it immediately eliminates most features which shouldn&amp;#x27;t be on by default. It also eliminates tuning.&lt;p&gt;Serverless imposes most of the rest of the performance penalty. If you&amp;#x27;re accessing a sqlite database from a single process, it will most likely be limited by your storage speed. But if you&amp;#x27;re writing to it from multiple processes, lock contention will quickly become an issue. The obvious technique to improve lock contention is to separate the tables so they can be locked separately, but then you lose the single-file convenience.&lt;p&gt;That&amp;#x27;s why that page also says &amp;quot;Think of SQLite not as a replacement for Oracle but as a replacement for fopen()&amp;quot;.</text></item><item><author>projectramo</author><text>The link is broken at the moment.&lt;p&gt;I really want to read it to learn the answer to the following:&lt;p&gt;why isn&amp;#x27;t sqlite able to handle full scale loads? Why do I have to swap it out? Can&amp;#x27;t someone change the implementation details so it can work at scale and leave the interface the same?&lt;p&gt;Where is sqlheavy?</text></item></parent_chain><comment><author>creshal</author><text>&amp;gt; &lt;i&gt;Zero-configuration is actually quite an onerous design requirement, as it immediately eliminates most features which shouldn&amp;#x27;t be on by default. It also eliminates tuning.&lt;/i&gt;&lt;p&gt;It also makes for a stupidly easy to use product. SQLite easily outperforms Postgres in default settings and any &amp;quot;optimized&amp;quot; snippets blog posts cough up for the workload generated by a project I&amp;#x27;m working on.&lt;p&gt;I&amp;#x27;m seriously tempted to drop support for non-sqlite DB backends, since it&amp;#x27;s unlikely that the majority our potential customers (SMB environment) could do a better job than that at configuring database servers.</text></comment>
<story><title>SQLite: The art of keeping it simple</title><url>http://www.jarchitect.com/Blog/?p=2392</url></story><parent_chain><item><author>pjc50</author><text>SQLheavy is called &amp;quot;Oracle&amp;quot;. You want a feature, it&amp;#x27;s in there. You don&amp;#x27;t want a feature? Well, tough, it&amp;#x27;s in there anyway.&lt;p&gt;From &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.sqlite.org&amp;#x2F;about.html&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.sqlite.org&amp;#x2F;about.html&lt;/a&gt; :&lt;p&gt;&lt;i&gt;&amp;quot;SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine&amp;quot;&lt;/i&gt;&lt;p&gt;Zero-configuration is actually quite an onerous design requirement, as it immediately eliminates most features which shouldn&amp;#x27;t be on by default. It also eliminates tuning.&lt;p&gt;Serverless imposes most of the rest of the performance penalty. If you&amp;#x27;re accessing a sqlite database from a single process, it will most likely be limited by your storage speed. But if you&amp;#x27;re writing to it from multiple processes, lock contention will quickly become an issue. The obvious technique to improve lock contention is to separate the tables so they can be locked separately, but then you lose the single-file convenience.&lt;p&gt;That&amp;#x27;s why that page also says &amp;quot;Think of SQLite not as a replacement for Oracle but as a replacement for fopen()&amp;quot;.</text></item><item><author>projectramo</author><text>The link is broken at the moment.&lt;p&gt;I really want to read it to learn the answer to the following:&lt;p&gt;why isn&amp;#x27;t sqlite able to handle full scale loads? Why do I have to swap it out? Can&amp;#x27;t someone change the implementation details so it can work at scale and leave the interface the same?&lt;p&gt;Where is sqlheavy?</text></item></parent_chain><comment><author>k__</author><text>&amp;gt; That&amp;#x27;s why that page also says &amp;quot;Think of SQLite not as a replacement for Oracle but as a replacement for fopen()&amp;quot;.&lt;p&gt;True.&lt;p&gt;Point is, most software has only the need for fopen(), but instead uses something like Oracle.</text></comment>