Documentation Source Text

Hex Artifact Content
Login

Artifact 5de959236bea8800cd9b434540ddfe89745d63bd:


0000: 3c 74 69 74 6c 65 3e 41 70 70 72 6f 70 72 69 61  <title>Appropria
0010: 74 65 20 55 73 65 73 20 46 6f 72 20 53 51 4c 69  te Uses For SQLi
0020: 74 65 3c 2f 74 69 74 6c 65 3e 0a 0a 3c 68 31 20  te</title>..<h1 
0030: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 41  align="center">A
0040: 70 70 72 6f 70 72 69 61 74 65 20 55 73 65 73 20  ppropriate Uses 
0050: 46 6f 72 20 53 51 4c 69 74 65 3c 2f 68 31 3e 0a  For SQLite</h1>.
0060: 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 69 73 20 6e  .<p>.SQLite is n
0070: 6f 74 20 64 69 72 65 63 74 6c 79 20 63 6f 6d 70  ot directly comp
0080: 61 72 61 62 6c 65 20 74 6f 20 63 6c 69 65 6e 74  arable to client
0090: 2f 73 65 72 76 65 72 20 53 51 4c 20 64 61 74 61  /server SQL data
00a0: 62 61 73 65 20 65 6e 67 69 6e 65 73 20 73 75 63  base engines suc
00b0: 68 0a 61 73 20 4d 79 53 51 4c 2c 20 4f 72 61 63  h.as MySQL, Orac
00c0: 6c 65 2c 20 50 6f 73 74 67 72 65 53 51 4c 2c 20  le, PostgreSQL, 
00d0: 6f 72 20 53 51 4c 20 53 65 72 76 65 72 20 73 69  or SQL Server si
00e0: 6e 63 65 20 53 51 4c 69 74 65 20 69 73 20 74 72  nce SQLite is tr
00f0: 79 69 6e 67 20 74 6f 0a 73 6f 6c 76 65 20 61 20  ying to.solve a 
0100: 64 69 66 66 65 72 65 6e 74 20 70 72 6f 62 6c 65  different proble
0110: 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 43 6c 69  m..</p>..<p>.Cli
0120: 65 6e 74 2f 73 65 72 76 65 72 20 53 51 4c 20 64  ent/server SQL d
0130: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
0140: 73 74 72 69 76 65 20 74 6f 20 69 6d 70 6c 65 6d  strive to implem
0150: 65 6e 74 20 61 20 73 68 61 72 65 64 20 72 65 70  ent a shared rep
0160: 6f 73 69 74 6f 72 79 0a 6f 66 20 65 6e 74 65 72  ository.of enter
0170: 70 72 69 73 65 20 64 61 74 61 2e 20 20 54 68 65  prise data.  The
0180: 79 20 65 6d 70 68 61 73 69 73 20 73 63 61 6c 61  y emphasis scala
0190: 62 69 6c 69 74 79 2c 20 63 6f 6e 63 75 72 72 65  bility, concurre
01a0: 6e 63 79 2c 20 63 65 6e 74 72 61 6c 69 7a 61 74  ncy, centralizat
01b0: 69 6f 6e 2c 0a 61 6e 64 20 63 6f 6e 74 72 6f 6c  ion,.and control
01c0: 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65 73  ..SQLite strives
01d0: 20 74 6f 20 70 72 6f 76 69 64 65 20 6c 6f 63 61   to provide loca
01e0: 6c 20 64 61 74 61 20 73 74 6f 72 61 67 65 20 66  l data storage f
01f0: 6f 72 0a 69 6e 64 69 76 69 64 75 61 6c 20 61 70  or.individual ap
0200: 70 6c 69 63 61 74 69 6f 6e 73 20 61 6e 64 20 64  plications and d
0210: 65 76 69 63 65 73 2e 20 20 53 51 4c 69 74 65 20  evices.  SQLite 
0220: 65 6d 70 68 61 73 69 7a 65 73 20 65 63 6f 6e 6f  emphasizes econo
0230: 6d 79 2c 0a 65 66 66 69 63 69 65 6e 63 79 2c 20  my,.efficiency, 
0240: 72 65 6c 69 61 62 69 6c 69 74 79 2c 20 69 6e 64  reliability, ind
0250: 65 70 65 6e 64 65 6e 63 65 2c 20 61 6e 64 20 73  ependence, and s
0260: 69 6d 70 6c 69 63 69 74 79 2e 0a 3c 2f 70 3e 0a  implicity..</p>.
0270: 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 64 6f 65  ..<p>.SQLite doe
0280: 73 20 6e 6f 74 20 63 6f 6d 70 65 74 65 20 77 69  s not compete wi
0290: 74 68 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72  th client/server
02a0: 20 64 61 74 61 62 61 73 65 73 2e 0a 53 51 4c 69   databases..SQLi
02b0: 74 65 20 63 6f 6d 70 65 74 65 73 20 77 69 74 68  te competes with
02c0: 20 5b 68 74 74 70 3a 2f 2f 6d 61 6e 2e 68 65 2e   [http://man.he.
02d0: 6e 65 74 2f 6d 61 6e 33 2f 66 6f 70 65 6e 20 7c  net/man3/fopen |
02e0: 20 66 6f 70 65 6e 28 29 5d 2e 0a 3c 2f 70 3e 0a   fopen()]..</p>.
02f0: 0a 3c 68 32 3e 53 69 74 75 61 74 69 6f 6e 73 20  .<h2>Situations 
0300: 57 68 65 72 65 20 53 51 4c 69 74 65 20 57 6f 72  Where SQLite Wor
0310: 6b 73 20 57 65 6c 6c 3c 2f 68 32 3e 0a 0a 3c 75  ks Well</h2>..<u
0320: 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  l>..<tcl>hd_frag
0330: 6d 65 6e 74 20 61 70 70 66 69 6c 65 66 6f 72 6d  ment appfileform
0340: 61 74 3c 2f 74 63 6c 3e 0a 3c 6c 69 3e 3c 62 3e  at</tcl>.<li><b>
0350: 45 6d 62 65 64 64 65 64 20 64 65 76 69 63 65 73  Embedded devices
0360: 20 61 6e 64 20 74 68 65 20 69 6e 74 65 72 6e 65   and the interne
0370: 74 20 6f 66 20 74 68 69 6e 67 73 3c 2f 62 3e 0a  t of things</b>.
0380: 0a 3c 70 3e 42 65 63 61 75 73 65 20 61 6e 20 53  .<p>Because an S
0390: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 72  QLite database r
03a0: 65 71 75 69 72 65 73 20 6e 6f 20 61 64 6d 69 6e  equires no admin
03b0: 69 73 74 72 61 74 69 6f 6e 2c 0a 69 74 20 77 6f  istration,.it wo
03c0: 72 6b 73 20 77 65 6c 6c 20 69 6e 20 64 65 76 69  rks well in devi
03d0: 63 65 73 20 74 68 61 74 20 6d 75 73 74 20 6f 70  ces that must op
03e0: 65 72 61 74 65 20 77 69 74 68 6f 75 74 20 65 78  erate without ex
03f0: 70 65 72 74 20 68 75 6d 61 6e 20 73 75 70 70 6f  pert human suppo
0400: 72 74 2e 0a 53 51 4c 69 74 65 20 69 73 20 61 20  rt..SQLite is a 
0410: 67 6f 6f 64 20 66 69 74 20 66 6f 72 20 75 73 65  good fit for use
0420: 20 69 6e 20 0a 63 65 6c 6c 70 68 6f 6e 65 73 2c   in .cellphones,
0430: 20 73 65 74 2d 74 6f 70 20 62 6f 78 65 73 2c 20   set-top boxes, 
0440: 74 65 6c 65 76 69 73 69 6f 6e 73 2c 20 67 61 6d  televisions, gam
0450: 65 20 63 6f 6e 73 6f 6c 65 73 2c 0a 63 61 6d 65  e consoles,.came
0460: 72 61 73 2c 20 77 61 74 63 68 65 73 2c 20 6b 69  ras, watches, ki
0470: 74 63 68 65 6e 20 61 70 70 6c 69 61 6e 63 65 73  tchen appliances
0480: 2c 20 74 68 65 72 6d 6f 73 74 61 74 73 2c 20 61  , thermostats, a
0490: 75 74 6f 6d 6f 62 69 6c 65 73 2c 20 0a 6d 61 63  utomobiles, .mac
04a0: 68 69 6e 65 20 74 6f 6f 6c 73 2c 20 61 69 72 70  hine tools, airp
04b0: 6c 61 6e 65 73 2c 20 72 65 6d 6f 74 65 20 73 65  lanes, remote se
04c0: 6e 73 6f 72 73 2c 20 64 72 6f 6e 65 73 2c 20 6d  nsors, drones, m
04d0: 65 64 69 63 61 6c 20 64 65 76 69 63 65 73 2c 0a  edical devices,.
04e0: 61 6e 64 20 72 6f 62 6f 74 73 3a 20 20 74 68 65  and robots:  the
04f0: 20 22 69 6e 74 65 72 6e 65 74 20 6f 66 20 74 68   "internet of th
0500: 69 6e 67 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ings"..</p>..<p>
0510: 43 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 64 61  Client/server da
0520: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 61  tabase engines a
0530: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 6c  re designed to l
0540: 69 76 65 20 69 6e 73 69 64 65 20 61 0a 6c 6f 76  ive inside a.lov
0550: 69 6e 67 6c 79 2d 61 74 74 65 6e 64 65 64 20 64  ingly-attended d
0560: 61 74 61 63 65 6e 74 65 72 20 61 74 20 74 68 65  atacenter at the
0570: 20 63 6f 72 65 20 6f 66 20 74 68 65 20 6e 65 74   core of the net
0580: 77 6f 72 6b 2e 0a 53 51 4c 69 74 65 20 77 6f 72  work..SQLite wor
0590: 6b 73 20 74 68 65 72 65 20 74 6f 6f 2c 20 62 75  ks there too, bu
05a0: 74 20 53 51 4c 69 74 65 20 61 6c 73 6f 20 74 68  t SQLite also th
05b0: 72 69 76 65 73 20 61 74 20 74 68 65 20 65 64 67  rives at the edg
05c0: 65 20 6f 66 20 74 68 65 20 6e 65 74 77 6f 72 6b  e of the network
05d0: 2c 0a 66 65 6e 64 69 6e 67 20 66 6f 72 20 69 74  ,.fending for it
05e0: 73 65 6c 66 20 77 68 69 6c 65 20 70 72 6f 76 69  self while provi
05f0: 64 69 6e 67 20 66 61 73 74 20 61 6e 64 0a 72 65  ding fast and.re
0600: 6c 69 61 62 6c 65 20 64 61 74 61 20 73 65 72 76  liable data serv
0610: 69 63 65 73 20 74 6f 20 61 70 70 6c 69 63 61 74  ices to applicat
0620: 69 6f 6e 73 20 74 68 61 74 20 77 6f 75 6c 64 20  ions that would 
0630: 6f 74 68 65 72 77 69 73 65 0a 68 61 76 65 20 64  otherwise.have d
0640: 6f 64 67 79 20 63 6f 6e 6e 65 63 74 69 76 69 74  odgy connectivit
0650: 79 2e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  y..</li>..<li><p
0660: 3e 3c 62 3e 41 70 70 6c 69 63 61 74 69 6f 6e 20  ><b>Application 
0670: 66 69 6c 65 20 66 6f 72 6d 61 74 3c 2f 62 3e 3c  file format</b><
0680: 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  /p>..<p>.SQLite 
0690: 69 73 20 6f 66 74 65 6e 20 75 73 65 64 20 61 73  is often used as
06a0: 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 66 69 6c   the on-disk fil
06b0: 65 20 66 6f 72 6d 61 74 0a 66 6f 72 20 64 65 73  e format.for des
06c0: 6b 74 6f 70 20 61 70 70 6c 69 63 61 74 69 6f 6e  ktop application
06d0: 73 20 73 75 63 68 20 61 73 20 76 65 72 73 69 6f  s such as versio
06e0: 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 6d  n control system
06f0: 73 2c 0a 66 69 6e 61 6e 63 69 61 6c 20 61 6e 61  s,.financial ana
0700: 6c 79 73 69 73 20 74 6f 6f 6c 73 2c 20 6d 65 64  lysis tools, med
0710: 69 61 20 63 61 74 61 6c 6f 67 69 6e 67 20 61 6e  ia cataloging an
0720: 64 20 65 64 69 74 69 6e 67 20 73 75 69 74 65 73  d editing suites
0730: 2c 20 43 41 44 0a 70 61 63 6b 61 67 65 73 2c 20  , CAD.packages, 
0740: 72 65 63 6f 72 64 20 6b 65 65 70 69 6e 67 20 70  record keeping p
0750: 72 6f 67 72 61 6d 73 2c 20 61 6e 64 20 73 6f 20  rograms, and so 
0760: 66 6f 72 74 68 2e 20 20 54 68 65 20 74 72 61 64  forth.  The trad
0770: 69 74 69 6f 6e 61 6c 0a 46 69 6c 65 2f 4f 70 65  itional.File/Ope
0780: 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c  n operation call
0790: 73 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29  s sqlite3_open()
07a0: 20 74 6f 20 61 74 74 61 63 68 20 74 6f 20 74 68   to attach to th
07b0: 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 2e  e database.file.
07c0: 20 20 55 70 64 61 74 65 73 20 68 61 70 70 65 6e    Updates happen
07d0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 61   automatically a
07e0: 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f  s application co
07f0: 6e 74 65 6e 74 20 69 73 20 72 65 76 69 73 65 64  ntent is revised
0800: 0a 73 6f 20 74 68 65 20 46 69 6c 65 2f 53 61 76  .so the File/Sav
0810: 65 20 6d 65 6e 75 20 6f 70 74 69 6f 6e 20 62 65  e menu option be
0820: 63 6f 6d 65 73 20 73 75 70 65 72 66 6c 75 6f 75  comes superfluou
0830: 73 2e 20 20 54 68 65 20 46 69 6c 65 2f 53 61 76  s.  The File/Sav
0840: 65 5f 41 73 0a 6d 65 6e 75 20 6f 70 74 69 6f 6e  e_As.menu option
0850: 20 63 61 6e 20 62 65 20 69 6d 70 6c 65 6d 65 6e   can be implemen
0860: 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 62  ted using the [b
0870: 61 63 6b 75 70 20 41 50 49 5d 2e 0a 3c 2f 70 3e  ackup API]..</p>
0880: 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6d  ..<p>There are m
0890: 61 6e 79 20 62 65 6e 65 66 69 74 73 20 74 6f 20  any benefits to 
08a0: 74 68 69 73 20 61 70 70 72 6f 61 63 68 2c 20 69  this approach, i
08b0: 6e 63 6c 75 64 69 6e 67 20 69 6d 70 72 6f 76 65  ncluding improve
08c0: 64 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 70 65  d.application pe
08d0: 72 66 6f 72 6d 61 6e 63 65 2c 20 72 65 64 75 63  rformance, reduc
08e0: 65 64 20 63 6f 73 74 20 61 6e 64 20 63 6f 6d 70  ed cost and comp
08f0: 6c 65 78 69 74 79 2c 20 61 6e 64 0a 69 6d 70 72  lexity, and.impr
0900: 6f 76 65 64 20 72 65 6c 69 61 62 69 6c 69 74 79  oved reliability
0910: 2e 20 20 53 65 65 20 74 65 63 68 6e 69 63 61 6c  .  See technical
0920: 20 6e 6f 74 65 73 0a 5b 66 69 6c 65 2d 66 6f 72   notes.[file-for
0930: 6d 61 74 20 62 65 6e 65 66 69 74 73 7c 68 65 72  mat benefits|her
0940: 65 5d 20 61 6e 64 20 0a 5b 61 70 70 6c 69 63 61  e] and .[applica
0950: 74 69 6f 6e 20 66 69 6c 65 2d 66 6f 72 6d 61 74  tion file-format
0960: 7c 68 65 72 65 5d 20 66 6f 72 20 64 65 74 61 69  |here] for detai
0970: 6c 73 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 57  ls...<li><p><b>W
0980: 65 62 73 69 74 65 73 3c 2f 62 3e 3c 2f 70 3e 0a  ebsites</b></p>.
0990: 0a 3c 70 3e 53 51 4c 69 74 65 20 77 6f 72 6b 73  .<p>SQLite works
09a0: 20 67 72 65 61 74 20 61 73 20 74 68 65 20 64 61   great as the da
09b0: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 66 6f  tabase engine fo
09c0: 72 20 6d 6f 73 74 20 6c 6f 77 20 74 6f 0a 6d 65  r most low to.me
09d0: 64 69 75 6d 20 74 72 61 66 66 69 63 20 77 65 62  dium traffic web
09e0: 73 69 74 65 73 20 28 77 68 69 63 68 20 69 73 20  sites (which is 
09f0: 74 6f 20 73 61 79 2c 20 6d 6f 73 74 20 77 65 62  to say, most web
0a00: 73 69 74 65 73 29 2e 0a 54 68 65 20 61 6d 6f 75  sites)..The amou
0a10: 6e 74 20 6f 66 20 77 65 62 20 74 72 61 66 66 69  nt of web traffi
0a20: 63 20 74 68 61 74 20 53 51 4c 69 74 65 20 63 61  c that SQLite ca
0a30: 6e 20 68 61 6e 64 6c 65 20 64 65 70 65 6e 64 73  n handle depends
0a40: 0a 6f 6e 20 68 6f 77 20 68 65 61 76 69 6c 79 20  .on how heavily 
0a50: 74 68 65 20 77 65 62 73 69 74 65 20 75 73 65 73  the website uses
0a60: 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20 20   its database.  
0a70: 47 65 6e 65 72 61 6c 6c 79 0a 73 70 65 61 6b 69  Generally.speaki
0a80: 6e 67 2c 20 61 6e 79 20 73 69 74 65 20 74 68 61  ng, any site tha
0a90: 74 20 67 65 74 73 20 66 65 77 65 72 20 74 68 61  t gets fewer tha
0aa0: 6e 20 31 30 30 4b 20 68 69 74 73 2f 64 61 79 20  n 100K hits/day 
0ab0: 73 68 6f 75 6c 64 20 77 6f 72 6b 0a 66 69 6e 65  should work.fine
0ac0: 20 77 69 74 68 20 53 51 4c 69 74 65 2e 0a 54 68   with SQLite..Th
0ad0: 65 20 31 30 30 4b 20 68 69 74 73 2f 64 61 79 20  e 100K hits/day 
0ae0: 66 69 67 75 72 65 20 69 73 20 61 20 63 6f 6e 73  figure is a cons
0af0: 65 72 76 61 74 69 76 65 20 65 73 74 69 6d 61 74  ervative estimat
0b00: 65 2c 20 6e 6f 74 20 61 0a 68 61 72 64 20 75 70  e, not a.hard up
0b10: 70 65 72 20 62 6f 75 6e 64 2e 0a 53 51 4c 69 74  per bound..SQLit
0b20: 65 20 68 61 73 20 62 65 65 6e 20 64 65 6d 6f 6e  e has been demon
0b30: 73 74 72 61 74 65 64 20 74 6f 20 77 6f 72 6b 20  strated to work 
0b40: 77 69 74 68 20 31 30 20 74 69 6d 65 73 20 74 68  with 10 times th
0b50: 61 74 20 61 6d 6f 75 6e 74 0a 6f 66 20 74 72 61  at amount.of tra
0b60: 66 66 69 63 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ffic.</p>..<p>Th
0b70: 65 20 53 51 4c 69 74 65 20 77 65 62 73 69 74 65  e SQLite website
0b80: 20 28 5b 68 74 74 70 73 3a 2f 2f 77 77 77 2e 73   ([https://www.s
0b90: 71 6c 69 74 65 2e 6f 72 67 2f 5d 29 20 75 73 65  qlite.org/]) use
0ba0: 73 20 53 51 4c 69 74 65 20 69 74 73 65 6c 66 2c  s SQLite itself,
0bb0: 0a 6f 66 20 63 6f 75 72 73 65 2c 20 61 6e 64 20  .of course, and 
0bc0: 61 73 20 6f 66 20 74 68 69 73 20 77 72 69 74 69  as of this writi
0bd0: 6e 67 20 28 32 30 31 35 29 20 69 74 20 68 61 6e  ng (2015) it han
0be0: 64 6c 65 73 20 61 62 6f 75 74 20 34 30 30 4b 20  dles about 400K 
0bf0: 74 6f 20 35 30 30 4b 0a 48 54 54 50 20 72 65 71  to 500K.HTTP req
0c00: 75 65 73 74 73 20 70 65 72 20 64 61 79 2c 20 61  uests per day, a
0c10: 62 6f 75 74 20 31 35 2d 32 30 25 20 6f 66 20 77  bout 15-20% of w
0c20: 68 69 63 68 20 61 72 65 20 64 79 6e 61 6d 69 63  hich are dynamic
0c30: 20 70 61 67 65 73 20 74 6f 75 63 68 69 6e 67 0a   pages touching.
0c40: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 45  the database.  E
0c50: 61 63 68 20 64 79 6e 61 6d 69 63 20 70 61 67 65  ach dynamic page
0c60: 20 64 6f 65 73 20 72 6f 75 67 68 6c 79 20 32 30   does roughly 20
0c70: 30 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  0 SQL statements
0c80: 2e 0a 54 68 69 73 20 73 65 74 75 70 20 72 75 6e  ..This setup run
0c90: 73 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 56 4d  s on a single VM
0ca0: 20 74 68 61 74 20 73 68 61 72 65 73 20 61 20 70   that shares a p
0cb0: 68 79 73 69 63 61 6c 20 73 65 72 76 65 72 20 77  hysical server w
0cc0: 69 74 68 20 32 33 20 6f 74 68 65 72 73 0a 61 6e  ith 23 others.an
0cd0: 64 20 79 65 74 20 73 74 69 6c 6c 20 6b 65 65 70  d yet still keep
0ce0: 73 20 74 68 65 20 6c 6f 61 64 20 61 76 65 72 61  s the load avera
0cf0: 67 65 20 62 65 6c 6f 77 20 30 2e 31 20 6d 6f 73  ge below 0.1 mos
0d00: 74 20 6f 66 20 74 68 65 20 74 69 6d 65 2e 0a 3c  t of the time..<
0d10: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
0d20: 44 61 74 61 20 61 6e 61 6c 79 73 69 73 3c 2f 62  Data analysis</b
0d30: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 50 65 6f 70 6c  ></p>..<p>.Peopl
0d40: 65 20 77 68 6f 20 75 6e 64 65 72 73 74 61 6e 64  e who understand
0d50: 20 53 51 4c 20 63 61 6e 20 65 6d 70 6c 6f 79 20   SQL can employ 
0d60: 74 68 65 20 0a 5b 63 6f 6d 6d 61 6e 64 2d 6c 69  the .[command-li
0d70: 6e 65 20 73 68 65 6c 6c 7c 73 71 6c 69 74 65 33  ne shell|sqlite3
0d80: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68   command-line sh
0d90: 65 6c 6c 5d 20 28 6f 72 20 76 61 72 69 6f 75 73  ell] (or various
0da0: 20 74 68 69 72 64 2d 70 61 72 74 79 0a 53 51 4c   third-party.SQL
0db0: 69 74 65 20 61 63 63 65 73 73 20 70 72 6f 67 72  ite access progr
0dc0: 61 6d 73 29 20 74 6f 20 61 6e 61 6c 79 7a 65 20  ams) to analyze 
0dd0: 6c 61 72 67 65 0a 64 61 74 61 73 65 74 73 2e 20  large.datasets. 
0de0: 52 61 77 20 64 61 74 61 20 63 61 6e 20 62 65 20  Raw data can be 
0df0: 69 6d 70 6f 72 74 65 64 20 66 72 6f 6d 20 43 53  imported from CS
0e00: 56 20 66 69 6c 65 73 2c 20 74 68 65 6e 20 74 68  V files, then th
0e10: 61 74 0a 64 61 74 61 20 63 61 6e 20 62 65 20 73  at.data can be s
0e20: 6c 69 63 65 64 20 61 6e 64 20 64 69 63 65 64 20  liced and diced 
0e30: 74 6f 20 67 65 6e 65 72 61 74 65 20 61 20 6d 79  to generate a my
0e40: 72 69 61 64 20 6f 66 20 73 75 6d 6d 61 72 79 0a  riad of summary.
0e50: 72 65 70 6f 72 74 73 2e 20 20 4d 6f 72 65 20 63  reports.  More c
0e60: 6f 6d 70 6c 65 78 20 61 6e 61 6c 79 73 69 73 20  omplex analysis 
0e70: 63 61 6e 20 62 65 20 64 6f 6e 65 20 75 73 69 6e  can be done usin
0e80: 67 20 73 69 6d 70 6c 65 20 73 63 72 69 70 74 73  g simple scripts
0e90: 20 77 72 69 74 74 65 6e 0a 69 6e 20 54 63 6c 20   written.in Tcl 
0ea0: 6f 72 20 50 79 74 68 6f 6e 20 28 62 6f 74 68 20  or Python (both 
0eb0: 6f 66 20 77 68 69 63 68 20 63 6f 6d 65 20 77 69  of which come wi
0ec0: 74 68 20 53 51 4c 69 74 65 20 62 75 69 6c 74 2d  th SQLite built-
0ed0: 69 6e 29 20 6f 72 20 69 6e 20 52 20 6f 72 0a 6f  in) or in R or.o
0ee0: 74 68 65 72 20 6c 61 6e 67 75 61 67 65 73 20 75  ther languages u
0ef0: 73 69 6e 67 20 72 65 61 64 69 6c 79 20 61 76 61  sing readily ava
0f00: 69 6c 61 62 6c 65 20 61 64 61 70 74 6f 72 73 2e  ilable adaptors.
0f10: 0a 50 6f 73 73 69 62 6c 65 20 75 73 65 73 20 69  .Possible uses i
0f20: 6e 63 6c 75 64 65 20 77 65 62 73 69 74 65 20 6c  nclude website l
0f30: 6f 67 20 61 6e 61 6c 79 73 69 73 2c 20 73 70 6f  og analysis, spo
0f40: 72 74 73 0a 73 74 61 74 69 73 74 69 63 73 20 61  rts.statistics a
0f50: 6e 61 6c 79 73 69 73 2c 20 63 6f 6d 70 69 6c 61  nalysis, compila
0f60: 74 69 6f 6e 20 6f 66 20 70 72 6f 67 72 61 6d 6d  tion of programm
0f70: 69 6e 67 20 6d 65 74 72 69 63 73 2c 20 61 6e 64  ing metrics, and
0f80: 0a 61 6e 61 6c 79 73 69 73 20 6f 66 20 65 78 70  .analysis of exp
0f90: 65 72 69 6d 65 6e 74 61 6c 20 72 65 73 75 6c 74  erimental result
0fa0: 73 2e 20 20 4d 61 6e 79 20 62 69 6f 69 6e 66 6f  s.  Many bioinfo
0fb0: 72 6d 61 74 69 63 73 20 72 65 73 65 61 72 63 68  rmatics research
0fc0: 65 72 73 0a 75 73 65 20 53 51 4c 69 74 65 20 69  ers.use SQLite i
0fd0: 6e 20 74 68 69 73 20 77 61 79 2e 0a 3c 2f 70 3e  n this way..</p>
0fe0: 0a 0a 3c 70 3e 0a 54 68 65 20 73 61 6d 65 20 74  ..<p>.The same t
0ff0: 68 69 6e 67 20 63 61 6e 20 62 65 20 64 6f 6e 65  hing can be done
1000: 20 77 69 74 68 20 61 6e 20 65 6e 74 65 72 70 72   with an enterpr
1010: 69 73 65 20 63 6c 69 65 6e 74 2f 73 65 72 76 65  ise client/serve
1020: 72 0a 64 61 74 61 62 61 73 65 2c 20 6f 66 20 63  r.database, of c
1030: 6f 75 72 73 65 2e 20 20 54 68 65 20 61 64 76 61  ourse.  The adva
1040: 6e 74 61 67 65 20 6f 66 20 53 51 4c 69 74 65 20  ntage of SQLite 
1050: 69 73 0a 74 68 61 74 20 69 74 20 69 73 20 65 61  is.that it is ea
1060: 73 69 65 72 20 74 6f 20 69 6e 73 74 61 6c 6c 20  sier to install 
1070: 61 6e 64 20 75 73 65 20 61 6e 64 20 74 68 65 20  and use and the 
1080: 72 65 73 75 6c 74 69 6e 67 20 64 61 74 61 62 61  resulting databa
1090: 73 65 20 0a 69 73 20 61 20 73 69 6e 67 6c 65 20  se .is a single 
10a0: 66 69 6c 65 20 74 68 61 74 20 63 61 6e 20 62 65  file that can be
10b0: 20 77 72 69 74 74 65 6e 20 74 6f 20 61 20 55 53   written to a US
10c0: 42 20 6d 65 6d 6f 72 79 20 73 74 69 63 6b 0a 6f  B memory stick.o
10d0: 72 20 65 6d 61 69 6c 65 64 20 74 6f 20 61 20 63  r emailed to a c
10e0: 6f 6c 6c 65 61 67 75 65 2e 0a 3c 2f 70 3e 0a 3c  olleague..</p>.<
10f0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
1100: 43 61 63 68 65 20 66 6f 72 20 65 6e 74 65 72 70  Cache for enterp
1110: 72 69 73 65 20 64 61 74 61 3c 2f 62 3e 3c 2f 70  rise data</b></p
1120: 3e 0a 0a 3c 70 3e 0a 4d 61 6e 79 20 61 70 70 6c  >..<p>.Many appl
1130: 69 63 61 74 69 6f 6e 73 20 75 73 65 20 53 51 4c  ications use SQL
1140: 69 74 65 20 61 73 20 61 20 63 61 63 68 65 20 6f  ite as a cache o
1150: 66 20 72 65 6c 65 76 61 6e 74 20 63 6f 6e 74 65  f relevant conte
1160: 6e 74 20 66 72 6f 6d 0a 61 6e 20 65 6e 74 65 72  nt from.an enter
1170: 70 72 69 73 65 20 52 44 42 4d 53 2e 0a 54 68 69  prise RDBMS..Thi
1180: 73 20 72 65 64 75 63 65 73 20 6c 61 74 65 6e 63  s reduces latenc
1190: 79 2c 20 73 69 6e 63 65 20 6d 6f 73 74 20 71 75  y, since most qu
11a0: 65 72 69 65 73 20 6e 6f 77 20 6f 63 63 75 72 20  eries now occur 
11b0: 61 67 61 69 6e 73 74 20 74 68 65 20 6c 6f 63 61  against the loca
11c0: 6c 0a 63 61 63 68 65 20 61 6e 64 20 61 76 6f 69  l.cache and avoi
11d0: 64 20 61 20 6e 65 74 77 6f 72 6b 20 72 6f 75 6e  d a network roun
11e0: 64 2d 74 72 69 70 2e 20 20 49 74 20 61 6c 73 6f  d-trip.  It also
11f0: 20 72 65 64 75 63 65 73 20 74 68 65 20 6c 6f 61   reduces the loa
1200: 64 20 0a 6f 6e 20 74 68 65 20 6e 65 74 77 6f 72  d .on the networ
1210: 6b 20 61 6e 64 20 6f 6e 20 74 68 65 20 63 65 6e  k and on the cen
1220: 74 72 61 6c 20 64 61 74 61 62 61 73 65 20 73 65  tral database se
1230: 72 76 65 72 2e 20 20 41 6e 64 20 69 6e 20 6d 61  rver.  And in ma
1240: 6e 79 20 63 61 73 65 73 2c 20 0a 69 74 20 6d 65  ny cases, .it me
1250: 61 6e 73 20 74 68 61 74 20 74 68 65 20 63 6c 69  ans that the cli
1260: 65 6e 74 2d 73 69 64 65 20 61 70 70 6c 69 63 61  ent-side applica
1270: 74 69 6f 6e 20 63 61 6e 20 63 6f 6e 74 69 6e 75  tion can continu
1280: 65 20 6f 70 65 72 61 74 69 6e 67 20 64 75 72 69  e operating duri
1290: 6e 67 0a 6e 65 74 77 6f 72 6b 20 6f 75 74 61 67  ng.network outag
12a0: 65 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  es..</p>.</li>..
12b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
12c0: 20 73 65 72 76 65 72 73 69 64 65 64 62 20 7b 73   serversidedb {s
12d0: 65 72 76 65 72 2d 73 69 64 65 20 64 61 74 61 62  erver-side datab
12e0: 61 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 6c 69 3e 3c  ase}</tcl>.<li><
12f0: 70 3e 3c 62 3e 53 65 72 76 65 72 2d 73 69 64 65  p><b>Server-side
1300: 20 64 61 74 61 62 61 73 65 3c 2f 62 3e 3c 2f 70   database</b></p
1310: 3e 0a 0a 3c 70 3e 0a 53 79 73 74 65 6d 73 20 64  >..<p>.Systems d
1320: 65 73 69 67 6e 65 72 73 0a 72 65 70 6f 72 74 20  esigners.report 
1330: 73 75 63 63 65 73 73 20 75 73 69 6e 67 20 53 51  success using SQ
1340: 4c 69 74 65 20 61 73 20 61 20 64 61 74 61 20 73  Lite as a data s
1350: 74 6f 72 65 20 6f 6e 20 73 65 72 76 65 72 20 61  tore on server a
1360: 70 70 6c 69 63 61 74 69 6f 6e 73 0a 72 75 6e 6e  pplications.runn
1370: 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74 61 63  ing in the datac
1380: 65 6e 74 65 72 2c 20 6f 72 20 69 6e 20 6f 74 68  enter, or in oth
1390: 65 72 20 77 6f 72 64 73 2c 20 75 73 69 6e 67 20  er words, using 
13a0: 53 51 4c 69 74 65 20 61 73 20 74 68 65 20 75 6e  SQLite as the un
13b0: 64 65 72 6c 79 69 6e 67 0a 73 74 6f 72 61 67 65  derlying.storage
13c0: 20 65 6e 67 69 6e 65 20 66 6f 72 20 61 6e 20 61   engine for an a
13d0: 70 70 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69  pplication-speci
13e0: 66 69 63 20 64 61 74 61 62 61 73 65 20 73 65 72  fic database ser
13f0: 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74  ver.</p>..<p>Wit
1400: 68 20 74 68 69 73 20 70 61 74 74 65 72 6e 2c 20  h this pattern, 
1410: 74 68 65 20 6f 76 65 72 61 6c 6c 20 73 79 73 74  the overall syst
1420: 65 6d 20 69 73 20 73 74 69 6c 6c 20 63 6c 69 65  em is still clie
1430: 6e 74 2f 73 65 72 76 65 72 3a 0a 63 6c 69 65 6e  nt/server:.clien
1440: 74 73 20 73 65 6e 64 20 72 65 71 75 65 73 74 73  ts send requests
1450: 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 20 61   to the server a
1460: 6e 64 20 67 65 74 20 62 61 63 6b 20 72 65 70 6c  nd get back repl
1470: 69 65 73 20 6f 76 65 72 20 74 68 65 20 6e 65 74  ies over the net
1480: 77 6f 72 6b 2e 0a 42 75 74 20 69 6e 73 74 65 61  work..But instea
1490: 64 20 6f 66 20 73 65 6e 64 69 6e 67 20 67 65 6e  d of sending gen
14a0: 65 72 69 63 20 53 51 4c 20 61 6e 64 20 67 65 74  eric SQL and get
14b0: 74 69 6e 67 20 62 61 63 6b 20 72 61 77 20 74 61  ting back raw ta
14c0: 62 6c 65 20 63 6f 6e 74 65 6e 74 2c 20 0a 74 68  ble content, .th
14d0: 65 20 63 6c 69 65 6e 74 20 72 65 71 75 65 73 74  e client request
14e0: 73 20 61 6e 64 20 73 65 72 76 65 72 20 72 65 73  s and server res
14f0: 70 6f 6e 73 65 73 20 61 72 65 20 68 69 67 68 2d  ponses are high-
1500: 6c 65 76 65 6c 20 61 6e 64 20 0a 61 70 70 6c 69  level and .appli
1510: 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 2e  cation-specific.
1520: 0a 54 68 65 20 73 65 72 76 65 72 20 74 72 61 6e  .The server tran
1530: 73 6c 61 74 65 73 20 72 65 71 75 65 73 74 73 20  slates requests 
1540: 69 6e 74 6f 20 6d 75 6c 74 69 70 6c 65 20 53 51  into multiple SQ
1550: 4c 20 71 75 65 72 69 65 73 2c 20 67 61 74 68 65  L queries, gathe
1560: 72 73 20 74 68 65 0a 72 65 73 75 6c 74 73 2c 20  rs the.results, 
1570: 64 6f 65 73 20 70 6f 73 74 2d 70 72 6f 63 65 73  does post-proces
1580: 73 69 6e 67 2c 20 66 69 6c 74 65 72 69 6e 67 2c  sing, filtering,
1590: 20 61 6e 64 20 61 6e 61 6c 79 73 69 73 2c 20 74   and analysis, t
15a0: 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 73 0a 61  hen constructs.a
15b0: 20 68 69 67 68 2d 6c 65 76 65 6c 20 72 65 70 6c   high-level repl
15c0: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 6c  y containing onl
15d0: 79 20 74 68 65 20 65 73 73 65 6e 74 69 61 6c 20  y the essential 
15e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
15f0: 0a 0a 3c 70 3e 44 65 76 65 6c 6f 70 65 72 73 20  ..<p>Developers 
1600: 72 65 70 6f 72 74 20 74 68 61 74 20 53 51 4c 69  report that SQLi
1610: 74 65 20 69 73 20 6f 66 74 65 6e 20 66 61 73 74  te is often fast
1620: 65 72 20 74 68 61 6e 20 61 20 63 6c 69 65 6e 74  er than a client
1630: 2f 73 65 72 76 65 72 0a 53 51 4c 20 64 61 74 61  /server.SQL data
1640: 62 61 73 65 20 65 6e 67 69 6e 65 20 69 6e 20 74  base engine in t
1650: 68 69 73 20 73 63 65 6e 61 72 69 6f 2e 0a 44 61  his scenario..Da
1660: 74 61 62 61 73 65 20 72 65 71 75 65 73 74 73 20  tabase requests 
1670: 61 72 65 20 73 65 72 69 61 6c 69 7a 65 64 20 62  are serialized b
1680: 79 20 74 68 65 20 73 65 72 76 65 72 2c 20 73 6f  y the server, so
1690: 20 63 6f 6e 63 75 72 72 65 6e 63 79 20 69 73 20   concurrency is 
16a0: 6e 6f 74 0a 61 6e 20 69 73 73 75 65 2e 20 20 43  not.an issue.  C
16b0: 6f 6e 63 75 72 72 65 6e 63 79 20 69 73 20 61 6c  oncurrency is al
16c0: 73 6f 20 69 6d 70 72 6f 76 65 64 20 62 79 20 22  so improved by "
16d0: 64 61 74 61 62 61 73 65 20 73 68 61 72 64 69 6e  database shardin
16e0: 67 22 3a 0a 75 73 69 6e 67 20 73 65 70 61 72 61  g":.using separa
16f0: 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  te database file
1700: 73 20 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20  s for different 
1710: 73 75 62 64 6f 6d 61 69 6e 73 2e 20 20 46 6f 72  subdomains.  For
1720: 0a 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 73 65  .example, the se
1730: 72 76 65 72 20 6d 69 67 68 74 20 68 61 76 65 20  rver might have 
1740: 61 20 73 65 70 61 72 61 74 65 20 53 51 4c 69 74  a separate SQLit
1750: 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 65  e database for e
1760: 61 63 68 0a 75 73 65 72 2c 20 73 6f 20 74 68 61  ach.user, so tha
1770: 74 20 74 68 65 20 73 65 72 76 65 72 20 63 61 6e  t the server can
1780: 20 68 61 6e 64 6c 65 20 68 75 6e 64 72 65 64 73   handle hundreds
1790: 20 6f 72 20 74 68 6f 75 73 61 6e 64 73 20 6f 66   or thousands of
17a0: 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 0a 63 6f   simultaneous.co
17b0: 6e 6e 65 63 74 69 6f 6e 73 2c 20 62 75 74 20 65  nnections, but e
17c0: 61 63 68 20 53 51 4c 69 74 65 20 64 61 74 61 62  ach SQLite datab
17d0: 61 73 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ase is only used
17e0: 20 62 79 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69   by one connecti
17f0: 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 2f 6c 69 3e 0a  on.</p>...</li>.
1800: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 46 69 6c 65 20  .<li><p><b>File 
1810: 61 72 63 68 69 76 65 73 3c 2f 62 3e 3c 2f 70 3e  archives</b></p>
1820: 0a 0a 3c 70 3e 0a 54 68 65 20 5b 68 74 74 70 73  ..<p>.The [https
1830: 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
1840: 67 2f 73 71 6c 61 72 7c 53 51 4c 69 74 65 20 41  g/sqlar|SQLite A
1850: 72 63 68 69 76 65 72 5d 20 70 72 6f 6a 65 63 74  rchiver] project
1860: 20 73 68 6f 77 73 20 68 6f 77 0a 53 51 4c 69 74   shows how.SQLit
1870: 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 73  e can be used as
1880: 20 61 20 73 75 62 73 74 69 74 75 74 65 20 66 6f   a substitute fo
1890: 72 20 5a 49 50 20 61 72 63 68 69 76 65 73 20 6f  r ZIP archives o
18a0: 72 20 54 61 72 62 61 6c 6c 73 2e 0a 41 6e 20 61  r Tarballs..An a
18b0: 72 63 68 69 76 65 20 6f 66 20 66 69 6c 65 73 20  rchive of files 
18c0: 73 74 6f 72 65 64 20 69 6e 20 53 51 4c 69 74 65  stored in SQLite
18d0: 20 69 73 20 6f 6e 6c 79 20 76 65 72 79 20 73 6c   is only very sl
18e0: 69 67 68 74 6c 79 20 6c 61 72 67 65 72 2c 20 61  ightly larger, a
18f0: 6e 64 0a 69 6e 20 73 6f 6d 65 20 63 61 73 65 73  nd.in some cases
1900: 20 61 63 74 75 61 6c 6c 79 20 73 6d 61 6c 6c 65   actually smalle
1910: 72 2c 20 74 68 61 6e 20 74 68 65 20 65 71 75 69  r, than the equi
1920: 76 61 6c 65 6e 74 20 5a 49 50 20 61 72 63 68 69  valent ZIP archi
1930: 76 65 2e 0a 41 6e 64 20 61 6e 20 53 51 4c 69 74  ve..And an SQLit
1940: 65 20 61 72 63 68 69 76 65 20 66 65 61 74 75 72  e archive featur
1950: 65 73 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 61  es incremental a
1960: 6e 64 20 61 74 6f 6d 69 63 20 75 70 64 61 74 69  nd atomic updati
1970: 6e 67 0a 61 6e 64 20 74 68 65 20 61 62 69 6c 69  ng.and the abili
1980: 74 79 20 74 6f 20 73 74 6f 72 65 20 6d 75 63 68  ty to store much
1990: 20 72 69 63 68 65 72 20 6d 65 74 61 64 61 74 61   richer metadata
19a0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74  ..</p>..<p>SQLit
19b0: 65 20 61 72 63 68 69 76 65 73 20 61 72 65 20 75  e archives are u
19c0: 73 65 66 75 6c 20 61 73 20 74 68 65 20 64 69 73  seful as the dis
19d0: 74 72 69 62 75 74 69 6f 6e 20 66 6f 72 6d 61 74  tribution format
19e0: 20 66 6f 72 20 73 6f 66 74 77 61 72 65 0a 6f 72   for software.or
19f0: 20 63 6f 6e 74 65 6e 74 20 75 70 64 61 74 65 73   content updates
1a00: 20 74 68 61 74 20 61 72 65 20 62 72 6f 61 64 63   that are broadc
1a10: 61 73 74 20 74 6f 20 6d 61 6e 79 20 63 6c 69 65  ast to many clie
1a20: 6e 74 73 2e 20 20 56 61 72 69 61 74 69 6f 6e 73  nts.  Variations
1a30: 0a 6f 6e 20 74 68 69 73 20 69 64 65 61 20 61 72  .on this idea ar
1a40: 65 20 75 73 65 64 2c 20 66 6f 72 20 65 78 61 6d  e used, for exam
1a50: 70 6c 65 2c 20 74 6f 20 74 72 61 6e 73 6d 69 74  ple, to transmit
1a60: 20 54 56 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20   TV programming 
1a70: 67 75 69 64 65 73 0a 74 6f 20 73 65 74 2d 74 6f  guides.to set-to
1a80: 70 20 62 6f 78 65 73 20 61 6e 64 20 74 6f 20 73  p boxes and to s
1a90: 65 6e 64 20 6f 76 65 72 2d 74 68 65 2d 61 69 72  end over-the-air
1aa0: 20 75 70 64 61 74 65 73 20 74 6f 20 76 65 68 69   updates to vehi
1ab0: 63 6c 65 20 6e 61 76 69 67 61 74 69 6f 6e 0a 73  cle navigation.s
1ac0: 79 73 74 65 6d 73 2e 3c 2f 70 3e 0a 3c 2f 6c 69  ystems.</p>.</li
1ad0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 52 65 70  >..<li><p><b>Rep
1ae0: 6c 61 63 65 6d 65 6e 74 20 66 6f 72 20 3c 69 3e  lacement for <i>
1af0: 61 64 20 68 6f 63 3c 2f 69 3e 20 64 69 73 6b 20  ad hoc</i> disk 
1b00: 66 69 6c 65 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c  files</b></p>..<
1b10: 70 3e 4d 61 6e 79 20 70 72 6f 67 72 61 6d 73 20  p>Many programs 
1b20: 75 73 65 20 0a 5b 68 74 74 70 3a 2f 2f 6d 61 6e  use .[http://man
1b30: 2e 68 65 2e 6e 65 74 2f 6d 61 6e 33 2f 66 6f 70  .he.net/man3/fop
1b40: 65 6e 20 7c 20 66 6f 70 65 6e 28 29 5d 2c 0a 5b  en | fopen()],.[
1b50: 68 74 74 70 3a 2f 2f 6d 61 6e 2e 68 65 2e 6e 65  http://man.he.ne
1b60: 74 2f 6d 61 6e 33 2f 66 72 65 61 64 20 7c 20 66  t/man3/fread | f
1b70: 72 65 61 64 28 29 5d 2c 20 61 6e 64 20 0a 5b 68  read()], and .[h
1b80: 74 74 70 3a 2f 2f 6d 61 6e 2e 68 65 2e 6e 65 74  ttp://man.he.net
1b90: 2f 6d 61 6e 33 2f 66 77 72 69 74 65 20 7c 20 66  /man3/fwrite | f
1ba0: 77 72 69 74 65 28 29 5d 20 74 6f 20 63 72 65 61  write()] to crea
1bb0: 74 65 20 61 6e 64 0a 6d 61 6e 61 67 65 20 66 69  te and.manage fi
1bc0: 6c 65 73 20 6f 66 20 64 61 74 61 20 69 6e 20 68  les of data in h
1bd0: 6f 6d 65 2d 67 72 6f 77 6e 20 66 6f 72 6d 61 74  ome-grown format
1be0: 73 2e 20 20 53 51 4c 69 74 65 20 77 6f 72 6b 73  s.  SQLite works
1bf0: 20 0a 70 61 72 74 69 63 75 6c 61 72 6c 79 20 77   .particularly w
1c00: 65 6c 6c 20 61 73 20 61 0a 72 65 70 6c 61 63 65  ell as a.replace
1c10: 6d 65 6e 74 20 66 6f 72 20 74 68 65 73 65 20 3c  ment for these <
1c20: 69 3e 61 64 20 68 6f 63 3c 2f 69 3e 20 64 61 74  i>ad hoc</i> dat
1c30: 61 20 66 69 6c 65 73 2e 3c 2f 70 3e 0a 3c 2f 6c  a files.</p>.</l
1c40: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 6e  i>..<li><p><b>In
1c50: 74 65 72 6e 61 6c 20 6f 72 20 74 65 6d 70 6f 72  ternal or tempor
1c60: 61 72 79 20 64 61 74 61 62 61 73 65 73 3c 2f 62  ary databases</b
1c70: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 20 70  ></p>..<p>.For p
1c80: 72 6f 67 72 61 6d 73 20 74 68 61 74 20 68 61 76  rograms that hav
1c90: 65 20 61 20 6c 6f 74 20 6f 66 20 64 61 74 61 20  e a lot of data 
1ca0: 74 68 61 74 20 6d 75 73 74 20 62 65 20 73 69 66  that must be sif
1cb0: 74 65 64 20 61 6e 64 20 73 6f 72 74 65 64 0a 69  ted and sorted.i
1cc0: 6e 20 64 69 76 65 72 73 65 20 77 61 79 73 2c 20  n diverse ways, 
1cd0: 69 74 20 69 73 20 6f 66 74 65 6e 20 65 61 73 69  it is often easi
1ce0: 65 72 20 61 6e 64 20 71 75 69 63 6b 65 72 20 74  er and quicker t
1cf0: 6f 20 6c 6f 61 64 20 74 68 65 20 64 61 74 61 20  o load the data 
1d00: 69 6e 74 6f 0a 61 6e 20 69 6e 2d 6d 65 6d 6f 72  into.an in-memor
1d10: 79 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  y SQLite databas
1d20: 65 20 61 6e 64 20 75 73 65 20 71 75 65 72 69 65  e and use querie
1d30: 73 20 77 69 74 68 20 6a 6f 69 6e 73 20 61 6e 64  s with joins and
1d40: 20 4f 52 44 45 52 20 42 59 0a 63 6c 61 75 73 65   ORDER BY.clause
1d50: 73 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  s to extract the
1d60: 20 64 61 74 61 20 69 6e 20 74 68 65 20 66 6f 72   data in the for
1d70: 6d 20 61 6e 64 20 6f 72 64 65 72 20 6e 65 65 64  m and order need
1d80: 65 64 20 72 61 74 68 65 72 20 74 68 61 6e 0a 74  ed rather than.t
1d90: 6f 20 74 72 79 20 74 6f 20 63 6f 64 65 20 74 68  o try to code th
1da0: 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
1db0: 73 20 6d 61 6e 75 61 6c 6c 79 2e 0a 55 73 69 6e  s manually..Usin
1dc0: 67 20 61 6e 20 53 51 4c 20 64 61 74 61 62 61 73  g an SQL databas
1dd0: 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 69 6e 20  e internally in 
1de0: 74 68 69 73 20 77 61 79 20 61 6c 73 6f 20 67 69  this way also gi
1df0: 76 65 73 20 74 68 65 20 70 72 6f 67 72 61 6d 0a  ves the program.
1e00: 67 72 65 61 74 65 72 20 66 6c 65 78 69 62 69 6c  greater flexibil
1e10: 69 74 79 20 73 69 6e 63 65 20 6e 65 77 20 63 6f  ity since new co
1e20: 6c 75 6d 6e 73 20 61 6e 64 20 69 6e 64 69 63 65  lumns and indice
1e30: 73 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 77  s can be added w
1e40: 69 74 68 6f 75 74 0a 68 61 76 69 6e 67 20 74 6f  ithout.having to
1e50: 20 72 65 63 6f 64 65 20 65 76 65 72 79 20 71 75   recode every qu
1e60: 65 72 79 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a  ery..</p>.</li>.
1e70: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 53 74 61 6e 64  .<li><p><b>Stand
1e80: 2d 69 6e 20 66 6f 72 20 61 6e 20 65 6e 74 65 72  -in for an enter
1e90: 70 72 69 73 65 20 64 61 74 61 62 61 73 65 20 64  prise database d
1ea0: 75 72 69 6e 67 20 64 65 6d 6f 73 20 6f 72 20 74  uring demos or t
1eb0: 65 73 74 69 6e 67 3c 2f 62 3e 3c 2f 70 3e 0a 0a  esting</b></p>..
1ec0: 3c 70 3e 0a 43 6c 69 65 6e 74 20 61 70 70 6c 69  <p>.Client appli
1ed0: 63 61 74 69 6f 6e 73 20 74 79 70 69 63 61 6c 6c  cations typicall
1ee0: 79 20 75 73 65 20 61 20 67 65 6e 65 72 69 63 20  y use a generic 
1ef0: 64 61 74 61 62 61 73 65 20 69 6e 74 65 72 66 61  database interfa
1f00: 63 65 20 74 68 61 74 20 61 6c 6c 6f 77 73 0a 63  ce that allows.c
1f10: 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 76 61  onnections to va
1f20: 72 69 6f 75 73 20 53 51 4c 20 64 61 74 61 62 61  rious SQL databa
1f30: 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 49 74 20  se engines.  It 
1f40: 6d 61 6b 65 73 20 67 6f 6f 64 20 73 65 6e 73 65  makes good sense
1f50: 20 74 6f 20 0a 69 6e 63 6c 75 64 65 20 53 51 4c   to .include SQL
1f60: 69 74 65 20 69 6e 20 74 68 65 20 6d 69 78 20 6f  ite in the mix o
1f70: 66 20 73 75 70 70 6f 72 74 65 64 20 64 61 74 61  f supported data
1f80: 62 61 73 65 73 20 61 6e 64 20 74 6f 20 73 74 61  bases and to sta
1f90: 74 69 63 61 6c 6c 79 0a 6c 69 6e 6b 20 74 68 65  tically.link the
1fa0: 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 69   SQLite engine i
1fb0: 6e 20 77 69 74 68 20 74 68 65 20 63 6c 69 65 6e  n with the clien
1fc0: 74 2e 20 20 54 68 61 74 20 77 61 79 20 74 68 65  t.  That way the
1fd0: 20 63 6c 69 65 6e 74 20 70 72 6f 67 72 61 6d 0a   client program.
1fe0: 63 61 6e 20 62 65 20 75 73 65 64 20 73 74 61 6e  can be used stan
1ff0: 64 61 6c 6f 6e 65 20 77 69 74 68 20 61 6e 20 53  dalone with an S
2000: 51 4c 69 74 65 20 64 61 74 61 20 66 69 6c 65 20  QLite data file 
2010: 66 6f 72 20 74 65 73 74 69 6e 67 20 6f 72 20 66  for testing or f
2020: 6f 72 0a 64 65 6d 6f 6e 73 74 72 61 74 69 6f 6e  or.demonstration
2030: 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c  s..</p>.</li>..<
2040: 6c 69 3e 3c 70 3e 3c 62 3e 45 64 75 63 61 74 69  li><p><b>Educati
2050: 6f 6e 20 61 6e 64 20 54 72 61 69 6e 69 6e 67 3c  on and Training<
2060: 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 42 65 63  /b></p>..<p>.Bec
2070: 61 75 73 65 20 69 74 20 69 73 20 73 69 6d 70 6c  ause it is simpl
2080: 65 20 74 6f 20 73 65 74 75 70 20 61 6e 64 20 75  e to setup and u
2090: 73 65 20 28 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  se (installation
20a0: 20 69 73 20 74 72 69 76 69 61 6c 3a 20 6a 75 73   is trivial: jus
20b0: 74 0a 63 6f 70 79 20 74 68 65 20 3c 62 3e 73 71  t.copy the <b>sq
20c0: 6c 69 74 65 33 3c 2f 62 3e 20 6f 72 20 3c 62 3e  lite3</b> or <b>
20d0: 73 71 6c 69 74 65 33 2e 65 78 65 3c 2f 62 3e 20  sqlite3.exe</b> 
20e0: 65 78 65 63 75 74 61 62 6c 65 20 74 6f 20 74 68  executable to th
20f0: 65 20 74 61 72 67 65 74 20 6d 61 63 68 69 6e 65  e target machine
2100: 0a 61 6e 64 20 72 75 6e 20 69 74 29 20 53 51 4c  .and run it) SQL
2110: 69 74 65 20 6d 61 6b 65 73 20 61 20 67 6f 6f 64  ite makes a good
2120: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
2130: 20 66 6f 72 20 75 73 65 20 69 6e 20 74 65 61 63   for use in teac
2140: 68 69 6e 67 20 53 51 4c 2e 0a 53 74 75 64 65 6e  hing SQL..Studen
2150: 74 73 20 63 61 6e 20 65 61 73 69 6c 79 20 63 72  ts can easily cr
2160: 65 61 74 65 20 61 73 20 6d 61 6e 79 20 64 61 74  eate as many dat
2170: 61 62 61 73 65 73 20 61 73 20 74 68 65 79 20 6c  abases as they l
2180: 69 6b 65 20 61 6e 64 20 63 61 6e 0a 65 6d 61 69  ike and can.emai
2190: 6c 20 64 61 74 61 62 61 73 65 73 20 74 6f 20 74  l databases to t
21a0: 68 65 20 69 6e 73 74 72 75 63 74 6f 72 20 66 6f  he instructor fo
21b0: 72 20 63 6f 6d 6d 65 6e 74 73 20 6f 72 20 67 72  r comments or gr
21c0: 61 64 69 6e 67 2e 20 20 46 6f 72 20 6d 6f 72 65  ading.  For more
21d0: 0a 61 64 76 61 6e 63 65 64 20 73 74 75 64 65 6e  .advanced studen
21e0: 74 73 20 77 68 6f 20 61 72 65 20 69 6e 74 65 72  ts who are inter
21f0: 65 73 74 65 64 20 69 6e 20 73 74 75 64 79 69 6e  ested in studyin
2200: 67 20 68 6f 77 20 61 6e 20 52 44 42 4d 53 20 69  g how an RDBMS i
2210: 73 0a 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20 74  s.implemented, t
2220: 68 65 20 6d 6f 64 75 6c 61 72 20 61 6e 64 20 77  he modular and w
2230: 65 6c 6c 2d 63 6f 6d 6d 65 6e 74 65 64 20 61 6e  ell-commented an
2240: 64 20 64 6f 63 75 6d 65 6e 74 65 64 20 53 51 4c  d documented SQL
2250: 69 74 65 20 63 6f 64 65 0a 63 61 6e 20 73 65 72  ite code.can ser
2260: 76 65 20 61 73 20 61 20 67 6f 6f 64 20 62 61 73  ve as a good bas
2270: 69 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  is..</p>.</li>..
2280: 3c 6c 69 3e 3c 70 3e 3c 62 3e 45 78 70 65 72 69  <li><p><b>Experi
2290: 6d 65 6e 74 61 6c 20 53 51 4c 20 6c 61 6e 67 75  mental SQL langu
22a0: 61 67 65 20 65 78 74 65 6e 73 69 6f 6e 73 3c 2f  age extensions</
22b0: 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  b></p>..<p>The s
22c0: 69 6d 70 6c 65 2c 20 6d 6f 64 75 6c 61 72 20 64  imple, modular d
22d0: 65 73 69 67 6e 20 6f 66 20 53 51 4c 69 74 65 20  esign of SQLite 
22e0: 6d 61 6b 65 73 20 69 74 20 61 20 67 6f 6f 64 20  makes it a good 
22f0: 70 6c 61 74 66 6f 72 6d 20 66 6f 72 0a 70 72 6f  platform for.pro
2300: 74 6f 74 79 70 69 6e 67 20 6e 65 77 2c 20 65 78  totyping new, ex
2310: 70 65 72 69 6d 65 6e 74 61 6c 20 64 61 74 61 62  perimental datab
2320: 61 73 65 20 6c 61 6e 67 75 61 67 65 20 66 65 61  ase language fea
2330: 74 75 72 65 73 20 6f 72 20 69 64 65 61 73 2e 0a  tures or ideas..
2340: 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 0a 3c 2f 75  </p>.</li>...</u
2350: 6c 3e 0a 0a 3c 68 32 3e 53 69 74 75 61 74 69 6f  l>..<h2>Situatio
2360: 6e 73 20 57 68 65 72 65 20 41 20 43 6c 69 65 6e  ns Where A Clien
2370: 74 2f 53 65 72 76 65 72 20 52 44 42 4d 53 20 4d  t/Server RDBMS M
2380: 61 79 20 57 6f 72 6b 20 42 65 74 74 65 72 3c 2f  ay Work Better</
2390: 68 32 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  h2>..<ul>.<li><p
23a0: 3e 3c 62 3e 43 6c 69 65 6e 74 2f 53 65 72 76 65  ><b>Client/Serve
23b0: 72 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 3c 2f  r Applications</
23c0: 62 3e 3c 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65  b><p>..<p>If the
23d0: 72 65 20 61 72 65 20 6d 61 6e 79 20 63 6c 69 65  re are many clie
23e0: 6e 74 20 70 72 6f 67 72 61 6d 73 20 73 65 6e 64  nt programs send
23f0: 69 6e 67 20 53 51 4c 20 74 6f 20 74 68 65 20 73  ing SQL to the s
2400: 61 6d 65 20 0a 64 61 74 61 62 61 73 65 20 6f 76  ame .database ov
2410: 65 72 20 61 20 6e 65 74 77 6f 72 6b 2c 20 74 68  er a network, th
2420: 65 6e 20 75 73 65 20 61 20 63 6c 69 65 6e 74 2f  en use a client/
2430: 73 65 72 76 65 72 20 64 61 74 61 62 61 73 65 0a  server database.
2440: 65 6e 67 69 6e 65 20 69 6e 73 74 65 61 64 20 6f  engine instead o
2450: 66 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69 74  f SQLite.  SQLit
2460: 65 20 77 69 6c 6c 20 77 6f 72 6b 20 6f 76 65 72  e will work over
2470: 20 61 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73   a network files
2480: 79 73 74 65 6d 2c 0a 62 75 74 20 62 65 63 61 75  ystem,.but becau
2490: 73 65 20 6f 66 20 74 68 65 20 6c 61 74 65 6e 63  se of the latenc
24a0: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
24b0: 68 20 6d 6f 73 74 20 6e 65 74 77 6f 72 6b 20 66  h most network f
24c0: 69 6c 65 73 79 73 74 65 6d 73 2c 0a 70 65 72 66  ilesystems,.perf
24d0: 6f 72 6d 61 6e 63 65 20 77 69 6c 6c 20 6e 6f 74  ormance will not
24e0: 20 62 65 20 67 72 65 61 74 2e 20 20 41 6c 73 6f   be great.  Also
24f0: 2c 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 6c  , file locking l
2500: 6f 67 69 63 20 69 73 20 62 75 67 67 79 0a 6d 61  ogic is buggy.ma
2510: 6e 79 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73  ny network files
2520: 79 73 74 65 6d 20 69 6d 70 6c 65 6d 65 6e 74 61  ystem implementa
2530: 74 69 6f 6e 73 20 28 6f 6e 20 62 6f 74 68 20 55  tions (on both U
2540: 6e 69 78 20 61 6e 64 20 57 69 6e 64 6f 77 73 29  nix and Windows)
2550: 2e 0a 49 66 20 66 69 6c 65 20 6c 6f 63 6b 69 6e  ..If file lockin
2560: 67 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20  g does not work 
2570: 63 6f 72 72 65 63 74 6c 79 2c 0a 74 77 6f 20 6f  correctly,.two o
2580: 72 20 6d 6f 72 65 20 63 6c 69 65 6e 74 73 20 6d  r more clients m
2590: 69 67 68 74 20 74 72 79 20 74 6f 20 6d 6f 64 69  ight try to modi
25a0: 66 79 20 74 68 65 0a 73 61 6d 65 20 70 61 72 74  fy the.same part
25b0: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 64 61 74   of the same dat
25c0: 61 62 61 73 65 20 61 74 20 74 68 65 20 73 61 6d  abase at the sam
25d0: 65 20 74 69 6d 65 2c 20 72 65 73 75 6c 74 69 6e  e time, resultin
25e0: 67 20 69 6e 20 0a 63 6f 72 72 75 70 74 69 6f 6e  g in .corruption
25f0: 2e 20 20 42 65 63 61 75 73 65 20 74 68 69 73 20  .  Because this 
2600: 70 72 6f 62 6c 65 6d 20 72 65 73 75 6c 74 73 20  problem results 
2610: 66 72 6f 6d 20 62 75 67 73 20 69 6e 0a 74 68 65  from bugs in.the
2620: 20 75 6e 64 65 72 6c 79 69 6e 67 20 66 69 6c 65   underlying file
2630: 73 79 73 74 65 6d 20 69 6d 70 6c 65 6d 65 6e 74  system implement
2640: 61 74 69 6f 6e 2c 20 74 68 65 72 65 20 69 73 20  ation, there is 
2650: 6e 6f 74 68 69 6e 67 20 53 51 4c 69 74 65 0a 63  nothing SQLite.c
2660: 61 6e 20 64 6f 20 74 6f 20 70 72 65 76 65 6e 74  an do to prevent
2670: 20 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 67   it.</p>..<p>A g
2680: 6f 6f 64 20 72 75 6c 65 20 6f 66 20 74 68 75 6d  ood rule of thum
2690: 62 20 69 73 20 74 6f 20 61 76 6f 69 64 20 75 73  b is to avoid us
26a0: 69 6e 67 20 53 51 4c 69 74 65 0a 69 6e 20 73 69  ing SQLite.in si
26b0: 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20 74  tuations where t
26c0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
26d0: 20 77 69 6c 6c 20 62 65 20 61 63 63 65 73 73 65   will be accesse
26e0: 64 20 64 69 72 65 63 74 6c 79 0a 28 77 69 74 68  d directly.(with
26f0: 6f 75 74 20 61 6e 20 69 6e 74 65 72 76 65 6e 69  out an interveni
2700: 6e 67 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 73  ng application s
2710: 65 72 76 65 72 29 20 61 6e 64 20 73 69 6d 75 6c  erver) and simul
2720: 74 61 6e 65 6f 75 73 6c 79 0a 66 72 6f 6d 20 6d  taneously.from m
2730: 61 6e 79 20 63 6f 6d 70 75 74 65 72 73 20 6f 76  any computers ov
2740: 65 72 20 61 20 6e 65 74 77 6f 72 6b 2e 3c 2f 70  er a network.</p
2750: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  >.</li>..<li><p>
2760: 3c 62 3e 48 69 67 68 2d 76 6f 6c 75 6d 65 20 57  <b>High-volume W
2770: 65 62 73 69 74 65 73 3c 2f 62 3e 3c 2f 70 3e 0a  ebsites</b></p>.
2780: 0a 3c 70 3e 53 51 4c 69 74 65 20 77 69 6c 6c 20  .<p>SQLite will 
2790: 6e 6f 72 6d 61 6c 6c 79 20 77 6f 72 6b 20 66 69  normally work fi
27a0: 6e 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ne as the databa
27b0: 73 65 20 62 61 63 6b 65 6e 64 20 74 6f 20 61 20  se backend to a 
27c0: 77 65 62 73 69 74 65 2e 0a 42 75 74 20 69 66 20  website..But if 
27d0: 74 68 65 20 77 65 62 73 69 74 65 20 69 73 20 77  the website is w
27e0: 72 69 74 65 2d 69 6e 74 65 6e 73 69 76 65 20 6f  rite-intensive o
27f0: 72 20 69 73 20 73 6f 20 62 75 73 79 20 74 68 61  r is so busy tha
2800: 74 20 69 74 20 72 65 71 75 69 72 65 73 0a 6d 75  t it requires.mu
2810: 6c 74 69 70 6c 65 20 73 65 72 76 65 72 73 2c 20  ltiple servers, 
2820: 74 68 65 6e 20 63 6f 6e 73 69 64 65 72 20 75 73  then consider us
2830: 69 6e 67 20 61 6e 20 65 6e 74 65 72 70 72 69 73  ing an enterpris
2840: 65 2d 63 6c 61 73 73 20 63 6c 69 65 6e 74 2f 73  e-class client/s
2850: 65 72 76 65 72 20 0a 64 61 74 61 62 61 73 65 20  erver .database 
2860: 65 6e 67 69 6e 65 20 69 6e 73 74 65 61 64 20 6f  engine instead o
2870: 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 3c 2f  f SQLite.</p>.</
2880: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 56  li>..<li><p><b>V
2890: 65 72 79 20 6c 61 72 67 65 20 64 61 74 61 73 65  ery large datase
28a0: 74 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41  ts</b></p>..<p>A
28b0: 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
28c0: 65 20 69 73 20 6c 69 6d 69 74 65 64 20 69 6e 20  e is limited in 
28d0: 73 69 7a 65 20 74 6f 20 31 34 30 20 74 65 72 61  size to 140 tera
28e0: 62 79 74 65 73 20 0a 28 32 3c 73 75 70 3e 3c 73  bytes .(2<sup><s
28f0: 6d 61 6c 6c 3e 34 37 3c 2f 73 6d 61 6c 6c 3e 3c  mall>47</small><
2900: 2f 73 75 70 3e 20 62 79 74 65 73 2c 20 31 32 38  /sup> bytes, 128
2910: 20 74 69 62 69 62 79 74 65 73 29 2e 0a 41 6e 64   tibibytes)..And
2920: 20 65 76 65 6e 20 69 66 20 69 74 20 63 6f 75 6c   even if it coul
2930: 64 20 68 61 6e 64 6c 65 20 6c 61 72 67 65 72 20  d handle larger 
2940: 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74  databases, SQLit
2950: 65 20 73 74 6f 72 65 73 20 74 68 65 20 65 6e 74  e stores the ent
2960: 69 72 65 0a 64 61 74 61 62 61 73 65 20 69 6e 20  ire.database in 
2970: 61 20 73 69 6e 67 6c 65 20 64 69 73 6b 20 66 69  a single disk fi
2980: 6c 65 20 61 6e 64 20 6d 61 6e 79 20 66 69 6c 65  le and many file
2990: 73 79 73 74 65 6d 73 20 6c 69 6d 69 74 20 74 68  systems limit th
29a0: 65 20 6d 61 78 69 6d 75 6d 0a 73 69 7a 65 20 6f  e maximum.size o
29b0: 66 20 66 69 6c 65 73 20 74 6f 20 73 6f 6d 65 74  f files to somet
29c0: 68 69 6e 67 20 6c 65 73 73 20 74 68 61 6e 20 74  hing less than t
29d0: 68 69 73 2e 20 20 53 6f 20 69 66 20 79 6f 75 20  his.  So if you 
29e0: 61 72 65 20 63 6f 6e 74 65 6d 70 6c 61 74 69 6e  are contemplatin
29f0: 67 0a 64 61 74 61 62 61 73 65 73 20 6f 66 20 74  g.databases of t
2a00: 68 69 73 20 6d 61 67 6e 69 74 75 64 65 2c 20 79  his magnitude, y
2a10: 6f 75 20 77 6f 75 6c 64 20 64 6f 20 77 65 6c 6c  ou would do well
2a20: 20 74 6f 20 63 6f 6e 73 69 64 65 72 20 75 73 69   to consider usi
2a30: 6e 67 20 61 0a 63 6c 69 65 6e 74 2f 73 65 72 76  ng a.client/serv
2a40: 65 72 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  er database engi
2a50: 6e 65 20 74 68 61 74 20 73 70 72 65 61 64 73 20  ne that spreads 
2a60: 69 74 73 20 63 6f 6e 74 65 6e 74 20 61 63 72 6f  its content acro
2a70: 73 73 20 6d 75 6c 74 69 70 6c 65 0a 64 69 73 6b  ss multiple.disk
2a80: 20 66 69 6c 65 73 2c 20 61 6e 64 20 70 65 72 68   files, and perh
2a90: 61 70 73 20 61 63 72 6f 73 73 20 6d 75 6c 74 69  aps across multi
2aa0: 70 6c 65 20 76 6f 6c 75 6d 65 73 2e 0a 3c 2f 70  ple volumes..</p
2ab0: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  >.</li>..<li><p>
2ac0: 3c 62 3e 48 69 67 68 20 43 6f 6e 63 75 72 72 65  <b>High Concurre
2ad0: 6e 63 79 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e  ncy</b></p>..<p>
2ae0: 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73  .SQLite supports
2af0: 20 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75   an unlimited nu
2b00: 6d 62 65 72 20 6f 66 20 73 69 6d 75 6c 74 61 6e  mber of simultan
2b10: 65 6f 75 73 20 72 65 61 64 65 72 73 2c 20 62 75  eous readers, bu
2b20: 74 20 69 74 20 0a 77 69 6c 6c 20 6f 6e 6c 79 20  t it .will only 
2b30: 61 6c 6c 6f 77 20 6f 6e 65 20 77 72 69 74 65 72  allow one writer
2b40: 20 61 74 20 61 6e 79 20 69 6e 73 74 61 6e 74 20   at any instant 
2b50: 69 6e 20 74 69 6d 65 2e 0a 46 6f 72 20 6d 61 6e  in time..For man
2b60: 79 20 73 69 74 75 61 74 69 6f 6e 73 2c 20 74 68  y situations, th
2b70: 69 73 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  is is not a prob
2b80: 6c 65 6d 2e 20 20 57 72 69 74 65 72 20 71 75 65  lem.  Writer que
2b90: 75 65 20 75 70 2e 20 45 61 63 68 20 61 70 70 6c  ue up. Each appl
2ba0: 69 63 61 74 69 6f 6e 0a 64 6f 65 73 20 69 74 73  ication.does its
2bb0: 20 64 61 74 61 62 61 73 65 20 77 6f 72 6b 20 71   database work q
2bc0: 75 69 63 6b 6c 79 20 61 6e 64 20 6d 6f 76 65 73  uickly and moves
2bd0: 20 6f 6e 2c 20 61 6e 64 20 6e 6f 20 6c 6f 63 6b   on, and no lock
2be0: 20 6c 61 73 74 73 20 66 6f 72 20 6d 6f 72 65 0a   lasts for more.
2bf0: 74 68 61 6e 20 61 20 66 65 77 20 64 6f 7a 65 6e  than a few dozen
2c00: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2e 20 42   milliseconds. B
2c10: 75 74 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d  ut there are som
2c20: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74  e applications t
2c30: 68 61 74 20 72 65 71 75 69 72 65 0a 6d 6f 72 65  hat require.more
2c40: 20 63 6f 6e 63 75 72 72 65 6e 63 79 2c 20 61 6e   concurrency, an
2c50: 64 20 74 68 6f 73 65 20 61 70 70 6c 69 63 61 74  d those applicat
2c60: 69 6f 6e 73 20 6d 61 79 20 6e 65 65 64 20 74 6f  ions may need to
2c70: 20 73 65 65 6b 20 61 20 64 69 66 66 65 72 65 6e   seek a differen
2c80: 74 0a 73 6f 6c 75 74 69 6f 6e 2e 0a 3c 2f 70 3e  t.solution..</p>
2c90: 0a 3c 2f 6c 69 3e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c  .</li>..</ul>..<
2ca0: 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74  tcl>.hd_fragment
2cb0: 20 64 62 63 6b 6c 73 74 20 7b 64 65 63 69 73 69   dbcklst {decisi
2cc0: 6f 6e 20 63 68 65 63 6b 6c 69 73 74 7d 0a 3c 2f  on checklist}.</
2cd0: 74 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b 6c 69  tcl>.<h2>Checkli
2ce0: 73 74 20 46 6f 72 20 43 68 6f 6f 73 69 6e 67 20  st For Choosing 
2cf0: 54 68 65 20 52 69 67 68 74 20 44 61 74 61 62 61  The Right Databa
2d00: 73 65 20 45 6e 67 69 6e 65 3c 2f 68 32 3e 0a 0a  se Engine</h2>..
2d10: 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49  <ol>.<li><p><b>I
2d20: 73 20 74 68 65 20 64 61 74 61 20 73 65 70 61 72  s the data separ
2d30: 61 74 65 64 20 66 72 6f 6d 20 74 68 65 20 61 70  ated from the ap
2d40: 70 6c 69 63 61 74 69 6f 6e 20 62 79 20 61 20 6e  plication by a n
2d50: 65 74 77 6f 72 6b 3f 0a 20 20 20 20 20 20 20 26  etwork?.       &
2d60: 72 61 72 72 3b 20 63 68 6f 6f 73 65 20 63 6c 69  rarr; choose cli
2d70: 65 6e 74 2f 73 65 72 76 65 72 3c 2f 62 3e 3c 2f  ent/server</b></
2d80: 70 3e 0a 0a 3c 70 3e 52 65 6c 61 74 69 6f 6e 61  p>..<p>Relationa
2d90: 6c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  l database engin
2da0: 65 73 20 61 63 74 20 61 73 20 62 61 6e 64 77 69  es act as bandwi
2db0: 64 74 68 2d 72 65 64 75 63 69 6e 67 20 64 61 74  dth-reducing dat
2dc0: 61 20 66 69 6c 74 65 72 73 2e 0a 53 6f 20 69 74  a filters..So it
2dd0: 20 69 73 20 62 65 73 74 20 74 6f 20 6b 65 65 70   is best to keep
2de0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
2df0: 67 69 6e 65 20 61 6e 64 20 74 68 65 20 64 61 74  gine and the dat
2e00: 61 20 6f 6e 0a 74 68 65 20 73 61 6d 65 20 70 68  a on.the same ph
2e10: 79 73 69 63 61 6c 20 64 65 76 69 63 65 20 73 6f  ysical device so
2e20: 20 74 68 61 74 20 74 68 65 20 68 69 67 68 2d 62   that the high-b
2e30: 61 6e 64 77 69 64 74 68 20 65 6e 67 69 6e 65 2d  andwidth engine-
2e40: 74 6f 2d 64 69 73 6b 0a 6c 69 6e 6b 20 64 6f 65  to-disk.link doe
2e50: 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 74 72  s not have to tr
2e60: 61 76 65 72 73 65 20 74 68 65 20 6e 65 74 77 6f  averse the netwo
2e70: 72 6b 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77  rk, only the low
2e80: 65 72 2d 62 61 6e 64 77 69 64 74 68 0a 61 70 70  er-bandwidth.app
2e90: 6c 69 63 61 74 69 6f 6e 2d 74 6f 2d 65 6e 67 69  lication-to-engi
2ea0: 6e 65 20 6c 69 6e 6b 2e 0a 0a 3c 70 3e 42 75 74  ne link...<p>But
2eb0: 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
2ec0: 20 69 6e 74 6f 20 74 68 65 20 61 70 70 6c 69 63   into the applic
2ed0: 61 74 69 6f 6e 2e 20 20 53 6f 20 69 66 20 74 68  ation.  So if th
2ee0: 65 20 64 61 74 61 20 69 73 20 6f 6e 20 61 0a 73  e data is on a.s
2ef0: 65 70 61 72 61 74 65 20 64 65 76 69 63 65 20 66  eparate device f
2f00: 72 6f 6d 20 74 68 65 20 61 70 70 6c 69 63 61 74  rom the applicat
2f10: 69 6f 6e 2c 20 69 74 20 69 73 20 72 65 71 75 69  ion, it is requi
2f20: 72 65 64 20 74 68 61 74 20 74 68 65 20 68 69 67  red that the hig
2f30: 68 65 72 0a 62 61 6e 64 77 69 64 74 68 20 65 6e  her.bandwidth en
2f40: 67 69 6e 65 2d 74 6f 2d 64 69 73 6b 20 6c 69 6e  gine-to-disk lin
2f50: 6b 20 62 65 20 61 63 72 6f 73 73 20 74 68 65 20  k be across the 
2f60: 6e 65 74 77 6f 72 6b 2e 20 20 54 68 69 73 20 77  network.  This w
2f70: 6f 72 6b 73 2c 20 62 75 74 0a 69 74 20 69 73 20  orks, but.it is 
2f80: 73 75 62 6f 70 74 69 6d 61 6c 2e 20 20 48 65 6e  suboptimal.  Hen
2f90: 63 65 2c 20 69 74 20 69 73 20 75 73 75 61 6c 6c  ce, it is usuall
2fa0: 79 20 62 65 74 74 65 72 20 74 6f 20 73 65 6c 65  y better to sele
2fb0: 63 74 20 61 20 63 6c 69 65 6e 74 2f 73 65 72 76  ct a client/serv
2fc0: 65 72 0a 64 61 74 61 62 61 73 65 20 65 6e 67 69  er.database engi
2fd0: 6e 65 20 77 68 65 6e 20 74 68 65 20 64 61 74 61  ne when the data
2fe0: 20 69 73 20 6f 6e 20 61 20 73 65 70 61 72 61 74   is on a separat
2ff0: 65 20 64 65 76 69 63 65 20 66 72 6f 6d 20 74 68  e device from th
3000: 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 0a  e.application...
3010: 3c 70 3e 3c 65 6d 3e 4e 6f 74 61 20 42 65 6e 65  <p><em>Nota Bene
3020: 3a 3c 2f 65 6d 3e 0a 49 6e 20 74 68 69 73 20 72  :</em>.In this r
3030: 75 6c 65 2c 20 22 61 70 70 6c 69 63 61 74 69 6f  ule, "applicatio
3040: 6e 22 20 6d 65 61 6e 73 20 74 68 65 20 63 6f 64  n" means the cod
3050: 65 20 74 68 61 74 20 69 73 73 75 65 73 20 53 51  e that issues SQ
3060: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 49 66  L statements..If
3070: 20 74 68 65 20 22 61 70 70 6c 69 63 61 74 69 6f   the "applicatio
3080: 6e 22 20 69 73 20 61 6e 20 5b 73 65 72 76 65 72  n" is an [server
3090: 2d 73 69 64 65 20 64 61 74 61 62 61 73 65 7c 61  -side database|a
30a0: 70 70 6c 69 63 61 74 69 6f 6e 20 73 65 72 76 65  pplication serve
30b0: 72 5d 20 61 6e 64 0a 69 66 20 74 68 65 20 63 6f  r] and.if the co
30c0: 6e 74 65 6e 74 20 72 65 73 69 64 65 73 20 6f 6e  ntent resides on
30d0: 20 74 68 65 20 73 61 6d 65 20 70 68 79 73 69 63   the same physic
30e0: 61 6c 20 6d 61 63 68 69 6e 65 20 61 73 20 74 68  al machine as th
30f0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 73 65  e application se
3100: 72 76 65 72 2c 0a 74 68 65 6e 20 53 51 4c 69 74  rver,.then SQLit
3110: 65 20 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65  e might still be
3120: 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 76 65   appropriate eve
3130: 6e 20 74 68 6f 75 67 68 20 74 68 65 20 65 6e 64  n though the end
3140: 20 75 73 65 72 20 69 73 0a 61 6e 6f 74 68 65 72   user is.another
3150: 20 6e 65 74 77 6f 72 6b 20 68 6f 70 20 61 77 61   network hop awa
3160: 79 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c  y.</p>.</li>..<l
3170: 69 3e 3c 70 3e 3c 62 3e 4d 61 6e 79 20 63 6f 6e  i><p><b>Many con
3180: 63 75 72 72 65 6e 74 20 77 72 69 74 65 72 73 3f  current writers?
3190: 20 26 72 61 72 72 3b 20 63 68 6f 6f 73 65 20 63   &rarr; choose c
31a0: 6c 69 65 6e 74 2f 73 65 72 76 65 72 3c 2f 62 3e  lient/server</b>
31b0: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6d 61 6e 79  </p>..<p>If many
31c0: 20 74 68 72 65 61 64 73 20 61 6e 64 2f 6f 72 20   threads and/or 
31d0: 70 72 6f 63 65 73 73 65 73 20 6e 65 65 64 20 74  processes need t
31e0: 6f 20 77 72 69 74 65 20 74 68 65 0a 64 61 74 61  o write the.data
31f0: 62 61 73 65 20 61 74 20 74 68 65 20 73 61 6d 65  base at the same
3200: 20 69 6e 73 74 61 6e 74 20 28 61 6e 64 20 74 68   instant (and th
3210: 65 79 20 63 61 6e 6e 6f 74 20 71 75 65 75 65 20  ey cannot queue 
3220: 75 70 20 61 6e 64 20 74 61 6b 65 20 74 75 72 6e  up and take turn
3230: 73 29 0a 74 68 65 6e 20 69 74 20 69 73 20 62 65  s).then it is be
3240: 73 74 20 74 6f 20 73 65 6c 65 63 74 20 61 20 64  st to select a d
3250: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 74  atabase engine t
3260: 68 61 74 20 73 75 70 70 6f 72 74 73 20 74 68 61  hat supports tha
3270: 74 0a 63 61 70 61 62 69 6c 69 74 79 2c 20 77 68  t.capability, wh
3280: 69 63 68 20 61 6c 77 61 79 73 20 6d 65 61 6e 73  ich always means
3290: 20 61 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72   a client/server
32a0: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
32b0: 2e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 6f 6e 6c  ...<p>SQLite onl
32c0: 79 20 73 75 70 70 6f 72 74 73 20 6f 6e 65 20 77  y supports one w
32d0: 72 69 74 65 72 20 61 74 20 61 20 74 69 6d 65 20  riter at a time 
32e0: 70 65 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  per database fil
32f0: 65 2e 0a 42 75 74 20 69 6e 20 6d 6f 73 74 20 63  e..But in most c
3300: 61 73 65 73 2c 20 61 20 77 72 69 74 65 20 74 72  ases, a write tr
3310: 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 6c 79 20 74  ansaction only t
3320: 61 6b 65 73 20 6d 69 6c 6c 69 73 65 63 6f 6e 64  akes millisecond
3330: 73 20 61 6e 64 0a 73 6f 20 6d 75 6c 74 69 70 6c  s and.so multipl
3340: 65 20 77 72 69 74 65 72 73 20 63 61 6e 20 73 69  e writers can si
3350: 6d 70 6c 79 20 74 61 6b 65 20 74 75 72 6e 73 2e  mply take turns.
3360: 20 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 68 61    SQLite will ha
3370: 6e 64 6c 65 0a 6d 6f 72 65 20 77 72 69 74 65 20  ndle.more write 
3380: 63 6f 6e 63 75 72 72 65 6e 63 79 20 74 68 61 74  concurrency that
3390: 20 6d 61 6e 79 20 70 65 6f 70 6c 65 20 73 75 73   many people sus
33a0: 70 65 63 74 2e 20 20 4e 65 76 65 72 74 68 65 6c  pect.  Neverthel
33b0: 65 73 73 2c 0a 63 6c 69 65 6e 74 2f 73 65 72 76  ess,.client/serv
33c0: 65 72 20 64 61 74 61 62 61 73 65 20 73 79 73 74  er database syst
33d0: 65 6d 73 2c 20 62 65 63 61 75 73 65 20 74 68 65  ems, because the
33e0: 79 20 68 61 76 65 20 61 20 6c 6f 6e 67 2d 72 75  y have a long-ru
33f0: 6e 6e 69 6e 67 0a 73 65 72 76 65 72 20 70 72 6f  nning.server pro
3400: 63 65 73 73 20 61 74 20 68 61 6e 64 20 74 6f 20  cess at hand to 
3410: 63 6f 6f 72 64 69 6e 61 74 65 20 61 63 63 65 73  coordinate acces
3420: 73 2c 20 63 61 6e 20 75 73 75 61 6c 6c 79 20 68  s, can usually h
3430: 61 6e 64 6c 65 20 0a 66 61 72 20 6d 6f 72 65 20  andle .far more 
3440: 77 72 69 74 65 20 63 6f 6e 63 75 72 72 65 6e 63  write concurrenc
3450: 79 20 74 68 61 6e 20 53 51 4c 69 74 65 20 65 76  y than SQLite ev
3460: 65 72 20 77 69 6c 6c 2e 0a 3c 2f 6c 69 3e 0a 0a  er will..</li>..
3470: 3c 6c 69 3e 3c 70 3e 3c 62 3e 42 69 67 20 64 61  <li><p><b>Big da
3480: 74 61 3f 20 26 72 61 72 72 3b 20 63 68 6f 6f 73  ta? &rarr; choos
3490: 65 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 3c  e client/server<
34a0: 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79  /b></p>..<p>If y
34b0: 6f 75 72 20 64 61 74 61 20 77 69 6c 6c 20 67 72  our data will gr
34c0: 6f 77 20 74 6f 20 61 20 73 69 7a 65 20 74 68 61  ow to a size tha
34d0: 74 20 79 6f 75 20 61 72 65 20 75 6e 63 6f 6d 66  t you are uncomf
34e0: 6f 72 74 61 62 6c 65 0a 6f 72 20 75 6e 61 62 6c  ortable.or unabl
34f0: 65 20 74 6f 20 66 69 74 20 69 6e 74 6f 20 61 20  e to fit into a 
3500: 73 69 6e 67 6c 65 20 64 69 73 6b 20 66 69 6c 65  single disk file
3510: 2c 20 74 68 65 6e 20 79 6f 75 20 73 68 6f 75 6c  , then you shoul
3520: 64 20 73 65 6c 65 63 74 0a 61 20 73 6f 6c 75 74  d select.a solut
3530: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 53  ion other than S
3540: 51 4c 69 74 65 2e 20 20 53 51 4c 69 74 65 20 73  QLite.  SQLite s
3550: 75 70 70 6f 72 74 73 20 64 61 74 61 62 61 73 65  upports database
3560: 73 20 75 70 20 74 6f 0a 31 34 30 20 74 65 72 61  s up to.140 tera
3570: 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2c 20 61  bytes in size, a
3580: 73 73 75 6d 69 6e 67 20 79 6f 75 20 63 61 6e 20  ssuming you can 
3590: 66 69 6e 64 20 61 20 64 69 73 6b 20 64 72 69 76  find a disk driv
35a0: 65 20 61 6e 64 20 66 69 6c 65 73 79 73 74 65 6d  e and filesystem
35b0: 0a 74 68 61 74 20 77 69 6c 6c 20 73 75 70 70 6f  .that will suppo
35c0: 72 74 20 31 34 30 2d 74 65 72 61 62 79 74 65 20  rt 140-terabyte 
35d0: 66 69 6c 65 73 2e 20 20 45 76 65 6e 20 73 6f 2c  files.  Even so,
35e0: 20 77 68 65 6e 20 74 68 65 20 73 69 7a 65 20 6f   when the size o
35f0: 66 20 74 68 65 0a 63 6f 6e 74 65 6e 74 20 6c 6f  f the.content lo
3600: 6f 6b 73 20 6c 69 6b 65 20 69 74 20 6d 69 67 68  oks like it migh
3610: 74 20 63 72 65 65 70 20 69 6e 74 6f 20 74 68 65  t creep into the
3620: 20 74 65 72 61 62 79 74 65 20 72 61 6e 67 65 2c   terabyte range,
3630: 20 69 74 20 77 6f 75 6c 64 0a 62 65 20 67 6f 6f   it would.be goo
3640: 64 20 74 6f 20 63 6f 6e 73 69 64 65 72 20 61 20  d to consider a 
3650: 63 65 6e 74 72 61 6c 69 7a 65 64 20 63 6c 69 65  centralized clie
3660: 6e 74 2f 73 65 72 76 65 72 20 64 61 74 61 62 61  nt/server databa
3670: 73 65 2e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  se..</li>..<li><
3680: 70 3e 3c 62 3e 4f 74 68 65 72 77 69 73 65 20 26  p><b>Otherwise &
3690: 72 61 72 72 3b 20 63 68 6f 6f 73 65 20 53 51 4c  rarr; choose SQL
36a0: 69 74 65 21 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70  ite!</b></p>..<p
36b0: 3e 46 6f 72 20 64 65 76 69 63 65 2d 6c 6f 63 61  >For device-loca
36c0: 6c 20 73 74 6f 72 61 67 65 20 77 69 74 68 20 6c  l storage with l
36d0: 6f 77 20 77 72 69 74 65 72 20 63 6f 6e 63 75 72  ow writer concur
36e0: 72 65 6e 63 79 20 61 6e 64 20 6c 65 73 73 20 74  rency and less t
36f0: 68 61 6e 20 61 0a 74 65 72 61 62 79 74 65 20 6f  han a.terabyte o
3700: 66 20 63 6f 6e 74 65 6e 74 2c 20 53 51 4c 69 74  f content, SQLit
3710: 65 20 69 73 20 61 6c 6d 6f 73 74 20 61 6c 77 61  e is almost alwa
3720: 79 73 20 61 20 62 65 74 74 65 72 20 73 6f 6c 75  ys a better solu
3730: 74 69 6f 6e 2e 20 20 53 51 4c 69 74 65 0a 69 73  tion.  SQLite.is
3740: 20 66 61 73 74 20 61 6e 64 20 72 65 6c 69 61 62   fast and reliab
3750: 6c 65 20 61 6e 64 20 69 74 20 72 65 71 75 69 72  le and it requir
3760: 65 73 20 6e 6f 20 63 6f 6e 66 69 67 75 72 61 74  es no configurat
3770: 69 6f 6e 20 6f 72 20 6d 61 69 6e 74 65 6e 61 6e  ion or maintenan
3780: 63 65 2e 0a 49 74 20 6b 65 65 70 73 20 74 68 69  ce..It keeps thi
3790: 6e 67 20 73 69 6d 70 6c 65 2e 20 20 53 51 4c 69  ng simple.  SQLi
37a0: 74 65 20 22 6a 75 73 74 20 77 6f 72 6b 73 22 2e  te "just works".
37b0: 0a 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a           .</li>.</ol>.