Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix typos. CVSTrac ticket #2969 |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
2d989dc6ebbc523ccdbd0504bad627d8 |
User & Date: | drh 2008-03-03 14:21:29.000 |
Context
2008-03-04
| ||
15:19 | Add the requirements numbering key. (check-in: 1fac31d8c5 user: drh tags: trunk) | |
2008-03-03
| ||
14:21 | Fix typos. CVSTrac ticket #2969 (check-in: 2d989dc6eb user: drh tags: trunk) | |
2008-02-27
| ||
13:08 | Fix another typo. (check-in: 45e25daf49 user: drh tags: trunk) | |
Changes
Changes to pages/different.in.
︙ | ︙ | |||
31 32 33 34 35 36 37 | But doing the initial installation and configuration can be intimidatingly complex. } feature serverless {Serverless} { Most SQL database engines are implemented as a separate server process. Programs that want to access the database communicate | | | | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | But doing the initial installation and configuration can be intimidatingly complex. } feature serverless {Serverless} { Most SQL database engines are implemented as a separate server process. Programs that want to access the database communicate with the server using some kind of interprocess communication (typically TCP/IP) to send requests to the server and to receive back results. SQLite does not work this way. With SQLite, the process that wants to access the database reads and writes directly from the database files on disk. There is no intermediary server process. <p> There are advantages and disadvantages to being serverless. The main advantage is that there is no separate server process to install, setup, configure, initialize, manage, and troubleshoot. This is one reason why SQLite is a "zero-configuration" database engine. Programs that use SQLite require no administrative support for setting up the database engine before they are run. Any program that is able to access the disk is able to use an SQLite database. <p> On the other hand, a database engine that uses a server can provide better protection from bugs in the client application - stray pointers in a client cannot corrupt memory on the server. And because a server is a single persistent process, it is able control database access with more precision, allowing for finer grain locking and better concurrency. <p> Most SQL database engines are client/server based. Of those that are serverless, SQLite is the only one that this author knows of that allows multiple applications to access the same database at the same time. } feature onefile {Single Database File} { |
︙ | ︙ | |||
96 97 98 99 100 101 102 | When optimized for size, the whole SQLite library with everything enabled is less than 225KiB in size (as measured on an ix86 using the "size" utility from the GNU compiler suite.) Unneeded features can be disabled at compile-time to further reduce the size of the library to under 170KiB if desired. <p> Most other SQL database engines are much larger than this. IBM boasts | | | | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | When optimized for size, the whole SQLite library with everything enabled is less than 225KiB in size (as measured on an ix86 using the "size" utility from the GNU compiler suite.) Unneeded features can be disabled at compile-time to further reduce the size of the library to under 170KiB if desired. <p> Most other SQL database engines are much larger than this. IBM boasts that its recently released CloudScape database engine is "only" a 2MiB jar file - 10 times larger than SQLite even after it is compressed! Firebird boasts that its client-side library is only 350KiB. That's 50% larger than SQLite and does not even contain the database engine. The Berkeley DB library from Sleepycat is 450KiB and it omits SQL support, providing the programmer with only simple key/value pairs. } feature typing {Manifest typing} { Most SQL database engines use static typing. A datatype is associated |
︙ | ︙ | |||
168 169 170 171 172 173 174 | complex web of interlinked structures and objects. In SQLite, the compiled form of statements is a short program in a machine-language like representation. Users of the database can view this <a href="opcode.html">virtual machine language</a> by prepending the <a href="lang_explain.html">EXPLAIN</a> keyword to a query. <p> | | | 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | complex web of interlinked structures and objects. In SQLite, the compiled form of statements is a short program in a machine-language like representation. Users of the database can view this <a href="opcode.html">virtual machine language</a> by prepending the <a href="lang_explain.html">EXPLAIN</a> keyword to a query. <p> The use of a virtual machine in SQLite has been a great benefit to the library's development. The virtual machine provides a crisp, well-defined junction between the front-end of SQLite (the part that parses SQL statements and generates virtual machine code) and the back-end (the part that executes the virtual machine code and computes a result.) The virtual machine allows the developers to see clearly and in an easily readable form what SQLite is trying to do with each statement it compiles, which is a tremendous help in debugging. |
︙ | ︙ | |||
192 193 194 195 196 197 198 | # For example, #} feature license {Public domain} { The source code for SQLite is in the public domain. No claim of copyright is made on any part of the core source code. (The documentation and test code is a different matter - some sections of documentation and test logic | | | 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | # For example, #} feature license {Public domain} { The source code for SQLite is in the public domain. No claim of copyright is made on any part of the core source code. (The documentation and test code is a different matter - some sections of documentation and test logic are governed by open-source licenses.) All contributors to the SQLite core software have signed affidavits specifically disavowing any copyright interest in the code. This means that anybody is able to legally do anything they want with the SQLite source code. <p> There are other SQL database engines with liberal licenses that allow the code to be broadly and freely used. But those other engines are still governed by copyright law. SQLite is different in that copyright |
︙ | ︙ |
Changes to pages/whentouse.in.
︙ | ︙ | |||
44 45 46 47 48 49 50 | complex features that enterprise database engines provide. As it turns out, situations where simplicity is the better choice are more common than many people realize. </p> <p> Another way to look at SQLite is this: SQLite is not designed | | | | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | complex features that enterprise database engines provide. As it turns out, situations where simplicity is the better choice are more common than many people realize. </p> <p> Another way to look at SQLite is this: SQLite is not designed to replace <a href="http://www.oracle.com/database/index.html">Oracle</a>. It is designed to replace <a href="http://man.he.net/man3/fopen">fopen()</a>. </p> <h2>Situations Where SQLite Works Well</h2> <ul> |
︙ | ︙ | |||
71 72 73 74 75 76 77 | durable, isolated, and consistent. </p> <p> Temporary triggers can be added to the database to record all changes into a (temporary) undo/redo log table. These changes can then be played back when the user presses the Undo and Redo buttons. Using | | | | | | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | durable, isolated, and consistent. </p> <p> Temporary triggers can be added to the database to record all changes into a (temporary) undo/redo log table. These changes can then be played back when the user presses the Undo and Redo buttons. Using this technique, an unlimited depth undo/redo implementation can be written in surprisingly little code. </p> </li> <li><p><b>Embedded devices and applications</b></p> <p>Because an SQLite database requires little or no administration, SQLite is a good choice for devices or services that must work unattended and without human support. SQLite is a good fit for use in cellphones, PDAs, set-top boxes, and/or appliances. It also works well as an embedded database in downloadable consumer applications. </p> </li> <li><p><b>Websites</b></p> <p>SQLite usually will work great as the database engine for low to medium traffic websites (which is to say, 99.9% of all websites). The amount of web traffic that SQLite can handle depends, of course, on how heavily the website uses its database. Generally speaking, any site that gets fewer than 100K hits/day should work fine with SQLite. The 100K hits/day figure is a conservative estimate, not a hard upper bound. SQLite has been demonstrated to work with 10 times that amount of traffic.</p> </li> <li><p><b>Replacement for <i>ad hoc</i> disk files</b></p> |
︙ | ︙ | |||
138 139 140 141 142 143 144 | data can be sliced and diced to generate a myriad of summary reports. Possible uses include website log analysis, sports statistics analysis, compilation of programming metrics, and analysis of experimental results. </p> <p> | | | | 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | data can be sliced and diced to generate a myriad of summary reports. Possible uses include website log analysis, sports statistics analysis, compilation of programming metrics, and analysis of experimental results. </p> <p> You can also do the same thing with an enterprise client/server database, of course. The advantages to using SQLite in this situation are that SQLite is much easier to set up and the resulting database is a single file that you can store on a floppy disk or flash-memory stick or email to a colleague. </p> </li> <li><p><b>Stand-in for an enterprise database during demos or testing</b></p> <p> If you are writing a client application for an enterprise database engine, it makes sense to use a generic database backend that allows you to connect to many different kinds of SQL database engines. It makes even better sense to go ahead and include SQLite in the mix of supported databases and to statically link the SQLite engine in with the client. That way the client program can be used standalone with an SQLite data file for testing or for demonstrations. </p> </li> <li><p><b>Database Pedagogy</b></p> |
︙ | ︙ | |||
213 214 215 216 217 218 219 | in situations where the same database will be accessed simultaneously from many computers over a network filesystem.</p> </li> <li><p><b>High-volume Websites</b></p> <p>SQLite will normally work fine as the database backend to a website. | | | | 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | in situations where the same database will be accessed simultaneously from many computers over a network filesystem.</p> </li> <li><p><b>High-volume Websites</b></p> <p>SQLite will normally work fine as the database backend to a website. But if you website is so busy that you are thinking of splitting the database component off onto a separate machine, then you should definitely consider using an enterprise-class client/server database engine instead of SQLite.</p> </li> <li><p><b>Very large datasets</b></p> <p>When you start a transaction in SQLite (which happens automatically before any write operation that is not within an explicit BEGIN...COMMIT) the engine has to allocate a bitmap of dirty pages in the disk file to help it manage its rollback journal. SQLite needs 256 bytes of RAM for every 1MiB of database (assuming a 1024-byte page size: less memory is used with larger page sizes, of course). For smaller databases, the amount of memory required is not a problem, but when database begins to grow into the multi-gigabyte range, the size of the bitmap can get quite large. If you need to store and modify more than a few dozen GB of data, you should consider using a different database engine. </p> </li> <li><p><b>High Concurrency</b></p> |
︙ | ︙ |