aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/sqlite/unix/sqlite-3.5.1/www/whentouse.tcl
diff options
context:
space:
mode:
authordan miller2007-10-20 02:49:29 +0000
committerdan miller2007-10-20 02:49:29 +0000
commite36d23a85ebff914d74bb541558c2b6082b78edb (patch)
tree54b58fdf162e78af64055282a6035c8d2443389d /libraries/sqlite/unix/sqlite-3.5.1/www/whentouse.tcl
parent* Fixed an issue whereby avatar chat distances were being calculated against ... (diff)
downloadopensim-SC_OLD-e36d23a85ebff914d74bb541558c2b6082b78edb.zip
opensim-SC_OLD-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.gz
opensim-SC_OLD-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.bz2
opensim-SC_OLD-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.xz
sqlite source (unix build) added to libraries
Diffstat (limited to '')
-rw-r--r--libraries/sqlite/unix/sqlite-3.5.1/www/whentouse.tcl254
1 files changed, 254 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/www/whentouse.tcl b/libraries/sqlite/unix/sqlite-3.5.1/www/whentouse.tcl
new file mode 100644
index 0000000..bb4378b
--- /dev/null
+++ b/libraries/sqlite/unix/sqlite-3.5.1/www/whentouse.tcl
@@ -0,0 +1,254 @@
1#
2# Run this TCL script to generate HTML for the goals.html file.
3#
4set rcsid {$Id: whentouse.tcl,v 1.7 2007/04/14 12:04:39 drh Exp $}
5source common.tcl
6header {Appropriate Uses For SQLite}
7
8puts {
9<p>
10SQLite is different from most other SQL database engines in that its
11primary design goal is to be simple:
12</p>
13
14<ul>
15<li>Simple to administer</li>
16<li>Simple to operate</li>
17<li>Simple to embed in a larger program</li>
18<li>Simple to maintain and customize</li>
19</ul>
20
21<p>
22Many people like SQLite because it is small and fast. But those
23qualities are just happy accidents.
24Users also find that SQLite is very reliable. Reliability is
25a consequence of simplicity. With less complication, there is
26less to go wrong. So, yes, SQLite is small, fast, and reliable,
27but first and foremost, SQLite strives to be simple.
28</p>
29
30<p>
31Simplicity in a database engine can be either a strength or a
32weakness, depending on what you are trying to do. In order to
33achieve simplicity, SQLite has had to sacrifice other characteristics
34that some people find useful, such as high concurrency, fine-grained
35access control, a rich set of built-in functions, stored procedures,
36esoteric SQL language features, XML and/or Java extensions,
37tera- or peta-byte scalability, and so forth. If you need some of these
38features and do not mind the added complexity that they
39bring, then SQLite is probably not the database for you.
40SQLite is not intended to be an enterprise database engine. It
41not designed to compete with Oracle or PostgreSQL.
42</p>
43
44<p>
45The basic rule of thumb for when it is appropriate to use SQLite is
46this: Use SQLite in situations where simplicity of administration,
47implementation, and maintenance are more important than the countless
48complex features that enterprise database engines provide.
49As it turns out, situations where simplicity is the better choice
50are more common than many people realize.
51</p>
52
53<h2>Situations Where SQLite Works Well</h2>
54
55<ul>
56<li><p><b>Websites</b></p>
57
58<p>SQLite usually will work great as the database engine for low to
59medium traffic websites (which is to say, 99.9% of all websites).
60The amount of web traffic that SQLite can handle depends, of course,
61on how heavily the website uses its database. Generally
62speaking, any site that gets fewer than a 100000 hits/day should work
63fine with SQLite.
64The 100000 hits/day figure is a conservative estimate, not a
65hard upper bound.
66SQLite has been demonstrated to work with 10 times that amount
67of traffic.</p>
68</li>
69
70<li><p><b>Embedded devices and applications</b></p>
71
72<p>Because an SQLite database requires little or no administration,
73SQLite is a good choice for devices or services that must work
74unattended and without human support. SQLite is a good fit for
75use in cellphones, PDAs, set-top boxes, and/or appliances. It also
76works well as an embedded database in downloadable consumer applications.
77</p>
78</li>
79
80<li><p><b>Application File Format</b></p>
81
82<p>
83SQLite has been used with great success as the on-disk file format
84for desktop applications such as financial analysis tools, CAD
85packages, record keeping programs, and so forth. The traditional
86File/Open operation does an sqlite3_open() and executes a
87BEGIN TRANSACTION to get exclusive access to the content. File/Save
88does a COMMIT followed by another BEGIN TRANSACTION. The use
89of transactions guarantees that updates to the application file are atomic,
90durable, isolated, and consistent.
91</p>
92
93<p>
94Temporary triggers can be added to the database to record all
95changes into a (temporary) undo/redo log table. These changes can then
96be played back when the user presses the Undo and Redo buttons. Using
97this technique, a unlimited depth undo/redo implementation can be written
98in surprising little code.
99</p>
100</li>
101
102<li><p><b>Replacement for <i>ad hoc</i> disk files</b></p>
103
104<p>Many programs use fopen(), fread(), and fwrite() to create and
105manage files of data in home-grown formats. SQLite works
106particularly well as a
107replacement for these <i>ad hoc</i> data files.</p>
108</li>
109
110<li><p><b>Internal or temporary databases</b></p>
111
112<p>
113For programs that have a lot of data that must be sifted and sorted
114in diverse ways, it is often easier and quicker to load the data into
115an in-memory SQLite database and use queries with joins and ORDER BY
116clauses to extract the data in the form and order needed rather than
117to try to code the same operations manually.
118Using an SQL database internally in this way also gives the program
119greater flexibility since new columns and indices can be added without
120having to recode every query.
121</p>
122</li>
123
124<li><p><b>Command-line dataset analysis tool</b></p>
125
126<p>
127Experienced SQL users can employ
128the command-line <b>sqlite</b> program to analyze miscellaneous
129datasets. Raw data can be imported from CSV files, then that
130data can be sliced and diced to generate a myriad of summary
131reports. Possible uses include website log analysis, sports
132statistics analysis, compilation of programming metrics, and
133analysis of experimental results.
134</p>
135
136<p>
137You can also do the same thing with a enterprise client/server
138database, of course. The advantages to using SQLite in this situation
139are that SQLite is much easier to set up and the resulting database
140is a single file that you can store on a floppy disk or flash-memory stick
141or email to a colleague.
142</p>
143</li>
144
145<li><p><b>Stand-in for an enterprise database during demos or testing</b></p>
146
147<p>
148If you are writing a client application for an enterprise database engine,
149it makes sense to use a generic database backend that allows you to connect
150to many different kinds of SQL database engines. It makes even better
151sense to
152go ahead and include SQLite in the mix of supported database and to statically
153link the SQLite engine in with the client. That way the client program
154can be used standalone with an SQLite data file for testing or for
155demonstrations.
156</p>
157</li>
158
159<li><p><b>Database Pedagogy</b></p>
160
161<p>
162Because it is simple to setup and use (installation is trivial: just
163copy the <b>sqlite</b> or <b>sqlite.exe</b> executable to the target machine
164and run it) SQLite makes a good database engine for use in teaching SQL.
165Students can easily create as many databases as they like and can
166email databases to the instructor for comments or grading. For more
167advanced students who are interested in studying how an RDBMS is
168implemented, the modular and well-commented and documented SQLite code
169can serve as a good basis. This is not to say that SQLite is an accurate
170model of how other database engines are implemented, but rather a student who
171understands how SQLite works can more quickly comprehend the operational
172principles of other systems.
173</p>
174</li>
175
176<li><p><b>Experimental SQL language extensions</b></p>
177
178<p>The simple, modular design of SQLite makes it a good platform for
179prototyping new, experimental database language features or ideas.
180</p>
181</li>
182
183
184</ul>
185
186<h2>Situations Where Another RDBMS May Work Better</h2>
187
188<ul>
189<li><p><b>Client/Server Applications</b><p>
190
191<p>If you have many client programs accessing a common database
192over a network, you should consider using a client/server database
193engine instead of SQLite. SQLite will work over a network filesystem,
194but because of the latency associated with most network filesystems,
195performance will not be great. Also, the file locking logic of
196many network filesystems implementation contains bugs (on both Unix
197and windows). If file locking does not work like it should,
198it might be possible for two or more client programs to modify the
199same part of the same database at the same time, resulting in
200database corruption. Because this problem results from bugs in
201the underlying filesystem implementation, there is nothing SQLite
202can do to prevent it.</p>
203
204<p>A good rule of thumb is that you should avoid using SQLite
205in situations where the same database will be accessed simultaneously
206from many computers over a network filesystem.</p>
207</li>
208
209<li><p><b>High-volume Websites</b></p>
210
211<p>SQLite will normally work fine as the database backend to a website.
212But if you website is so busy that your are thinking of splitting the
213database component off onto a separate machine, then you should
214definitely consider using an enterprise-class client/server database
215engine instead of SQLite.</p>
216</li>
217
218<li><p><b>Very large datasets</b></p>
219
220<p>When you start a transaction in SQLite (which happens automatically
221before any write operation that is not within an explicit BEGIN...COMMIT)
222the engine has to allocate a bitmap of dirty pages in the disk file to
223help it manage its rollback journal. SQLite needs 256 bytes of RAM for
224every 1MiB of database (assuming a 1024-byte page size: less memory is
225used with larger page sizes, of course).
226For smaller databases, the amount of memory
227required is not a problem, but when database begin to grow into the
228multi-gigabyte range, the size of the bitmap can get quite large. If
229you need to store and modify more than a few dozen GB of data, you should
230consider using a different database engine.
231</p>
232</li>
233
234<li><p><b>High Concurrency</b></p>
235
236<p>
237SQLite uses reader/writer locks on the entire database file. That means
238if any process is reading from any part of the database, all other
239processes are prevented from writing any other part of the database.
240Similarly, if any one process is writing to the database,
241all other processes are prevented from reading any other part of the
242database.
243For many situations, this is not a problem. Each application
244does its database work quickly and moves on, and no lock lasts for more
245than a few dozen milliseconds. But there are some applications that require
246more concurrency, and those applications may need to seek a different
247solution.
248</p>
249</li>
250
251</ul>
252
253}
254footer $rcsid