Documentation Source Text

Hex Artifact Content
Login

Artifact d055c979c1289095e2409035759d9de3418cc11d:


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 43 6c 69 65 6e 74 2f 73 65 72 76  ..<p>Client/serv
0280: 65 72 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  er database engi
0290: 6e 65 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  nes are designed
02a0: 20 74 6f 20 6c 69 76 65 20 61 74 20 74 68 65 20   to live at the 
02b0: 63 6f 72 65 0a 6f 66 20 74 68 65 20 6e 65 74 77  core.of the netw
02c0: 6f 72 6b 2c 20 69 6e 73 69 64 65 20 61 20 6c 6f  ork, inside a lo
02d0: 76 69 6e 67 6c 79 2d 61 74 74 65 6e 64 65 64 20  vingly-attended 
02e0: 64 61 74 61 63 65 6e 74 65 72 2e 0a 53 51 4c 69  datacenter..SQLi
02f0: 74 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  te is designed t
0300: 6f 20 74 68 72 69 76 65 20 61 74 20 74 68 65 20  o thrive at the 
0310: 65 64 67 65 20 6f 66 20 74 68 65 0a 6e 65 74 77  edge of the.netw
0320: 6f 72 6b 20 2d 20 66 65 6e 64 69 6e 67 20 66 6f  ork - fending fo
0330: 72 20 69 74 73 65 6c 66 20 6f 6e 20 74 68 65 20  r itself on the 
0340: 66 72 6f 6e 74 69 65 72 20 77 68 69 6c 65 20 70  frontier while p
0350: 72 6f 76 69 64 69 6e 67 20 66 61 73 74 20 61 6e  roviding fast an
0360: 64 0a 72 65 6c 69 61 62 6c 65 20 64 61 74 61 20  d.reliable data 
0370: 73 65 72 76 69 63 65 73 20 74 6f 20 61 70 70 6c  services to appl
0380: 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20 77 6f  ications that wo
0390: 75 6c 64 20 6f 74 68 65 72 77 69 73 65 0a 68 61  uld otherwise.ha
03a0: 76 65 20 64 6f 64 67 79 20 63 6f 6e 6e 65 63 74  ve dodgy connect
03b0: 69 76 69 74 79 2e 0a 0a 3c 70 3e 0a 53 51 4c 69  ivity...<p>.SQLi
03c0: 74 65 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70  te does not comp
03d0: 65 74 65 20 77 69 74 68 20 63 6c 69 65 6e 74 2f  ete with client/
03e0: 73 65 72 76 65 72 20 64 61 74 61 62 61 73 65 73  server databases
03f0: 2e 0a 53 51 4c 69 74 65 20 63 6f 6d 70 65 74 65  ..SQLite compete
0400: 73 20 77 69 74 68 20 5b 68 74 74 70 3a 2f 2f 6d  s with [http://m
0410: 61 6e 2e 68 65 2e 6e 65 74 2f 6d 61 6e 33 2f 66  an.he.net/man3/f
0420: 6f 70 65 6e 20 7c 20 66 6f 70 65 6e 28 29 5d 2e  open | fopen()].
0430: 0a 3c 2f 70 3e 0a 0a 3c 68 32 3e 53 69 74 75 61  .</p>..<h2>Situa
0440: 74 69 6f 6e 73 20 57 68 65 72 65 20 53 51 4c 69  tions Where SQLi
0450: 74 65 20 57 6f 72 6b 73 20 57 65 6c 6c 3c 2f 68  te Works Well</h
0460: 32 3e 0a 0a 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 68  2>..<ul>..<tcl>h
0470: 64 5f 66 72 61 67 6d 65 6e 74 20 61 70 70 66 69  d_fragment appfi
0480: 6c 65 66 6f 72 6d 61 74 3c 2f 74 63 6c 3e 0a 3c  leformat</tcl>.<
0490: 6c 69 3e 3c 70 3e 3c 62 3e 41 70 70 6c 69 63 61  li><p><b>Applica
04a0: 74 69 6f 6e 20 66 69 6c 65 20 66 6f 72 6d 61 74  tion file format
04b0: 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 28 46 75  </b></p>..<p>(Fu
04c0: 72 74 68 65 72 20 64 65 74 61 69 6c 73 20 5b 61  rther details [a
04d0: 70 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d  pplication file-
04e0: 66 6f 72 6d 61 74 20 7c 20 68 65 72 65 5d 2e 29  format | here].)
04f0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
0500: 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20 77   has been used w
0510: 69 74 68 20 67 72 65 61 74 20 73 75 63 63 65 73  ith great succes
0520: 73 20 61 73 20 74 68 65 20 6f 6e 2d 64 69 73 6b  s as the on-disk
0530: 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 66 6f 72   file format.for
0540: 20 64 65 73 6b 74 6f 70 20 61 70 70 6c 69 63 61   desktop applica
0550: 74 69 6f 6e 73 20 73 75 63 68 20 61 73 20 76 65  tions such as ve
0560: 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79  rsion control sy
0570: 73 74 65 6d 73 2c 0a 66 69 6e 61 6e 63 69 61 6c  stems,.financial
0580: 20 61 6e 61 6c 79 73 69 73 20 74 6f 6f 6c 73 2c   analysis tools,
0590: 20 6d 65 64 69 61 20 63 61 74 61 6c 6f 67 69 6e   media catalogin
05a0: 67 20 61 6e 64 20 65 64 69 74 69 6e 67 20 73 75  g and editing su
05b0: 69 74 65 73 2c 20 43 41 44 0a 70 61 63 6b 61 67  ites, CAD.packag
05c0: 65 73 2c 20 72 65 63 6f 72 64 20 6b 65 65 70 69  es, record keepi
05d0: 6e 67 20 70 72 6f 67 72 61 6d 73 2c 20 61 6e 64  ng programs, and
05e0: 20 73 6f 20 66 6f 72 74 68 2e 20 20 54 68 65 20   so forth.  The 
05f0: 74 72 61 64 69 74 69 6f 6e 61 6c 0a 46 69 6c 65  traditional.File
0600: 2f 4f 70 65 6e 20 6f 70 65 72 61 74 69 6f 6e 20  /Open operation 
0610: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 6f 70  calls sqlite3_op
0620: 65 6e 28 29 20 74 6f 20 61 74 74 61 63 68 20 74  en() to attach t
0630: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66  o the database.f
0640: 69 6c 65 2e 20 20 55 70 64 61 74 65 73 20 68 61  ile.  Updates ha
0650: 70 70 65 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c  ppen automatical
0660: 6c 79 20 61 73 20 61 70 70 6c 69 63 61 74 69 6f  ly as applicatio
0670: 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 72 65 76  n content is rev
0680: 69 73 65 64 0a 73 6f 20 74 68 65 20 46 69 6c 65  ised.so the File
0690: 2f 53 61 76 65 20 6d 65 6e 75 20 6f 70 74 69 6f  /Save menu optio
06a0: 6e 20 62 65 63 6f 6d 65 73 20 73 75 70 65 72 66  n becomes superf
06b0: 6c 75 6f 75 73 2e 20 20 54 68 65 20 46 69 6c 65  luous.  The File
06c0: 2f 53 61 76 65 5f 41 73 0a 6d 65 6e 75 20 6f 70  /Save_As.menu op
06d0: 74 69 6f 6e 20 63 61 6e 20 62 65 20 69 6d 70 6c  tion can be impl
06e0: 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
06f0: 65 20 5b 62 61 63 6b 75 70 20 41 50 49 5d 2e 0a  e [backup API]..
0700: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 72 65 20  </p>..<p>.There 
0710: 61 72 65 20 6d 61 6e 79 20 61 64 76 61 6e 74 61  are many advanta
0720: 67 65 73 20 74 6f 20 75 73 69 6e 67 20 53 51 4c  ges to using SQL
0730: 69 74 65 20 61 73 20 61 6e 20 61 70 70 6c 69 63  ite as an applic
0740: 61 74 69 6f 6e 20 66 69 6c 65 20 66 6f 72 6d 61  ation file forma
0750: 74 2c 0a 69 6e 63 6c 75 64 69 6e 67 3a 0a 3c 2f  t,.including:.</
0760: 70 3e 0a 0a 3c 6f 6c 20 74 79 70 65 3d 22 31 22  p>..<ol type="1"
0770: 3e 0a 3c 6c 69 3e 3c 62 3e 42 65 74 74 65 72 20  >.<li><b>Better 
0780: 70 65 72 66 6f 72 6d 61 6e 63 65 3c 2f 62 3e 0a  performance</b>.
0790: 3c 75 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20 61 70  <ul>.<li> The ap
07a0: 70 6c 69 63 61 74 69 6f 6e 20 6f 6e 6c 79 20 68  plication only h
07b0: 61 73 20 74 6f 20 6c 6f 61 64 20 74 68 65 20 64  as to load the d
07c0: 61 74 61 20 69 74 20 6e 65 65 64 73 2c 20 72 61  ata it needs, ra
07d0: 74 68 65 72 0a 20 20 20 20 20 74 68 61 6e 20 72  ther.     than r
07e0: 65 61 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72  eading the entir
07f0: 65 20 66 69 6c 65 20 61 6e 64 20 68 6f 6c 64 69  e file and holdi
0800: 6e 67 20 61 20 63 6f 6d 70 6c 65 74 65 20 70 61  ng a complete pa
0810: 72 73 65 0a 20 20 20 20 20 69 6e 20 6d 65 6d 6f  rse.     in memo
0820: 72 79 2e 0a 3c 6c 69 3e 20 53 6d 61 6c 6c 20 65  ry..<li> Small e
0830: 64 69 74 73 20 6f 6e 6c 79 20 6f 76 65 72 77 72  dits only overwr
0840: 69 74 65 20 74 68 65 20 70 61 72 74 73 20 6f 66  ite the parts of
0850: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 20 63   the file that c
0860: 68 61 6e 67 65 2c 0a 20 20 20 20 20 72 65 64 75  hange,.     redu
0870: 63 69 6e 67 20 77 72 69 74 65 20 74 69 6d 65 20  cing write time 
0880: 61 6e 64 20 77 65 61 72 20 6f 6e 20 53 53 44 20  and wear on SSD 
0890: 64 72 69 76 65 73 2e 0a 3c 6c 69 3e 20 49 6e 20  drives..<li> In 
08a0: 6d 61 6e 79 20 63 61 73 65 73 2c 20 6c 6f 61 64  many cases, load
08b0: 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d  ing content from
08c0: 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62   an SQLite datab
08d0: 61 73 65 0a 20 20 20 20 20 69 73 20 66 61 73 74  ase.     is fast
08e0: 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 20  er than reading 
08f0: 69 6e 64 69 76 69 64 75 61 6c 20 66 69 6c 65 73  individual files
0900: 20 66 72 6f 6d 20 64 69 73 6b 2e 0a 20 20 20 20   from disk..    
0910: 20 53 65 65 20 5b 49 6e 74 65 72 6e 61 6c 20 56   See [Internal V
0920: 65 72 73 75 73 20 45 78 74 65 72 6e 61 6c 20 42  ersus External B
0930: 4c 4f 42 73 5d 2e 0a 3c 2f 75 6c 3e 0a 3c 6c 69  LOBs]..</ul>.<li
0940: 3e 3c 62 3e 52 65 64 75 63 65 64 20 61 70 70 6c  ><b>Reduced appl
0950: 69 63 61 74 69 6f 6e 20 63 6f 73 74 20 61 6e 64  ication cost and
0960: 20 63 6f 6d 70 6c 65 78 69 74 79 3c 2f 62 3e 0a   complexity</b>.
0970: 3c 75 6c 3e 0a 3c 6c 69 3e 20 4e 6f 20 61 70 70  <ul>.<li> No app
0980: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 20 49 2f  lication file I/
0990: 4f 20 63 6f 64 65 20 74 6f 20 77 72 69 74 65 20  O code to write 
09a0: 61 6e 64 20 64 65 62 75 67 2e 0a 3c 6c 69 3e 20  and debug..<li> 
09b0: 43 6f 6e 74 65 6e 74 20 63 61 6e 20 62 65 20 61  Content can be a
09c0: 63 63 65 73 73 65 64 20 61 6e 64 20 75 70 64 61  ccessed and upda
09d0: 74 65 64 20 75 73 69 6e 67 20 63 6f 6e 63 69 73  ted using concis
09e0: 65 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e  e SQL queries in
09f0: 73 74 65 61 64 0a 20 20 20 20 20 6f 66 20 6c 65  stead.     of le
0a00: 6e 67 74 68 79 20 61 6e 64 20 65 72 72 6f 72 2d  ngthy and error-
0a10: 70 72 6f 6e 65 20 70 72 6f 63 65 64 75 72 61 6c  prone procedural
0a20: 20 72 6f 75 74 69 6e 65 73 2e 0a 3c 6c 69 3e 20   routines..<li> 
0a30: 54 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  The file format 
0a40: 63 61 6e 20 62 65 20 65 78 74 65 6e 64 65 64 20  can be extended 
0a50: 69 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61 73  in future releas
0a60: 65 73 20 73 69 6d 70 6c 79 0a 20 20 20 20 20 62  es simply.     b
0a70: 79 20 61 64 64 69 6e 67 20 6e 65 77 20 74 61 62  y adding new tab
0a80: 6c 65 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 75 6d  les and/or colum
0a90: 6e 2c 20 70 72 65 73 65 72 76 69 6e 67 20 62 61  n, preserving ba
0aa0: 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
0ab0: 69 6c 69 74 79 2e 0a 3c 6c 69 3e 20 41 70 70 6c  ility..<li> Appl
0ac0: 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 6c 65 76  ications can lev
0ad0: 65 72 61 67 65 20 74 68 65 0a 20 20 20 20 20 5b  erage the.     [
0ae0: 66 75 6c 6c 2d 74 65 78 74 20 73 65 61 72 63 68  full-text search
0af0: 5d 20 61 6e 64 20 5b 52 54 52 45 45 5d 20 69 6e  ] and [RTREE] in
0b00: 64 65 78 65 73 2e 0a 3c 6c 69 3e 20 50 65 72 66  dexes..<li> Perf
0b10: 6f 72 6d 61 6e 63 65 20 70 72 6f 62 6c 65 6d 73  ormance problems
0b20: 20 63 61 6e 20 6f 66 74 65 6e 20 62 65 20 72 65   can often be re
0b30: 73 6f 6c 76 65 64 2c 20 65 76 65 6e 20 6c 61 74  solved, even lat
0b40: 65 20 69 6e 20 74 68 65 0a 20 20 20 20 20 64 65  e in the.     de
0b50: 76 65 6c 6f 70 6d 65 6e 74 20 63 79 63 6c 65 2c  velopment cycle,
0b60: 20 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20 49   using [CREATE I
0b70: 4e 44 45 58 5d 2c 20 61 76 6f 69 64 69 6e 67 20  NDEX], avoiding 
0b80: 63 6f 73 74 6c 79 0a 20 20 20 20 20 72 65 64 65  costly.     rede
0b90: 73 69 67 6e 2c 20 72 65 77 72 69 74 65 2c 20 61  sign, rewrite, a
0ba0: 6e 64 20 72 65 74 65 73 74 20 65 66 66 6f 72 74  nd retest effort
0bb0: 73 2e 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 3c 62 3e  s..</ul>.<li><b>
0bc0: 50 6f 72 74 61 62 69 6c 69 74 79 3c 2f 62 3e 0a  Portability</b>.
0bd0: 3c 75 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20 61 70  <ul>.<li> The ap
0be0: 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 20 69  plication file i
0bf0: 73 20 70 6f 72 74 61 62 6c 65 20 61 63 72 6f 73  s portable acros
0c00: 73 20 61 6c 6c 20 6f 70 65 72 61 74 69 6e 67 20  s all operating 
0c10: 73 79 73 74 65 6d 73 2c 0a 20 20 20 20 20 33 32  systems,.     32
0c20: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20  -bit and 64-bit 
0c30: 61 6e 64 20 62 69 67 2d 20 61 6e 64 20 6c 69 74  and big- and lit
0c40: 74 6c 65 2d 65 6e 64 69 61 6e 20 61 72 63 68 69  tle-endian archi
0c50: 74 65 63 74 75 72 65 73 2e 0a 3c 6c 69 3e 20 41  tectures..<li> A
0c60: 20 66 65 64 65 72 61 74 69 6f 6e 20 6f 66 20 70   federation of p
0c70: 72 6f 67 72 61 6d 73 2c 20 70 65 72 68 61 70 73  rograms, perhaps
0c80: 20 61 6c 6c 20 77 72 69 74 74 65 6e 20 69 6e 20   all written in 
0c90: 64 69 66 66 65 72 65 6e 74 20 70 72 6f 67 72 61  different progra
0ca0: 6d 6d 69 6e 67 0a 20 20 20 20 20 6c 61 6e 67 75  mming.     langu
0cb0: 61 67 65 73 2c 20 63 61 6e 20 61 63 63 65 73 73  ages, can access
0cc0: 20 74 68 65 20 73 61 6d 65 20 61 70 70 6c 69 63   the same applic
0cd0: 61 74 69 6f 6e 20 66 69 6c 65 20 77 69 74 68 20  ation file with 
0ce0: 6e 6f 0a 20 20 20 20 20 63 6f 6d 70 61 74 69 62  no.     compatib
0cf0: 69 6c 69 74 79 20 63 6f 6e 63 65 72 6e 73 2e 0a  ility concerns..
0d00: 3c 6c 69 3e 20 4d 75 6c 74 69 70 6c 65 20 70 72  <li> Multiple pr
0d10: 6f 63 65 73 73 65 73 20 63 61 6e 20 61 74 74 61  ocesses can atta
0d20: 63 68 20 74 6f 20 74 68 65 20 73 61 6d 65 20 61  ch to the same a
0d30: 70 70 6c 69 63 61 74 69 6f 6e 0a 20 20 20 20 20  pplication.     
0d40: 66 69 6c 65 20 61 6e 64 20 63 61 6e 20 72 65 61  file and can rea
0d50: 64 20 61 6e 64 20 77 72 69 74 65 20 77 69 74 68  d and write with
0d60: 6f 75 74 20 69 6e 74 65 72 66 65 72 69 6e 67 20  out interfering 
0d70: 77 69 74 68 20 65 61 63 68 20 61 6e 6f 74 68 65  with each anothe
0d80: 72 2e 0a 3c 6c 69 3e 20 44 69 76 65 72 73 65 20  r..<li> Diverse 
0d90: 63 6f 6e 74 65 6e 74 20 77 68 69 63 68 20 6d 69  content which mi
0da0: 67 68 74 20 6f 74 68 65 72 77 69 73 65 20 62 65  ght otherwise be
0db0: 20 73 74 6f 72 65 64 20 61 73 20 61 20 22 70 69   stored as a "pi
0dc0: 6c 65 2d 6f 66 2d 66 69 6c 65 73 22 0a 20 20 20  le-of-files".   
0dd0: 20 20 69 73 20 65 6e 63 61 70 73 75 6c 61 74 65    is encapsulate
0de0: 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20  d into a single 
0df0: 64 69 73 6b 20 66 69 6c 65 20 66 6f 72 20 73 69  disk file for si
0e00: 6d 70 6c 65 72 20 74 72 61 6e 73 70 6f 72 74 0a  mpler transport.
0e10: 20 20 20 20 20 76 69 61 20 73 63 70 2f 66 74 70       via scp/ftp
0e20: 2c 20 55 53 42 20 73 74 69 63 6b 2c 20 61 6e 64  , USB stick, and
0e30: 2f 6f 72 20 65 6d 61 69 6c 20 61 74 74 61 63 68  /or email attach
0e40: 6d 65 6e 74 2e 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e  ment..</ul>.<li>
0e50: 3c 62 3e 52 65 6c 69 61 62 69 6c 69 74 79 3c 2f  <b>Reliability</
0e60: 62 3e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 43 6f 6e  b>.<ul>.<li> Con
0e70: 74 65 6e 74 20 63 61 6e 20 62 65 20 75 70 64 61  tent can be upda
0e80: 74 65 64 20 63 6f 6e 74 69 6e 75 6f 75 73 6c 79  ted continuously
0e90: 20 61 6e 64 20 61 74 6f 6d 69 63 61 6c 6c 79 20   and atomically 
0ea0: 73 6f 20 0a 20 20 20 20 20 74 68 61 74 20 6c 69  so .     that li
0eb0: 74 74 6c 65 20 6f 72 20 6e 6f 20 77 6f 72 6b 20  ttle or no work 
0ec0: 69 73 20 6c 6f 73 74 20 69 6e 20 61 20 70 6f 77  is lost in a pow
0ed0: 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63 72  er failure or cr
0ee0: 61 73 68 2e 0a 3c 6c 69 3e 20 42 75 67 73 20 61  ash..<li> Bugs a
0ef0: 72 65 20 66 61 72 20 6c 65 73 73 20 6c 69 6b 65  re far less like
0f00: 6c 79 20 69 6e 20 53 51 4c 69 74 65 20 74 68 61  ly in SQLite tha
0f10: 6e 20 69 6e 20 63 75 73 74 6f 6d 2d 77 72 69 74  n in custom-writ
0f20: 74 65 6e 20 66 69 6c 65 20 49 2f 4f 20 63 6f 64  ten file I/O cod
0f30: 65 2e 0a 3c 6c 69 3e 20 53 51 4c 20 71 75 65 72  e..<li> SQL quer
0f40: 69 65 73 20 61 72 65 20 6d 61 6e 79 20 74 69 6d  ies are many tim
0f50: 65 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  es smaller than 
0f60: 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 70  the equivalent p
0f70: 72 6f 63 65 64 75 72 61 6c 0a 20 20 20 20 20 63  rocedural.     c
0f80: 6f 64 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74  ode, and since t
0f90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 75 67  he number of bug
0fa0: 73 20 70 65 72 20 6c 69 6e 65 20 6f 66 20 63 6f  s per line of co
0fb0: 64 65 20 69 73 20 72 6f 75 67 68 6c 79 0a 20 20  de is roughly.  
0fc0: 20 20 20 63 6f 6e 73 74 61 6e 74 2c 20 74 68 69     constant, thi
0fd0: 73 20 6d 65 61 6e 73 20 66 65 77 65 72 20 62 75  s means fewer bu
0fe0: 67 73 20 6f 76 65 72 61 6c 6c 2e 0a 3c 2f 75 6c  gs overall..</ul
0ff0: 3e 0a 3c 6c 69 3e 3c 62 3e 41 63 63 65 73 73 69  >.<li><b>Accessi
1000: 62 69 6c 69 74 79 3c 2f 62 3e 0a 3c 75 6c 3e 0a  bility</b>.<ul>.
1010: 3c 6c 69 3e 20 53 51 4c 69 74 65 20 64 61 74 61  <li> SQLite data
1020: 62 61 73 65 20 63 6f 6e 74 65 6e 74 20 63 61 6e  base content can
1030: 20 62 65 20 76 69 65 77 65 64 20 75 73 69 6e 67   be viewed using
1040: 20 61 20 77 69 64 65 20 76 61 72 69 65 74 79 0a   a wide variety.
1050: 20 20 20 20 20 74 68 69 72 64 2d 70 61 72 74 79       third-party
1060: 20 74 6f 6f 6c 73 2e 0a 3c 6c 69 3e 20 43 6f 6e   tools..<li> Con
1070: 74 65 6e 74 20 73 74 6f 72 65 64 20 69 6e 20 61  tent stored in a
1080: 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
1090: 65 20 69 73 20 6d 6f 72 65 20 6c 69 6b 65 6c 79  e is more likely
10a0: 20 74 6f 20 62 65 20 0a 20 20 20 20 20 72 65 63   to be .     rec
10b0: 6f 76 65 72 61 62 6c 65 20 64 65 63 61 64 65 73  overable decades
10c0: 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 2c 20   in the future, 
10d0: 6c 6f 6e 67 20 61 66 74 65 72 20 61 6c 6c 20 74  long after all t
10e0: 72 61 63 65 73 20 6f 66 0a 20 20 20 20 20 74 68  races of.     th
10f0: 65 20 6f 72 69 67 69 6e 61 6c 20 61 70 70 6c 69  e original appli
1100: 63 61 74 69 6f 6e 20 68 61 76 65 20 62 65 65 6e  cation have been
1110: 20 6c 6f 73 74 2e 20 44 61 74 61 20 6c 69 76 65   lost. Data live
1120: 73 20 6c 6f 6e 67 65 72 20 74 68 61 6e 20 63 6f  s longer than co
1130: 64 65 2e 0a 3c 2f 75 6c 3e 0a 3c 2f 6f 6c 3e 0a  de..</ul>.</ol>.
1140: 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 6c 6c 6f  .<p>.SQLite allo
1150: 77 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ws database file
1160: 73 20 74 6f 20 68 61 76 65 20 61 6e 79 20 64 65  s to have any de
1170: 73 69 72 65 64 20 66 69 6c 65 6e 61 6d 65 20 65  sired filename e
1180: 78 74 65 6e 73 69 6f 6e 2c 20 73 6f 0a 61 6e 20  xtension, so.an 
1190: 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20  application can 
11a0: 63 68 6f 6f 73 65 20 61 20 63 75 73 74 6f 6d 20  choose a custom 
11b0: 66 69 6c 65 6e 61 6d 65 20 65 78 74 65 6e 73 69  filename extensi
11c0: 6f 6e 20 66 6f 72 20 69 74 73 20 6f 77 6e 20 75  on for its own u
11d0: 73 65 2c 20 69 66 0a 64 65 73 69 72 65 64 2e 20  se, if.desired. 
11e0: 20 54 68 65 20 5b 61 70 70 6c 69 63 61 74 69 6f   The [applicatio
11f0: 6e 5f 69 64 20 70 72 61 67 6d 61 5d 20 63 61 6e  n_id pragma] can
1200: 20 62 65 20 75 73 65 64 20 74 6f 20 73 65 74 20   be used to set 
1210: 61 6e 20 22 41 70 70 6c 69 63 61 74 69 6f 6e 20  an "Application 
1220: 49 44 22 0a 69 6e 74 65 67 65 72 20 69 6e 20 74  ID".integer in t
1230: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1240: 20 73 6f 20 74 68 61 74 20 74 6f 6f 6c 73 20 6c   so that tools l
1250: 69 6b 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e  ike.[http://www.
1260: 64 61 72 77 69 6e 73 79 73 2e 63 6f 6d 2f 66 69  darwinsys.com/fi
1270: 6c 65 2f 20 7c 20 66 69 6c 65 28 31 29 5d 20 63  le/ | file(1)] c
1280: 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 74 68 61  an determine tha
1290: 74 20 74 68 65 20 66 69 6c 65 0a 69 73 20 61 73  t the file.is as
12a0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 79 6f  sociated with yo
12b0: 75 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61  ur application a
12c0: 6e 64 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  nd is not just a
12d0: 20 67 65 6e 65 72 69 63 0a 53 51 4c 20 64 61 74   generic.SQL dat
12e0: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e  abase.</p>..<li>
12f0: 3c 62 3e 45 6d 62 65 64 64 65 64 20 64 65 76 69  <b>Embedded devi
1300: 63 65 73 20 61 6e 64 20 74 68 65 20 69 6e 74 65  ces and the inte
1310: 72 6e 65 74 20 6f 66 20 74 68 69 6e 67 73 3c 2f  rnet of things</
1320: 62 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 61  b>..<p>Because a
1330: 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
1340: 65 20 72 65 71 75 69 72 65 73 20 6e 6f 20 61 64  e requires no ad
1350: 6d 69 6e 69 73 74 72 61 74 69 6f 6e 2c 0a 53 51  ministration,.SQ
1360: 4c 69 74 65 20 69 73 20 61 20 67 6f 6f 64 20 63  Lite is a good c
1370: 68 6f 69 63 65 20 66 6f 72 20 64 65 76 69 63 65  hoice for device
1380: 73 20 74 68 61 74 20 6d 75 73 74 20 77 6f 72 6b  s that must work
1390: 0a 77 69 74 68 6f 75 74 20 68 75 6d 61 6e 20 73  .without human s
13a0: 75 70 70 6f 72 74 2e 20 20 53 51 4c 69 74 65 20  upport.  SQLite 
13b0: 69 73 20 61 20 67 6f 6f 64 20 66 69 74 20 66 6f  is a good fit fo
13c0: 72 0a 75 73 65 20 69 6e 20 63 65 6c 6c 70 68 6f  r.use in cellpho
13d0: 6e 65 73 2c 20 73 65 74 2d 74 6f 70 20 62 6f 78  nes, set-top box
13e0: 65 73 2c 20 74 65 6c 65 76 69 73 69 6f 6e 73 2c  es, televisions,
13f0: 20 67 61 6d 65 20 63 6f 6e 73 6f 6c 65 73 2c 0a   game consoles,.
1400: 63 61 6d 65 72 61 73 2c 20 77 61 74 63 68 65 73  cameras, watches
1410: 2c 20 6b 69 74 63 68 65 6e 20 61 70 70 6c 69 61  , kitchen applia
1420: 6e 63 65 73 2c 20 74 68 65 72 6d 6f 73 74 61 74  nces, thermostat
1430: 73 2c 20 61 75 74 6f 6d 6f 62 69 6c 65 73 2c 20  s, automobiles, 
1440: 0a 6d 61 63 68 69 6e 65 20 74 6f 6f 6c 73 2c 20  .machine tools, 
1450: 61 69 72 70 6c 61 6e 65 73 2c 20 72 65 6d 6f 74  airplanes, remot
1460: 65 20 73 65 6e 73 6f 72 73 2c 20 64 72 6f 6e 65  e sensors, drone
1470: 73 2c 20 6d 65 64 69 63 61 6c 20 64 65 76 69 63  s, medical devic
1480: 65 73 2c 0a 61 6e 64 20 72 6f 62 6f 74 73 3a 20  es,.and robots: 
1490: 20 74 68 65 20 22 69 6e 74 65 72 6e 65 74 20 6f   the "internet o
14a0: 66 20 74 68 69 6e 67 73 22 2e 0a 3c 2f 70 3e 0a  f things"..</p>.
14b0: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  </li>..<li><p><b
14c0: 3e 57 65 62 73 69 74 65 73 3c 2f 62 3e 3c 2f 70  >Websites</b></p
14d0: 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 77 6f 72  >..<p>SQLite wor
14e0: 6b 73 20 67 72 65 61 74 20 61 73 20 74 68 65 20  ks great as the 
14f0: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20  database engine 
1500: 66 6f 72 20 6d 6f 73 74 20 6c 6f 77 20 74 6f 0a  for most low to.
1510: 6d 65 64 69 75 6d 20 74 72 61 66 66 69 63 20 77  medium traffic w
1520: 65 62 73 69 74 65 73 20 28 77 68 69 63 68 20 69  ebsites (which i
1530: 73 20 74 6f 20 73 61 79 2c 20 39 39 2e 39 25 20  s to say, 99.9% 
1540: 6f 66 20 61 6c 6c 20 77 65 62 73 69 74 65 73 29  of all websites)
1550: 2e 0a 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  ..The amount of 
1560: 77 65 62 20 74 72 61 66 66 69 63 20 74 68 61 74  web traffic that
1570: 20 53 51 4c 69 74 65 20 63 61 6e 20 68 61 6e 64   SQLite can hand
1580: 6c 65 20 64 65 70 65 6e 64 73 2c 20 6f 66 20 63  le depends, of c
1590: 6f 75 72 73 65 2c 0a 6f 6e 20 68 6f 77 20 68 65  ourse,.on how he
15a0: 61 76 69 6c 79 20 74 68 65 20 77 65 62 73 69 74  avily the websit
15b0: 65 20 75 73 65 73 20 69 74 73 20 64 61 74 61 62  e uses its datab
15c0: 61 73 65 2e 20 20 47 65 6e 65 72 61 6c 6c 79 0a  ase.  Generally.
15d0: 73 70 65 61 6b 69 6e 67 2c 20 61 6e 79 20 73 69  speaking, any si
15e0: 74 65 20 74 68 61 74 20 67 65 74 73 20 66 65 77  te that gets few
15f0: 65 72 20 74 68 61 6e 20 31 30 30 4b 20 68 69 74  er than 100K hit
1600: 73 2f 64 61 79 20 73 68 6f 75 6c 64 20 77 6f 72  s/day should wor
1610: 6b 0a 66 69 6e 65 20 77 69 74 68 20 53 51 4c 69  k.fine with SQLi
1620: 74 65 2e 0a 54 68 65 20 31 30 30 4b 20 68 69 74  te..The 100K hit
1630: 73 2f 64 61 79 20 66 69 67 75 72 65 20 69 73 20  s/day figure is 
1640: 61 20 63 6f 6e 73 65 72 76 61 74 69 76 65 20 65  a conservative e
1650: 73 74 69 6d 61 74 65 2c 20 6e 6f 74 20 61 0a 68  stimate, not a.h
1660: 61 72 64 20 75 70 70 65 72 20 62 6f 75 6e 64 2e  ard upper bound.
1670: 0a 53 51 4c 69 74 65 20 68 61 73 20 62 65 65 6e  .SQLite has been
1680: 20 64 65 6d 6f 6e 73 74 72 61 74 65 64 20 74 6f   demonstrated to
1690: 20 77 6f 72 6b 20 77 69 74 68 20 31 30 20 74 69   work with 10 ti
16a0: 6d 65 73 20 74 68 61 74 20 61 6d 6f 75 6e 74 0a  mes that amount.
16b0: 6f 66 20 74 72 61 66 66 69 63 2e 3c 2f 70 3e 0a  of traffic.</p>.
16c0: 0a 3c 70 3e 54 68 65 20 53 51 4c 69 74 65 20 77  .<p>The SQLite w
16d0: 65 62 73 69 74 65 20 28 5b 68 74 74 70 73 3a 2f  ebsite ([https:/
16e0: 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  /www.sqlite.org/
16f0: 5d 29 20 75 73 65 73 20 53 51 4c 69 74 65 20 69  ]) uses SQLite i
1700: 74 73 65 6c 66 2c 0a 6f 66 20 63 6f 75 72 73 65  tself,.of course
1710: 2c 20 61 6e 64 20 61 73 20 6f 66 20 74 68 69 73  , and as of this
1720: 20 77 72 69 74 69 6e 67 20 28 32 30 31 35 29 20   writing (2015) 
1730: 69 74 20 68 61 6e 64 6c 65 73 20 61 62 6f 75 74  it handles about
1740: 20 34 30 30 4b 20 74 6f 20 35 30 30 4b 0a 48 54   400K to 500K.HT
1750: 54 50 20 72 65 71 75 65 73 74 73 20 70 65 72 20  TP requests per 
1760: 64 61 79 2c 20 61 62 6f 75 74 20 31 35 2d 32 30  day, about 15-20
1770: 25 20 6f 66 20 77 68 69 63 68 20 61 72 65 20 64  % of which are d
1780: 79 6e 61 6d 69 63 20 70 61 67 65 73 20 74 68 61  ynamic pages tha
1790: 74 0a 74 6f 75 63 68 20 74 68 65 20 64 61 74 61  t.touch the data
17a0: 62 61 73 65 2e 20 20 45 61 63 68 20 64 79 6e 61  base.  Each dyna
17b0: 6d 69 63 20 70 61 67 65 20 64 6f 65 73 20 72 6f  mic page does ro
17c0: 75 67 68 6c 79 20 32 30 30 20 53 51 4c 20 73 74  ughly 200 SQL st
17d0: 61 74 65 6d 65 6e 74 73 2e 0a 54 68 69 73 20 73  atements..This s
17e0: 65 74 75 70 20 72 75 6e 73 20 6f 6e 20 61 20 73  etup runs on a s
17f0: 69 6e 67 6c 65 20 56 4d 20 74 68 61 74 20 73 68  ingle VM that sh
1800: 61 72 65 73 20 61 20 70 68 79 73 69 63 61 6c 20  ares a physical 
1810: 73 65 72 76 65 72 20 77 69 74 68 20 32 33 20 6f  server with 23 o
1820: 74 68 65 72 73 0a 61 6e 64 20 79 65 74 20 73 74  thers.and yet st
1830: 69 6c 6c 20 6b 65 65 70 73 20 74 68 65 20 6c 6f  ill keeps the lo
1840: 61 64 20 61 76 65 72 61 67 65 20 6f 66 20 62 65  ad average of be
1850: 6c 6f 77 20 30 2e 31 20 6d 6f 73 74 20 6f 66 20  low 0.1 most of 
1860: 74 68 65 20 74 69 6d 65 2e 0a 3c 2f 6c 69 3e 0a  the time..</li>.
1870: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 43 6f 6d 6d 61  .<li><p><b>Comma
1880: 6e 64 2d 6c 69 6e 65 20 64 61 74 61 20 61 6e 61  nd-line data ana
1890: 6c 79 73 69 73 20 74 6f 6f 6c 3c 2f 62 3e 3c 2f  lysis tool</b></
18a0: 70 3e 0a 0a 3c 70 3e 0a 45 78 70 65 72 69 65 6e  p>..<p>.Experien
18b0: 63 65 64 20 53 51 4c 20 75 73 65 72 73 20 63 61  ced SQL users ca
18c0: 6e 20 65 6d 70 6c 6f 79 20 74 68 65 20 0a 5b 63  n employ the .[c
18d0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
18e0: 6c 7c 73 71 6c 69 74 65 33 20 63 6f 6d 6d 61 6e  l|sqlite3 comman
18f0: 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 74 6f  d-line shell] to
1900: 20 61 6e 61 6c 79 7a 65 20 6c 61 72 67 65 0a 64   analyze large.d
1910: 61 74 61 73 65 74 73 2e 20 52 61 77 20 64 61 74  atasets. Raw dat
1920: 61 20 63 61 6e 20 62 65 20 69 6d 70 6f 72 74 65  a can be importe
1930: 64 20 66 72 6f 6d 20 43 53 56 20 66 69 6c 65 73  d from CSV files
1940: 2c 20 74 68 65 6e 20 74 68 61 74 0a 64 61 74 61  , then that.data
1950: 20 63 61 6e 20 62 65 20 73 6c 69 63 65 64 20 61   can be sliced a
1960: 6e 64 20 64 69 63 65 64 20 74 6f 20 67 65 6e 65  nd diced to gene
1970: 72 61 74 65 20 61 20 6d 79 72 69 61 64 20 6f 66  rate a myriad of
1980: 20 73 75 6d 6d 61 72 79 0a 72 65 70 6f 72 74 73   summary.reports
1990: 2e 20 20 50 6f 73 73 69 62 6c 65 20 75 73 65 73  .  Possible uses
19a0: 20 69 6e 63 6c 75 64 65 20 77 65 62 73 69 74 65   include website
19b0: 20 6c 6f 67 20 61 6e 61 6c 79 73 69 73 2c 20 73   log analysis, s
19c0: 70 6f 72 74 73 0a 73 74 61 74 69 73 74 69 63 73  ports.statistics
19d0: 20 61 6e 61 6c 79 73 69 73 2c 20 63 6f 6d 70 69   analysis, compi
19e0: 6c 61 74 69 6f 6e 20 6f 66 20 70 72 6f 67 72 61  lation of progra
19f0: 6d 6d 69 6e 67 20 6d 65 74 72 69 63 73 2c 20 61  mming metrics, a
1a00: 6e 64 0a 61 6e 61 6c 79 73 69 73 20 6f 66 20 65  nd.analysis of e
1a10: 78 70 65 72 69 6d 65 6e 74 61 6c 20 72 65 73 75  xperimental resu
1a20: 6c 74 73 2e 20 20 4d 61 6e 79 20 62 69 6f 69 6e  lts.  Many bioin
1a30: 66 6f 72 6d 61 74 69 63 73 20 72 65 73 65 61 72  formatics resear
1a40: 63 68 65 72 73 0a 75 73 65 20 53 51 4c 69 74 65  chers.use SQLite
1a50: 20 69 6e 20 74 68 69 73 20 77 61 79 2e 0a 3c 2f   in this way..</
1a60: 70 3e 0a 0a 3c 70 3e 0a 59 6f 75 20 63 61 6e 20  p>..<p>.You can 
1a70: 61 6c 73 6f 20 64 6f 20 74 68 65 20 73 61 6d 65  also do the same
1a80: 20 74 68 69 6e 67 20 77 69 74 68 20 61 6e 20 65   thing with an e
1a90: 6e 74 65 72 70 72 69 73 65 20 63 6c 69 65 6e 74  nterprise client
1aa0: 2f 73 65 72 76 65 72 0a 64 61 74 61 62 61 73 65  /server.database
1ab0: 2c 20 6f 66 20 63 6f 75 72 73 65 2e 20 20 54 68  , of course.  Th
1ac0: 65 20 61 64 76 61 6e 74 61 67 65 20 6f 66 20 53  e advantage of S
1ad0: 51 4c 69 74 65 20 69 73 0a 74 68 61 74 20 69 74  QLite is.that it
1ae0: 20 69 73 20 65 61 73 69 65 72 20 74 6f 20 73 65   is easier to se
1af0: 74 20 75 70 20 61 6e 64 20 74 68 65 20 72 65 73  t up and the res
1b00: 75 6c 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  ulting database 
1b10: 0a 69 73 20 61 20 73 69 6e 67 6c 65 20 66 69 6c  .is a single fil
1b20: 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 65 61  e that can be ea
1b30: 73 69 6c 79 20 77 72 69 74 74 65 6e 20 74 6f 20  sily written to 
1b40: 61 20 55 53 42 20 6d 65 6d 6f 72 79 20 73 74 69  a USB memory sti
1b50: 63 6b 0a 6f 72 20 65 6d 61 69 6c 65 64 20 74 6f  ck.or emailed to
1b60: 20 61 20 63 6f 6c 6c 65 61 67 75 65 2e 0a 3c 2f   a colleague..</
1b70: 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  p>.</li>..<li><p
1b80: 3e 3c 62 3e 46 69 6c 65 20 61 72 63 68 69 76 65  ><b>File archive
1b90: 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54  s</b></p>..<p>.T
1ba0: 68 65 20 5b 68 74 74 70 73 3a 2f 2f 77 77 77 2e  he [https://www.
1bb0: 73 71 6c 69 74 65 2e 6f 72 67 2f 73 71 6c 61 72  sqlite.org/sqlar
1bc0: 7c 53 51 4c 69 74 65 20 41 72 63 68 69 76 65 72  |SQLite Archiver
1bd0: 5d 20 70 72 6f 6a 65 63 74 20 73 68 6f 77 73 20  ] project shows 
1be0: 68 6f 77 0a 53 51 4c 69 74 65 20 63 61 6e 20 62  how.SQLite can b
1bf0: 65 20 75 73 65 64 20 61 73 20 61 20 73 75 62 73  e used as a subs
1c00: 74 69 74 75 74 65 20 66 6f 72 20 5a 49 50 20 61  titute for ZIP a
1c10: 72 63 68 69 76 65 73 20 6f 72 20 54 61 72 62 61  rchives or Tarba
1c20: 6c 6c 73 2e 0a 41 6e 20 61 72 63 68 69 76 65 20  lls..An archive 
1c30: 6f 66 20 66 69 6c 65 73 20 73 74 6f 72 65 64 20  of files stored 
1c40: 69 6e 20 53 51 4c 69 74 65 20 69 73 20 6f 6e 6c  in SQLite is onl
1c50: 79 20 76 65 72 79 20 73 6c 69 67 68 74 6c 79 20  y very slightly 
1c60: 6c 61 72 67 65 72 2c 20 61 6e 64 0a 69 6e 20 73  larger, and.in s
1c70: 6f 6d 65 20 63 61 73 65 73 20 61 63 74 75 61 6c  ome cases actual
1c80: 6c 79 20 73 6d 61 6c 6c 65 72 2c 20 74 68 61 6e  ly smaller, than
1c90: 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
1ca0: 5a 49 50 20 61 72 63 68 69 76 65 2e 0a 41 6e 64  ZIP archive..And
1cb0: 20 61 6e 20 53 51 4c 69 74 65 20 61 72 63 68 69   an SQLite archi
1cc0: 76 65 20 66 65 61 74 75 72 65 73 20 69 6e 63 72  ve features incr
1cd0: 65 6d 65 6e 74 61 6c 20 61 6e 64 20 61 74 6f 6d  emental and atom
1ce0: 69 63 20 75 70 64 61 74 69 6e 67 0a 61 6e 64 20  ic updating.and 
1cf0: 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 73  the ability to s
1d00: 74 6f 72 65 20 6d 75 63 68 20 72 69 63 68 65 72  tore much richer
1d10: 20 6d 65 74 61 64 61 74 61 2e 0a 3c 2f 70 3e 0a   metadata..</p>.
1d20: 0a 3c 70 3e 53 51 4c 69 74 65 20 61 72 63 68 69  .<p>SQLite archi
1d30: 76 65 73 20 61 72 65 20 75 73 65 66 75 6c 20 61  ves are useful a
1d40: 73 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69  s the distributi
1d50: 6f 6e 20 66 6f 72 6d 61 74 20 66 6f 72 20 73 6f  on format for so
1d60: 66 74 77 61 72 65 0a 6f 72 20 63 6f 6e 74 65 6e  ftware.or conten
1d70: 74 20 75 70 64 61 74 65 73 20 74 68 61 74 20 61  t updates that a
1d80: 72 65 20 62 72 6f 61 64 63 61 73 74 20 74 6f 20  re broadcast to 
1d90: 6d 61 6e 79 20 63 6c 69 65 6e 74 73 2e 20 20 56  many clients.  V
1da0: 61 72 69 61 74 69 6f 6e 73 0a 6f 6e 20 74 68 69  ariations.on thi
1db0: 73 20 69 64 65 61 20 61 72 65 20 75 73 65 64 2c  s idea are used,
1dc0: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 6f   for example, to
1dd0: 20 74 72 61 6e 73 6d 69 74 20 54 56 20 70 72 6f   transmit TV pro
1de0: 67 72 61 6d 6d 69 6e 67 20 67 75 69 64 65 73 0a  gramming guides.
1df0: 74 6f 20 73 65 74 2d 74 6f 70 20 62 6f 78 65 73  to set-top boxes
1e00: 20 61 6e 64 20 74 6f 20 73 65 6e 64 20 6f 76 65   and to send ove
1e10: 72 2d 74 68 65 2d 61 69 72 20 75 70 64 61 74 65  r-the-air update
1e20: 73 20 74 6f 20 76 65 68 69 63 6c 65 20 6e 61 76  s to vehicle nav
1e30: 69 67 61 74 69 6f 6e 0a 73 79 73 74 65 6d 73 2e  igation.systems.
1e40: 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  </p>.</li>..<li>
1e50: 3c 70 3e 3c 62 3e 52 65 70 6c 61 63 65 6d 65 6e  <p><b>Replacemen
1e60: 74 20 66 6f 72 20 3c 69 3e 61 64 20 68 6f 63 3c  t for <i>ad hoc<
1e70: 2f 69 3e 20 64 69 73 6b 20 66 69 6c 65 73 3c 2f  /i> disk files</
1e80: 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 4d 61 6e 79 20  b></p>..<p>Many 
1e90: 70 72 6f 67 72 61 6d 73 20 75 73 65 20 0a 5b 68  programs use .[h
1ea0: 74 74 70 3a 2f 2f 6d 61 6e 2e 68 65 2e 6e 65 74  ttp://man.he.net
1eb0: 2f 6d 61 6e 33 2f 66 6f 70 65 6e 20 7c 20 66 6f  /man3/fopen | fo
1ec0: 70 65 6e 28 29 5d 2c 0a 5b 68 74 74 70 3a 2f 2f  pen()],.[http://
1ed0: 6d 61 6e 2e 68 65 2e 6e 65 74 2f 6d 61 6e 33 2f  man.he.net/man3/
1ee0: 66 72 65 61 64 20 7c 20 66 72 65 61 64 28 29 5d  fread | fread()]
1ef0: 2c 20 61 6e 64 20 0a 5b 68 74 74 70 3a 2f 2f 6d  , and .[http://m
1f00: 61 6e 2e 68 65 2e 6e 65 74 2f 6d 61 6e 33 2f 66  an.he.net/man3/f
1f10: 77 72 69 74 65 20 7c 20 66 77 72 69 74 65 28 29  write | fwrite()
1f20: 5d 20 74 6f 20 63 72 65 61 74 65 20 61 6e 64 0a  ] to create and.
1f30: 6d 61 6e 61 67 65 20 66 69 6c 65 73 20 6f 66 20  manage files of 
1f40: 64 61 74 61 20 69 6e 20 68 6f 6d 65 2d 67 72 6f  data in home-gro
1f50: 77 6e 20 66 6f 72 6d 61 74 73 2e 20 20 53 51 4c  wn formats.  SQL
1f60: 69 74 65 20 77 6f 72 6b 73 20 0a 70 61 72 74 69  ite works .parti
1f70: 63 75 6c 61 72 6c 79 20 77 65 6c 6c 20 61 73 20  cularly well as 
1f80: 61 0a 72 65 70 6c 61 63 65 6d 65 6e 74 20 66 6f  a.replacement fo
1f90: 72 20 74 68 65 73 65 20 3c 69 3e 61 64 20 68 6f  r these <i>ad ho
1fa0: 63 3c 2f 69 3e 20 64 61 74 61 20 66 69 6c 65 73  c</i> data files
1fb0: 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69  .</p>.</li>..<li
1fc0: 3e 3c 70 3e 3c 62 3e 49 6e 74 65 72 6e 61 6c 20  ><p><b>Internal 
1fd0: 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  or temporary dat
1fe0: 61 62 61 73 65 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a  abases</b></p>..
1ff0: 3c 70 3e 0a 46 6f 72 20 70 72 6f 67 72 61 6d 73  <p>.For programs
2000: 20 74 68 61 74 20 68 61 76 65 20 61 20 6c 6f 74   that have a lot
2010: 20 6f 66 20 64 61 74 61 20 74 68 61 74 20 6d 75   of data that mu
2020: 73 74 20 62 65 20 73 69 66 74 65 64 20 61 6e 64  st be sifted and
2030: 20 73 6f 72 74 65 64 0a 69 6e 20 64 69 76 65 72   sorted.in diver
2040: 73 65 20 77 61 79 73 2c 20 69 74 20 69 73 20 6f  se ways, it is o
2050: 66 74 65 6e 20 65 61 73 69 65 72 20 61 6e 64 20  ften easier and 
2060: 71 75 69 63 6b 65 72 20 74 6f 20 6c 6f 61 64 20  quicker to load 
2070: 74 68 65 20 64 61 74 61 20 69 6e 74 6f 0a 61 6e  the data into.an
2080: 20 69 6e 2d 6d 65 6d 6f 72 79 20 53 51 4c 69 74   in-memory SQLit
2090: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 75  e database and u
20a0: 73 65 20 71 75 65 72 69 65 73 20 77 69 74 68 20  se queries with 
20b0: 6a 6f 69 6e 73 20 61 6e 64 20 4f 52 44 45 52 20  joins and ORDER 
20c0: 42 59 0a 63 6c 61 75 73 65 73 20 74 6f 20 65 78  BY.clauses to ex
20d0: 74 72 61 63 74 20 74 68 65 20 64 61 74 61 20 69  tract the data i
20e0: 6e 20 74 68 65 20 66 6f 72 6d 20 61 6e 64 20 6f  n the form and o
20f0: 72 64 65 72 20 6e 65 65 64 65 64 20 72 61 74 68  rder needed rath
2100: 65 72 20 74 68 61 6e 0a 74 6f 20 74 72 79 20 74  er than.to try t
2110: 6f 20 63 6f 64 65 20 74 68 65 20 73 61 6d 65 20  o code the same 
2120: 6f 70 65 72 61 74 69 6f 6e 73 20 6d 61 6e 75 61  operations manua
2130: 6c 6c 79 2e 0a 55 73 69 6e 67 20 61 6e 20 53 51  lly..Using an SQ
2140: 4c 20 64 61 74 61 62 61 73 65 20 69 6e 74 65 72  L database inter
2150: 6e 61 6c 6c 79 20 69 6e 20 74 68 69 73 20 77 61  nally in this wa
2160: 79 20 61 6c 73 6f 20 67 69 76 65 73 20 74 68 65  y also gives the
2170: 20 70 72 6f 67 72 61 6d 0a 67 72 65 61 74 65 72   program.greater
2180: 20 66 6c 65 78 69 62 69 6c 69 74 79 20 73 69 6e   flexibility sin
2190: 63 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 73 20 61  ce new columns a
21a0: 6e 64 20 69 6e 64 69 63 65 73 20 63 61 6e 20 62  nd indices can b
21b0: 65 20 61 64 64 65 64 20 77 69 74 68 6f 75 74 0a  e added without.
21c0: 68 61 76 69 6e 67 20 74 6f 20 72 65 63 6f 64 65  having to recode
21d0: 20 65 76 65 72 79 20 71 75 65 72 79 2e 0a 3c 2f   every query..</
21e0: 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  p>.</li>..<li><p
21f0: 3e 3c 62 3e 53 74 61 6e 64 2d 69 6e 20 66 6f 72  ><b>Stand-in for
2200: 20 61 6e 20 65 6e 74 65 72 70 72 69 73 65 20 64   an enterprise d
2210: 61 74 61 62 61 73 65 20 64 75 72 69 6e 67 20 64  atabase during d
2220: 65 6d 6f 73 20 6f 72 20 74 65 73 74 69 6e 67 3c  emos or testing<
2230: 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20  /b></p>..<p>.If 
2240: 79 6f 75 20 61 72 65 20 77 72 69 74 69 6e 67 20  you are writing 
2250: 61 20 63 6c 69 65 6e 74 20 61 70 70 6c 69 63 61  a client applica
2260: 74 69 6f 6e 20 66 6f 72 20 61 6e 20 65 6e 74 65  tion for an ente
2270: 72 70 72 69 73 65 20 64 61 74 61 62 61 73 65 20  rprise database 
2280: 65 6e 67 69 6e 65 2c 0a 69 74 20 6d 61 6b 65 73  engine,.it makes
2290: 20 73 65 6e 73 65 20 74 6f 20 75 73 65 20 61 20   sense to use a 
22a0: 67 65 6e 65 72 69 63 20 64 61 74 61 62 61 73 65  generic database
22b0: 20 62 61 63 6b 65 6e 64 20 74 68 61 74 20 61 6c   backend that al
22c0: 6c 6f 77 73 20 79 6f 75 20 74 6f 20 63 6f 6e 6e  lows you to conn
22d0: 65 63 74 0a 74 6f 20 6d 61 6e 79 20 64 69 66 66  ect.to many diff
22e0: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 53  erent kinds of S
22f0: 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
2300: 6e 65 73 2e 20 20 49 74 20 6d 61 6b 65 73 20 65  nes.  It makes e
2310: 76 65 6e 20 62 65 74 74 65 72 0a 73 65 6e 73 65  ven better.sense
2320: 20 74 6f 0a 67 6f 20 61 68 65 61 64 20 61 6e 64   to.go ahead and
2330: 20 69 6e 63 6c 75 64 65 20 53 51 4c 69 74 65 20   include SQLite 
2340: 69 6e 20 74 68 65 20 6d 69 78 20 6f 66 20 73 75  in the mix of su
2350: 70 70 6f 72 74 65 64 20 64 61 74 61 62 61 73 65  pported database
2360: 73 20 61 6e 64 20 74 6f 20 73 74 61 74 69 63 61  s and to statica
2370: 6c 6c 79 0a 6c 69 6e 6b 20 74 68 65 20 53 51 4c  lly.link the SQL
2380: 69 74 65 20 65 6e 67 69 6e 65 20 69 6e 20 77 69  ite engine in wi
2390: 74 68 20 74 68 65 20 63 6c 69 65 6e 74 2e 20 20  th the client.  
23a0: 54 68 61 74 20 77 61 79 20 74 68 65 20 63 6c 69  That way the cli
23b0: 65 6e 74 20 70 72 6f 67 72 61 6d 0a 63 61 6e 20  ent program.can 
23c0: 62 65 20 75 73 65 64 20 73 74 61 6e 64 61 6c 6f  be used standalo
23d0: 6e 65 20 77 69 74 68 20 61 6e 20 53 51 4c 69 74  ne with an SQLit
23e0: 65 20 64 61 74 61 20 66 69 6c 65 20 66 6f 72 20  e data file for 
23f0: 74 65 73 74 69 6e 67 20 6f 72 20 66 6f 72 0a 64  testing or for.d
2400: 65 6d 6f 6e 73 74 72 61 74 69 6f 6e 73 2e 0a 3c  emonstrations..<
2410: 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  /p>.</li>..<li><
2420: 70 3e 3c 62 3e 44 61 74 61 62 61 73 65 20 50 65  p><b>Database Pe
2430: 64 61 67 6f 67 79 3c 2f 62 3e 3c 2f 70 3e 0a 0a  dagogy</b></p>..
2440: 3c 70 3e 0a 42 65 63 61 75 73 65 20 69 74 20 69  <p>.Because it i
2450: 73 20 73 69 6d 70 6c 65 20 74 6f 20 73 65 74 75  s simple to setu
2460: 70 20 61 6e 64 20 75 73 65 20 28 69 6e 73 74 61  p and use (insta
2470: 6c 6c 61 74 69 6f 6e 20 69 73 20 74 72 69 76 69  llation is trivi
2480: 61 6c 3a 20 6a 75 73 74 0a 63 6f 70 79 20 74 68  al: just.copy th
2490: 65 20 3c 62 3e 73 71 6c 69 74 65 33 3c 2f 62 3e  e <b>sqlite3</b>
24a0: 20 6f 72 20 3c 62 3e 73 71 6c 69 74 65 33 2e 65   or <b>sqlite3.e
24b0: 78 65 3c 2f 62 3e 20 65 78 65 63 75 74 61 62 6c  xe</b> executabl
24c0: 65 20 74 6f 20 74 68 65 20 74 61 72 67 65 74 20  e to the target 
24d0: 6d 61 63 68 69 6e 65 0a 61 6e 64 20 72 75 6e 20  machine.and run 
24e0: 69 74 29 20 53 51 4c 69 74 65 20 6d 61 6b 65 73  it) SQLite makes
24f0: 20 61 20 67 6f 6f 64 20 64 61 74 61 62 61 73 65   a good database
2500: 20 65 6e 67 69 6e 65 20 66 6f 72 20 75 73 65 20   engine for use 
2510: 69 6e 20 74 65 61 63 68 69 6e 67 20 53 51 4c 2e  in teaching SQL.
2520: 0a 53 74 75 64 65 6e 74 73 20 63 61 6e 20 65 61  .Students can ea
2530: 73 69 6c 79 20 63 72 65 61 74 65 20 61 73 20 6d  sily create as m
2540: 61 6e 79 20 64 61 74 61 62 61 73 65 73 20 61 73  any databases as
2550: 20 74 68 65 79 20 6c 69 6b 65 20 61 6e 64 20 63   they like and c
2560: 61 6e 0a 65 6d 61 69 6c 20 64 61 74 61 62 61 73  an.email databas
2570: 65 73 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  es to the instru
2580: 63 74 6f 72 20 66 6f 72 20 63 6f 6d 6d 65 6e 74  ctor for comment
2590: 73 20 6f 72 20 67 72 61 64 69 6e 67 2e 20 20 46  s or grading.  F
25a0: 6f 72 20 6d 6f 72 65 0a 61 64 76 61 6e 63 65 64  or more.advanced
25b0: 20 73 74 75 64 65 6e 74 73 20 77 68 6f 20 61 72   students who ar
25c0: 65 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  e interested in 
25d0: 73 74 75 64 79 69 6e 67 20 68 6f 77 20 61 6e 20  studying how an 
25e0: 52 44 42 4d 53 20 69 73 0a 69 6d 70 6c 65 6d 65  RDBMS is.impleme
25f0: 6e 74 65 64 2c 20 74 68 65 20 6d 6f 64 75 6c 61  nted, the modula
2600: 72 20 61 6e 64 20 77 65 6c 6c 2d 63 6f 6d 6d 65  r and well-comme
2610: 6e 74 65 64 20 61 6e 64 20 64 6f 63 75 6d 65 6e  nted and documen
2620: 74 65 64 20 53 51 4c 69 74 65 20 63 6f 64 65 0a  ted SQLite code.
2630: 63 61 6e 20 73 65 72 76 65 20 61 73 20 61 20 67  can serve as a g
2640: 6f 6f 64 20 62 61 73 69 73 2e 20 20 54 68 69 73  ood basis.  This
2650: 20 69 73 20 6e 6f 74 20 74 6f 20 73 61 79 20 74   is not to say t
2660: 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 61 6e  hat SQLite is an
2670: 20 61 63 63 75 72 61 74 65 0a 6d 6f 64 65 6c 20   accurate.model 
2680: 6f 66 20 68 6f 77 20 6f 74 68 65 72 20 64 61 74  of how other dat
2690: 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 61 72  abase engines ar
26a0: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20 62  e implemented, b
26b0: 75 74 20 72 61 74 68 65 72 20 61 20 73 74 75 64  ut rather a stud
26c0: 65 6e 74 20 77 68 6f 0a 75 6e 64 65 72 73 74 61  ent who.understa
26d0: 6e 64 73 20 68 6f 77 20 53 51 4c 69 74 65 20 77  nds how SQLite w
26e0: 6f 72 6b 73 20 63 61 6e 20 6d 6f 72 65 20 71 75  orks can more qu
26f0: 69 63 6b 6c 79 20 63 6f 6d 70 72 65 68 65 6e 64  ickly comprehend
2700: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 61 6c   the operational
2710: 0a 70 72 69 6e 63 69 70 6c 65 73 20 6f 66 20 6f  .principles of o
2720: 74 68 65 72 20 73 79 73 74 65 6d 73 2e 0a 3c 2f  ther systems..</
2730: 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  p>.</li>..<li><p
2740: 3e 3c 62 3e 45 78 70 65 72 69 6d 65 6e 74 61 6c  ><b>Experimental
2750: 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 65 78   SQL language ex
2760: 74 65 6e 73 69 6f 6e 73 3c 2f 62 3e 3c 2f 70 3e  tensions</b></p>
2770: 0a 0a 3c 70 3e 54 68 65 20 73 69 6d 70 6c 65 2c  ..<p>The simple,
2780: 20 6d 6f 64 75 6c 61 72 20 64 65 73 69 67 6e 20   modular design 
2790: 6f 66 20 53 51 4c 69 74 65 20 6d 61 6b 65 73 20  of SQLite makes 
27a0: 69 74 20 61 20 67 6f 6f 64 20 70 6c 61 74 66 6f  it a good platfo
27b0: 72 6d 20 66 6f 72 0a 70 72 6f 74 6f 74 79 70 69  rm for.prototypi
27c0: 6e 67 20 6e 65 77 2c 20 65 78 70 65 72 69 6d 65  ng new, experime
27d0: 6e 74 61 6c 20 64 61 74 61 62 61 73 65 20 6c 61  ntal database la
27e0: 6e 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20  nguage features 
27f0: 6f 72 20 69 64 65 61 73 2e 0a 3c 2f 70 3e 0a 3c  or ideas..</p>.<
2800: 2f 6c 69 3e 0a 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 68  /li>...</ul>..<h
2810: 32 3e 53 69 74 75 61 74 69 6f 6e 73 20 57 68 65  2>Situations Whe
2820: 72 65 20 41 20 43 6c 69 65 6e 74 2f 53 65 72 76  re A Client/Serv
2830: 65 72 20 52 44 42 4d 53 20 4d 61 79 20 57 6f 72  er RDBMS May Wor
2840: 6b 20 42 65 74 74 65 72 3c 2f 68 32 3e 0a 0a 3c  k Better</h2>..<
2850: 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 43 6c  ul>.<li><p><b>Cl
2860: 69 65 6e 74 2f 53 65 72 76 65 72 20 41 70 70 6c  ient/Server Appl
2870: 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c 70 3e 0a  ications</b><p>.
2880: 0a 3c 70 3e 49 66 20 79 6f 75 20 68 61 76 65 20  .<p>If you have 
2890: 6d 61 6e 79 20 63 6c 69 65 6e 74 20 70 72 6f 67  many client prog
28a0: 72 61 6d 73 20 61 63 63 65 73 73 69 6e 67 20 61  rams accessing a
28b0: 20 63 6f 6d 6d 6f 6e 20 64 61 74 61 62 61 73 65   common database
28c0: 0a 6f 76 65 72 20 61 20 6e 65 74 77 6f 72 6b 2c  .over a network,
28d0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 63 6f 6e 73   you should cons
28e0: 69 64 65 72 20 75 73 69 6e 67 20 61 20 63 6c 69  ider using a cli
28f0: 65 6e 74 2f 73 65 72 76 65 72 20 64 61 74 61 62  ent/server datab
2900: 61 73 65 0a 65 6e 67 69 6e 65 20 69 6e 73 74 65  ase.engine inste
2910: 61 64 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 53  ad of SQLite.  S
2920: 51 4c 69 74 65 20 77 69 6c 6c 20 77 6f 72 6b 20  QLite will work 
2930: 6f 76 65 72 20 61 20 6e 65 74 77 6f 72 6b 20 66  over a network f
2940: 69 6c 65 73 79 73 74 65 6d 2c 0a 62 75 74 20 62  ilesystem,.but b
2950: 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 6c 61  ecause of the la
2960: 74 65 6e 63 79 20 61 73 73 6f 63 69 61 74 65 64  tency associated
2970: 20 77 69 74 68 20 6d 6f 73 74 20 6e 65 74 77 6f   with most netwo
2980: 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 73 2c 0a  rk filesystems,.
2990: 70 65 72 66 6f 72 6d 61 6e 63 65 20 77 69 6c 6c  performance will
29a0: 20 6e 6f 74 20 62 65 20 67 72 65 61 74 2e 20 20   not be great.  
29b0: 41 6c 73 6f 2c 20 74 68 65 20 66 69 6c 65 20 6c  Also, the file l
29c0: 6f 63 6b 69 6e 67 20 6c 6f 67 69 63 20 6f 66 0a  ocking logic of.
29d0: 6d 61 6e 79 20 6e 65 74 77 6f 72 6b 20 66 69 6c  many network fil
29e0: 65 73 79 73 74 65 6d 73 20 69 6d 70 6c 65 6d 65  esystems impleme
29f0: 6e 74 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 73  ntation contains
2a00: 20 62 75 67 73 20 28 6f 6e 20 62 6f 74 68 20 55   bugs (on both U
2a10: 6e 69 78 0a 61 6e 64 20 57 69 6e 64 6f 77 73 29  nix.and Windows)
2a20: 2e 20 20 49 66 20 66 69 6c 65 20 6c 6f 63 6b 69  .  If file locki
2a30: 6e 67 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  ng does not work
2a40: 20 6c 69 6b 65 20 69 74 20 73 68 6f 75 6c 64 2c   like it should,
2a50: 0a 69 74 20 6d 69 67 68 74 20 62 65 20 70 6f 73  .it might be pos
2a60: 73 69 62 6c 65 20 66 6f 72 20 74 77 6f 20 6f 72  sible for two or
2a70: 20 6d 6f 72 65 20 63 6c 69 65 6e 74 20 70 72 6f   more client pro
2a80: 67 72 61 6d 73 20 74 6f 20 6d 6f 64 69 66 79 20  grams to modify 
2a90: 74 68 65 0a 73 61 6d 65 20 70 61 72 74 20 6f 66  the.same part of
2aa0: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
2ab0: 73 65 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  se at the same t
2ac0: 69 6d 65 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  ime, resulting i
2ad0: 6e 20 0a 64 61 74 61 62 61 73 65 20 63 6f 72 72  n .database corr
2ae0: 75 70 74 69 6f 6e 2e 20 20 42 65 63 61 75 73 65  uption.  Because
2af0: 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 20 72 65   this problem re
2b00: 73 75 6c 74 73 20 66 72 6f 6d 20 62 75 67 73 20  sults from bugs 
2b10: 69 6e 0a 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in.the underlyin
2b20: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 69 6d 70  g filesystem imp
2b30: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
2b40: 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20 53 51  re is nothing SQ
2b50: 4c 69 74 65 0a 63 61 6e 20 64 6f 20 74 6f 20 70  Lite.can do to p
2b60: 72 65 76 65 6e 74 20 69 74 2e 3c 2f 70 3e 0a 0a  revent it.</p>..
2b70: 3c 70 3e 41 20 67 6f 6f 64 20 72 75 6c 65 20 6f  <p>A good rule o
2b80: 66 20 74 68 75 6d 62 20 69 73 20 74 68 61 74 20  f thumb is that 
2b90: 79 6f 75 20 73 68 6f 75 6c 64 20 61 76 6f 69 64  you should avoid
2ba0: 20 75 73 69 6e 67 20 53 51 4c 69 74 65 0a 69 6e   using SQLite.in
2bb0: 20 73 69 74 75 61 74 69 6f 6e 73 20 77 68 65 72   situations wher
2bc0: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
2bd0: 61 73 65 20 77 69 6c 6c 20 62 65 20 61 63 63 65  ase will be acce
2be0: 73 73 65 64 20 73 69 6d 75 6c 74 61 6e 65 6f 75  ssed simultaneou
2bf0: 73 6c 79 0a 66 72 6f 6d 20 6d 61 6e 79 20 63 6f  sly.from many co
2c00: 6d 70 75 74 65 72 73 20 6f 76 65 72 20 61 20 6e  mputers over a n
2c10: 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65  etwork filesyste
2c20: 6d 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c  m.</p>.</li>..<l
2c30: 69 3e 3c 70 3e 3c 62 3e 48 69 67 68 2d 76 6f 6c  i><p><b>High-vol
2c40: 75 6d 65 20 57 65 62 73 69 74 65 73 3c 2f 62 3e  ume Websites</b>
2c50: 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20  </p>..<p>SQLite 
2c60: 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f  will normally wo
2c70: 72 6b 20 66 69 6e 65 20 61 73 20 74 68 65 20 64  rk fine as the d
2c80: 61 74 61 62 61 73 65 20 62 61 63 6b 65 6e 64 20  atabase backend 
2c90: 74 6f 20 61 20 77 65 62 73 69 74 65 2e 0a 42 75  to a website..Bu
2ca0: 74 20 69 66 20 79 6f 75 72 20 77 65 62 73 69 74  t if your websit
2cb0: 65 20 69 73 20 73 6f 20 62 75 73 79 20 74 68 61  e is so busy tha
2cc0: 74 20 79 6f 75 20 61 72 65 20 74 68 69 6e 6b 69  t you are thinki
2cd0: 6e 67 20 6f 66 20 73 70 6c 69 74 74 69 6e 67 20  ng of splitting 
2ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 63 6f 6d  the.database com
2cf0: 70 6f 6e 65 6e 74 20 6f 66 66 20 6f 6e 74 6f 20  ponent off onto 
2d00: 61 20 73 65 70 61 72 61 74 65 20 6d 61 63 68 69  a separate machi
2d10: 6e 65 2c 20 74 68 65 6e 20 79 6f 75 20 73 68 6f  ne, then you sho
2d20: 75 6c 64 20 0a 64 65 66 69 6e 69 74 65 6c 79 20  uld .definitely 
2d30: 63 6f 6e 73 69 64 65 72 20 75 73 69 6e 67 20 61  consider using a
2d40: 6e 20 65 6e 74 65 72 70 72 69 73 65 2d 63 6c 61  n enterprise-cla
2d50: 73 73 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72  ss client/server
2d60: 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e 65   database.engine
2d70: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 69   instead of SQLi
2d80: 74 65 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c  te.</p>.</li>..<
2d90: 6c 69 3e 3c 70 3e 3c 62 3e 56 65 72 79 20 6c 61  li><p><b>Very la
2da0: 72 67 65 20 64 61 74 61 73 65 74 73 3c 2f 62 3e  rge datasets</b>
2db0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 53 51 4c 69  </p>..<p>An SQLi
2dc0: 74 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6c  te database is l
2dd0: 69 6d 69 74 65 64 20 69 6e 20 73 69 7a 65 20 74  imited in size t
2de0: 6f 20 31 34 30 20 74 65 72 61 62 79 74 65 73 20  o 140 terabytes 
2df0: 0a 28 32 3c 73 75 70 3e 3c 73 6d 61 6c 6c 3e 34  .(2<sup><small>4
2e00: 37 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 70 3e 20  7</small></sup> 
2e10: 62 79 74 65 73 2c 20 31 32 38 20 74 69 62 69 62  bytes, 128 tibib
2e20: 79 74 65 73 29 2e 0a 41 6e 64 20 65 76 65 6e 20  ytes)..And even 
2e30: 69 66 20 69 74 20 63 6f 75 6c 64 20 68 61 6e 64  if it could hand
2e40: 6c 65 20 6c 61 72 67 65 72 20 64 61 74 61 62 61  le larger databa
2e50: 73 65 73 2c 20 53 51 4c 69 74 65 20 73 74 6f 72  ses, SQLite stor
2e60: 65 73 20 74 68 65 20 65 6e 74 69 72 65 0a 64 61  es the entire.da
2e70: 74 61 62 61 73 65 20 69 6e 20 61 20 73 69 6e 67  tabase in a sing
2e80: 6c 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  le disk file and
2e90: 20 6d 61 6e 79 20 66 69 6c 65 73 79 73 74 65 6d   many filesystem
2ea0: 73 20 6c 69 6d 69 74 20 74 68 65 20 6d 61 78 69  s limit the maxi
2eb0: 6d 75 6d 0a 73 69 7a 65 20 6f 66 20 66 69 6c 65  mum.size of file
2ec0: 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 20 6c  s to something l
2ed0: 65 73 73 20 74 68 61 6e 20 74 68 69 73 2e 20 20  ess than this.  
2ee0: 53 6f 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f  So if you are co
2ef0: 6e 74 65 6d 70 6c 61 74 69 6e 67 0a 64 61 74 61  ntemplating.data
2f00: 62 61 73 65 73 20 6f 66 20 74 68 69 73 20 6d 61  bases of this ma
2f10: 67 6e 69 74 75 64 65 2c 20 79 6f 75 20 77 6f 75  gnitude, you wou
2f20: 6c 64 20 64 6f 20 77 65 6c 6c 20 74 6f 20 63 6f  ld do well to co
2f30: 6e 73 69 64 65 72 20 75 73 69 6e 67 20 61 0a 63  nsider using a.c
2f40: 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 64 61 74  lient/server dat
2f50: 61 62 61 73 65 20 65 6e 67 69 6e 65 20 74 68 61  abase engine tha
2f60: 74 20 73 70 72 65 61 64 73 20 69 74 73 20 63 6f  t spreads its co
2f70: 6e 74 65 6e 74 20 61 63 72 6f 73 73 20 6d 75 6c  ntent across mul
2f80: 74 69 70 6c 65 0a 64 69 73 6b 20 66 69 6c 65 73  tiple.disk files
2f90: 2c 20 61 6e 64 20 70 65 72 68 61 70 73 20 61 63  , and perhaps ac
2fa0: 72 6f 73 73 20 6d 75 6c 74 69 70 6c 65 20 76 6f  ross multiple vo
2fb0: 6c 75 6d 65 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69  lumes..</p>.</li
2fc0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 48 69 67  >..<li><p><b>Hig
2fd0: 68 20 43 6f 6e 63 75 72 72 65 6e 63 79 3c 2f 62  h Concurrency</b
2fe0: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  ></p>..<p>.SQLit
2ff0: 65 20 73 75 70 70 6f 72 74 73 20 61 6e 20 75 6e  e supports an un
3000: 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65 72 20 6f  limited number o
3010: 66 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 20 72  f simultaneous r
3020: 65 61 64 65 72 73 2c 20 62 75 74 20 69 74 20 0a  eaders, but it .
3030: 77 69 6c 6c 20 6f 6e 6c 79 20 61 6c 6c 6f 77 20  will only allow 
3040: 6f 6e 65 20 77 72 69 74 65 72 20 61 74 20 61 6e  one writer at an
3050: 79 20 69 6e 73 74 61 6e 74 20 69 6e 20 74 69 6d  y instant in tim
3060: 65 2e 0a 46 6f 72 20 6d 61 6e 79 20 73 69 74 75  e..For many situ
3070: 61 74 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20  ations, this is 
3080: 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 20 20  not a problem.  
3090: 45 61 63 68 20 61 70 70 6c 69 63 61 74 69 6f 6e  Each application
30a0: 0a 64 6f 65 73 20 69 74 73 20 64 61 74 61 62 61  .does its databa
30b0: 73 65 20 77 6f 72 6b 20 71 75 69 63 6b 6c 79 20  se work quickly 
30c0: 61 6e 64 20 6d 6f 76 65 73 20 6f 6e 2c 20 61 6e  and moves on, an
30d0: 64 20 6e 6f 20 6c 6f 63 6b 20 6c 61 73 74 73 20  d no lock lasts 
30e0: 66 6f 72 20 6d 6f 72 65 0a 74 68 61 6e 20 61 20  for more.than a 
30f0: 66 65 77 20 64 6f 7a 65 6e 20 6d 69 6c 6c 69 73  few dozen millis
3100: 65 63 6f 6e 64 73 2e 20 42 75 74 20 74 68 65 72  econds. But ther
3110: 65 20 61 72 65 20 73 6f 6d 65 20 61 70 70 6c 69  e are some appli
3120: 63 61 74 69 6f 6e 73 20 74 68 61 74 20 72 65 71  cations that req
3130: 75 69 72 65 0a 6d 6f 72 65 20 63 6f 6e 63 75 72  uire.more concur
3140: 72 65 6e 63 79 2c 20 61 6e 64 20 74 68 6f 73 65  rency, and those
3150: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61   applications ma
3160: 79 20 6e 65 65 64 20 74 6f 20 73 65 65 6b 20 61  y need to seek a
3170: 20 64 69 66 66 65 72 65 6e 74 0a 73 6f 6c 75 74   different.solut
3180: 69 6f 6e 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a  ion..</p>.</li>.
3190: 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 68 64  .</ul>..<tcl>.hd
31a0: 5f 66 72 61 67 6d 65 6e 74 20 64 62 63 6b 6c 73  _fragment dbckls
31b0: 74 20 7b 64 65 63 69 73 69 6f 6e 20 63 68 65 63  t {decision chec
31c0: 6b 6c 69 73 74 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68  klist}.</tcl>.<h
31d0: 32 3e 43 68 65 63 6b 6c 69 73 74 20 46 6f 72 20  2>Checklist For 
31e0: 43 68 6f 6f 73 69 6e 67 20 54 68 65 20 52 69 67  Choosing The Rig
31f0: 68 74 20 44 61 74 61 62 61 73 65 20 45 6e 67 69  ht Database Engi
3200: 6e 65 3c 2f 68 32 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ne</h2>..<ol>.<l
3210: 69 3e 3c 70 3e 3c 62 3e 49 73 20 74 68 65 20 64  i><p><b>Is the d
3220: 61 74 61 20 73 65 70 61 72 61 74 65 64 20 66 72  ata separated fr
3230: 6f 6d 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  om the applicati
3240: 6f 6e 20 62 79 20 61 20 6e 65 74 77 6f 72 6b 3f  on by a network?
3250: 0a 20 20 20 20 20 20 20 26 72 61 72 72 3b 20 63  .       &rarr; c
3260: 68 6f 6f 73 65 20 63 6c 69 65 6e 74 2f 73 65 72  hoose client/ser
3270: 76 65 72 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e  ver</b></p>..<p>
3280: 52 65 6c 61 74 69 6f 6e 61 6c 20 64 61 74 61 62  Relational datab
3290: 61 73 65 20 65 6e 67 69 6e 65 73 20 61 63 74 20  ase engines act 
32a0: 61 73 20 61 20 62 61 6e 64 77 69 64 74 68 2d 72  as a bandwidth-r
32b0: 65 64 75 63 69 6e 67 20 64 61 74 61 20 66 69 6c  educing data fil
32c0: 74 65 72 2e 0a 53 6f 20 69 74 20 69 73 20 62 65  ter..So it is be
32d0: 73 74 20 74 6f 20 6b 65 65 70 20 74 68 65 20 64  st to keep the d
32e0: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 61  atabase engine a
32f0: 6e 64 20 74 68 65 20 64 61 74 61 20 6f 6e 0a 74  nd the data on.t
3300: 68 65 20 73 61 6d 65 20 70 68 79 73 69 63 61 6c  he same physical
3310: 20 64 65 76 69 63 65 20 73 6f 20 74 68 61 74 20   device so that 
3320: 74 68 65 20 68 69 67 68 2d 62 61 6e 64 77 69 64  the high-bandwid
3330: 74 68 20 65 6e 67 69 6e 65 2d 74 6f 2d 64 69 73  th engine-to-dis
3340: 6b 0a 6c 69 6e 6b 20 64 6f 65 73 20 6e 6f 74 20  k.link does not 
3350: 68 61 76 65 20 74 6f 20 74 72 61 76 65 72 73 65  have to traverse
3360: 20 74 68 65 20 6e 65 74 77 6f 72 6b 2c 20 6f 6e   the network, on
3370: 6c 79 20 74 68 65 20 6c 6f 77 65 72 2d 62 61 6e  ly the lower-ban
3380: 64 77 69 64 74 68 0a 61 70 70 6c 69 63 61 74 69  dwidth.applicati
3390: 6f 6e 2d 74 6f 2d 65 6e 67 69 6e 65 20 6c 69 6e  on-to-engine lin
33a0: 6b 2e 0a 0a 3c 70 3e 42 75 74 20 53 51 4c 69 74  k...<p>But SQLit
33b0: 65 20 69 73 20 62 75 69 6c 74 20 69 6e 74 6f 20  e is built into 
33c0: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e  the application.
33d0: 20 20 53 6f 20 69 66 20 74 68 65 20 64 61 74 61    So if the data
33e0: 20 69 73 20 6f 6e 20 61 0a 73 65 70 61 72 61 74   is on a.separat
33f0: 65 20 64 65 76 69 63 65 20 66 72 6f 6d 20 74 68  e device from th
3400: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 20 69  e application, i
3410: 74 20 69 73 20 72 65 71 75 69 72 65 64 20 74 68  t is required th
3420: 61 74 20 74 68 65 20 68 69 67 68 65 72 0a 62 61  at the higher.ba
3430: 6e 64 77 69 64 74 68 20 65 6e 67 69 6e 65 2d 74  ndwidth engine-t
3440: 6f 2d 64 69 73 6b 20 6c 69 6e 6b 20 62 65 20 61  o-disk link be a
3450: 63 72 6f 73 73 20 74 68 65 20 6e 65 74 77 6f 72  cross the networ
3460: 6b 2e 20 20 54 68 69 73 20 77 6f 72 6b 73 2c 20  k.  This works, 
3470: 62 75 74 0a 69 74 20 69 73 20 73 75 62 6f 70 74  but.it is subopt
3480: 69 6d 61 6c 2e 20 20 48 65 6e 63 65 2c 20 69 74  imal.  Hence, it
3490: 20 69 73 20 75 73 75 61 6c 6c 79 20 62 65 74 74   is usually bett
34a0: 65 72 20 74 6f 20 73 65 6c 65 63 74 20 61 20 63  er to select a c
34b0: 6c 69 65 6e 74 2f 73 65 72 76 65 72 0a 64 61 74  lient/server.dat
34c0: 61 62 61 73 65 20 65 6e 67 69 6e 65 20 77 68 65  abase engine whe
34d0: 6e 20 74 68 65 20 64 61 74 61 20 69 73 20 6f 6e  n the data is on
34e0: 20 61 20 73 65 70 61 72 61 74 65 20 64 65 76 69   a separate devi
34f0: 63 65 20 66 72 6f 6d 20 74 68 65 0a 61 70 70 6c  ce from the.appl
3500: 69 63 61 74 69 6f 6e 2e 0a 3c 2f 6c 69 3e 0a 0a  ication..</li>..
3510: 3c 6c 69 3e 3c 70 3e 3c 62 3e 4d 61 6e 79 20 63  <li><p><b>Many c
3520: 6f 6e 63 75 72 72 65 6e 74 20 77 72 69 74 65 72  oncurrent writer
3530: 73 3f 20 26 72 61 72 72 3b 20 63 68 6f 6f 73 65  s? &rarr; choose
3540: 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 3c 2f   client/server</
3550: 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6d 61  b></p>..<p>If ma
3560: 6e 79 20 74 68 72 65 61 64 73 20 61 6e 64 2f 6f  ny threads and/o
3570: 72 20 70 72 6f 63 65 73 73 65 73 20 6e 65 65 64  r processes need
3580: 20 74 6f 20 77 72 69 74 65 20 74 68 65 0a 64 61   to write the.da
3590: 74 61 62 61 73 65 20 61 74 20 74 68 65 20 73 61  tabase at the sa
35a0: 6d 65 20 69 6e 73 74 61 6e 74 20 28 61 6e 64 20  me instant (and 
35b0: 74 68 65 79 20 63 61 6e 6e 6f 74 20 71 75 65 75  they cannot queu
35c0: 65 20 75 70 20 61 6e 64 20 74 61 6b 65 20 74 75  e up and take tu
35d0: 72 6e 73 29 0a 74 68 65 6e 20 69 74 20 69 73 20  rns).then it is 
35e0: 62 65 73 74 20 74 6f 20 73 65 6c 65 63 74 20 61  best to select a
35f0: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
3600: 20 74 68 61 74 20 73 75 70 70 6f 72 74 73 20 74   that supports t
3610: 68 61 74 0a 63 61 70 61 62 69 6c 69 74 79 2c 20  hat.capability, 
3620: 77 68 69 63 68 20 61 6c 77 61 79 73 20 6d 65 61  which always mea
3630: 6e 73 20 61 20 63 6c 69 65 6e 74 2f 73 65 72 76  ns a client/serv
3640: 65 72 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  er database engi
3650: 6e 65 2e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 6f  ne...<p>SQLite o
3660: 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 6f 6e 65  nly supports one
3670: 20 77 72 69 74 65 72 20 61 74 20 61 20 74 69 6d   writer at a tim
3680: 65 20 70 65 72 20 64 61 74 61 62 61 73 65 20 66  e per database f
3690: 69 6c 65 2e 0a 42 75 74 20 69 6e 20 6d 6f 73 74  ile..But in most
36a0: 20 63 61 73 65 73 2c 20 61 20 77 72 69 74 65 20   cases, a write 
36b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 6c 79  transaction only
36c0: 20 74 61 6b 65 73 20 6d 69 6c 6c 69 73 65 63 6f   takes milliseco
36d0: 6e 64 73 20 61 6e 64 0a 73 6f 20 6d 75 6c 74 69  nds and.so multi
36e0: 70 6c 65 20 77 72 69 74 65 72 73 20 63 61 6e 20  ple writers can 
36f0: 73 69 6d 70 6c 79 20 74 61 6b 65 20 74 75 72 6e  simply take turn
3700: 73 2e 20 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  s.  SQLite will 
3710: 68 61 6e 64 6c 65 0a 6d 6f 72 65 20 77 72 69 74  handle.more writ
3720: 65 20 63 6f 6e 63 75 72 72 65 6e 63 79 20 74 68  e concurrency th
3730: 61 74 20 6d 61 6e 79 20 70 65 6f 70 6c 65 20 73  at many people s
3740: 75 73 70 65 63 74 2e 20 20 4e 65 76 65 72 74 68  uspect.  Neverth
3750: 65 6c 65 73 73 2c 0a 63 6c 69 65 6e 74 2f 73 65  eless,.client/se
3760: 72 76 65 72 20 64 61 74 61 62 61 73 65 20 73 79  rver database sy
3770: 73 74 65 6d 73 2c 20 62 65 63 61 75 73 65 20 74  stems, because t
3780: 68 65 79 20 68 61 76 65 20 61 20 6c 6f 6e 67 2d  hey have a long-
3790: 72 75 6e 6e 69 6e 67 0a 73 65 72 76 65 72 20 70  running.server p
37a0: 72 6f 63 65 73 73 20 61 74 20 68 61 6e 64 20 74  rocess at hand t
37b0: 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 61 63 63  o coordinate acc
37c0: 65 73 73 2c 20 63 61 6e 20 75 73 75 61 6c 6c 79  ess, can usually
37d0: 20 68 61 6e 64 6c 65 20 0a 66 61 72 20 6d 6f 72   handle .far mor
37e0: 65 20 77 72 69 74 65 20 63 6f 6e 63 75 72 72 65  e write concurre
37f0: 6e 63 79 20 74 68 61 6e 20 53 51 4c 69 74 65 20  ncy than SQLite 
3800: 65 76 65 72 20 77 69 6c 6c 2e 0a 3c 2f 6c 69 3e  ever will..</li>
3810: 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 42 69 67 20  ..<li><p><b>Big 
3820: 64 61 74 61 3f 20 26 72 61 72 72 3b 20 63 68 6f  data? &rarr; cho
3830: 6f 73 65 20 63 6c 69 65 6e 74 2f 73 65 72 76 65  ose client/serve
3840: 72 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  r</b></p>..<p>If
3850: 20 79 6f 75 72 20 64 61 74 61 20 77 69 6c 6c 20   your data will 
3860: 67 72 6f 77 20 74 6f 20 61 20 73 69 7a 65 20 74  grow to a size t
3870: 68 61 74 20 79 6f 75 20 61 72 65 20 75 6e 63 6f  hat you are unco
3880: 6d 66 6f 72 74 61 62 6c 65 0a 6f 72 20 75 6e 61  mfortable.or una
3890: 62 6c 65 20 74 6f 20 66 69 74 20 69 6e 74 6f 20  ble to fit into 
38a0: 61 20 73 69 6e 67 6c 65 20 64 69 73 6b 20 66 69  a single disk fi
38b0: 6c 65 2c 20 74 68 65 6e 20 79 6f 75 20 73 68 6f  le, then you sho
38c0: 75 6c 64 20 73 65 6c 65 63 74 0a 61 20 73 6f 6c  uld select.a sol
38d0: 75 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ution other than
38e0: 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69 74 65   SQLite.  SQLite
38f0: 20 73 75 70 70 6f 72 74 73 20 64 61 74 61 62 61   supports databa
3900: 73 65 73 20 75 70 20 74 6f 0a 31 34 30 20 74 65  ses up to.140 te
3910: 72 61 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2c  rabytes in size,
3920: 20 61 73 73 75 6d 69 6e 67 20 79 6f 75 20 63 61   assuming you ca
3930: 6e 20 66 69 6e 64 20 61 20 64 69 73 6b 20 64 72  n find a disk dr
3940: 69 76 65 20 61 6e 64 20 66 69 6c 65 73 79 73 74  ive and filesyst
3950: 65 6d 0a 74 68 61 74 20 77 69 6c 6c 20 73 75 70  em.that will sup
3960: 70 6f 72 74 20 31 34 30 2d 74 65 72 61 62 79 74  port 140-terabyt
3970: 65 20 66 69 6c 65 73 2e 20 20 45 76 65 6e 20 73  e files.  Even s
3980: 6f 2c 20 77 68 65 6e 20 74 68 65 20 73 69 7a 65  o, when the size
3990: 20 6f 66 20 74 68 65 0a 63 6f 6e 74 65 6e 74 20   of the.content 
39a0: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 69 74 20 6d 69  looks like it mi
39b0: 67 68 74 20 63 72 65 65 70 20 69 6e 74 6f 20 74  ght creep into t
39c0: 68 65 20 74 65 72 61 62 79 74 65 20 72 61 6e 67  he terabyte rang
39d0: 65 2c 20 69 74 20 77 6f 75 6c 64 0a 62 65 20 67  e, it would.be g
39e0: 6f 6f 64 20 74 6f 20 63 6f 6e 73 69 64 65 72 20  ood to consider 
39f0: 61 20 63 65 6e 74 72 61 6c 69 7a 65 64 20 63 6c  a centralized cl
3a00: 69 65 6e 74 2f 73 65 72 76 65 72 20 64 61 74 61  ient/server data
3a10: 62 61 73 65 2e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69  base..</li>..<li
3a20: 3e 3c 70 3e 3c 62 3e 4f 74 68 65 72 77 69 73 65  ><p><b>Otherwise
3a30: 20 26 72 61 72 72 3b 20 63 68 6f 6f 73 65 20 53   &rarr; choose S
3a40: 51 4c 69 74 65 21 3c 2f 62 3e 3c 2f 70 3e 0a 0a  QLite!</b></p>..
3a50: 3c 70 3e 46 6f 72 20 64 65 76 69 63 65 2d 6c 6f  <p>For device-lo
3a60: 63 61 6c 20 73 74 6f 72 61 67 65 20 77 69 74 68  cal storage with
3a70: 20 6c 6f 77 20 77 72 69 74 65 72 20 63 6f 6e 63   low writer conc
3a80: 75 72 72 65 6e 63 79 20 61 6e 64 20 6c 65 73 73  urrency and less
3a90: 20 74 68 61 6e 20 61 0a 74 65 72 61 62 79 74 65   than a.terabyte
3aa0: 20 6f 66 20 63 6f 6e 74 65 6e 74 2c 20 53 51 4c   of content, SQL
3ab0: 69 74 65 20 69 73 20 61 6c 6d 6f 73 74 20 61 6c  ite is almost al
3ac0: 77 61 79 73 20 61 20 62 65 74 74 65 72 20 73 6f  ways a better so
3ad0: 6c 75 74 69 6f 6e 2e 20 20 53 51 4c 69 74 65 0a  lution.  SQLite.
3ae0: 69 73 20 66 61 73 74 20 61 6e 64 20 72 65 6c 69  is fast and reli
3af0: 61 62 6c 65 20 61 6e 64 20 69 74 20 72 65 71 75  able and it requ
3b00: 69 72 65 73 20 6e 6f 20 63 6f 6e 66 69 67 75 72  ires no configur
3b10: 61 74 69 6f 6e 20 6f 72 20 6d 61 69 6e 74 65 6e  ation or mainten
3b20: 61 6e 63 65 2e 0a 49 74 20 6b 65 65 70 73 20 74  ance..It keeps t
3b30: 68 69 6e 67 20 73 69 6d 70 6c 65 2e 20 20 53 51  hing simple.  SQ
3b40: 4c 69 74 65 20 22 6a 75 73 74 20 77 6f 72 6b 73  Lite "just works
3b50: 22 2e 0a 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a     "..</li>.</ol>.