Documentation Source Text

Hex Artifact Content
Login

Artifact 7dc74380e5a3cac895472c2f84534d2c2d9a04376e16acf86a50238bf5dd7017:


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 3c 74 63 6c 3e  te</title>.<tcl>
0030: 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 41 70 70  hd_keywords {App
0040: 72 6f 70 72 69 61 74 65 20 55 73 65 73 20 46 6f  ropriate Uses Fo
0050: 72 20 53 51 4c 69 74 65 7d 3c 2f 74 63 6c 3e 0a  r SQLite}</tcl>.
0060: 0a 3c 68 31 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<h1 align="cent
0070: 65 72 22 3e 41 70 70 72 6f 70 72 69 61 74 65 20  er">Appropriate 
0080: 55 73 65 73 20 46 6f 72 20 53 51 4c 69 74 65 3c  Uses For SQLite<
0090: 2f 68 31 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  /h1>..<p>.SQLite
00a0: 20 69 73 20 6e 6f 74 20 64 69 72 65 63 74 6c 79   is not directly
00b0: 20 63 6f 6d 70 61 72 61 62 6c 65 20 74 6f 20 63   comparable to c
00c0: 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 53 51 4c  lient/server SQL
00d0: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
00e0: 73 20 73 75 63 68 0a 61 73 20 4d 79 53 51 4c 2c  s such.as MySQL,
00f0: 20 4f 72 61 63 6c 65 2c 20 50 6f 73 74 67 72 65   Oracle, Postgre
0100: 53 51 4c 2c 20 6f 72 20 53 51 4c 20 53 65 72 76  SQL, or SQL Serv
0110: 65 72 20 73 69 6e 63 65 20 53 51 4c 69 74 65 20  er since SQLite 
0120: 69 73 20 74 72 79 69 6e 67 20 74 6f 0a 73 6f 6c  is trying to.sol
0130: 76 65 20 61 20 64 69 66 66 65 72 65 6e 74 20 70  ve a different p
0140: 72 6f 62 6c 65 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  roblem..</p>..<p
0150: 3e 0a 43 6c 69 65 6e 74 2f 73 65 72 76 65 72 20  >.Client/server 
0160: 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
0170: 69 6e 65 73 20 73 74 72 69 76 65 20 74 6f 20 69  ines strive to i
0180: 6d 70 6c 65 6d 65 6e 74 20 61 20 73 68 61 72 65  mplement a share
0190: 64 20 72 65 70 6f 73 69 74 6f 72 79 0a 6f 66 20  d repository.of 
01a0: 65 6e 74 65 72 70 72 69 73 65 20 64 61 74 61 2e  enterprise data.
01b0: 20 20 54 68 65 79 20 65 6d 70 68 61 73 69 7a 65    They emphasize
01c0: 20 73 63 61 6c 61 62 69 6c 69 74 79 2c 20 63 6f   scalability, co
01d0: 6e 63 75 72 72 65 6e 63 79 2c 20 63 65 6e 74 72  ncurrency, centr
01e0: 61 6c 69 7a 61 74 69 6f 6e 2c 0a 61 6e 64 20 63  alization,.and c
01f0: 6f 6e 74 72 6f 6c 2e 0a 53 51 4c 69 74 65 20 73  ontrol..SQLite s
0200: 74 72 69 76 65 73 20 74 6f 20 70 72 6f 76 69 64  trives to provid
0210: 65 20 6c 6f 63 61 6c 20 64 61 74 61 20 73 74 6f  e local data sto
0220: 72 61 67 65 20 66 6f 72 0a 69 6e 64 69 76 69 64  rage for.individ
0230: 75 61 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  ual applications
0240: 20 61 6e 64 20 64 65 76 69 63 65 73 2e 20 20 53   and devices.  S
0250: 51 4c 69 74 65 20 65 6d 70 68 61 73 69 7a 65 73  QLite emphasizes
0260: 20 65 63 6f 6e 6f 6d 79 2c 0a 65 66 66 69 63 69   economy,.effici
0270: 65 6e 63 79 2c 20 72 65 6c 69 61 62 69 6c 69 74  ency, reliabilit
0280: 79 2c 20 69 6e 64 65 70 65 6e 64 65 6e 63 65 2c  y, independence,
0290: 20 61 6e 64 20 73 69 6d 70 6c 69 63 69 74 79 2e   and simplicity.
02a0: 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 0a 53 51 4c 69  .</p>...<p>.SQLi
02b0: 74 65 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70  te does not comp
02c0: 65 74 65 20 77 69 74 68 20 63 6c 69 65 6e 74 2f  ete with client/
02d0: 73 65 72 76 65 72 20 64 61 74 61 62 61 73 65 73  server databases
02e0: 2e 0a 53 51 4c 69 74 65 20 63 6f 6d 70 65 74 65  ..SQLite compete
02f0: 73 20 77 69 74 68 20 5b 68 74 74 70 3a 2f 2f 6d  s with [http://m
0300: 61 6e 2e 68 65 2e 6e 65 74 2f 6d 61 6e 33 2f 66  an.he.net/man3/f
0310: 6f 70 65 6e 20 7c 20 66 6f 70 65 6e 28 29 5d 2e  open | fopen()].
0320: 0a 3c 2f 70 3e 0a 0a 3c 68 32 3e 53 69 74 75 61  .</p>..<h2>Situa
0330: 74 69 6f 6e 73 20 57 68 65 72 65 20 53 51 4c 69  tions Where SQLi
0340: 74 65 20 57 6f 72 6b 73 20 57 65 6c 6c 3c 2f 68  te Works Well</h
0350: 32 3e 0a 0a 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 68  2>..<ul>..<tcl>h
0360: 64 5f 66 72 61 67 6d 65 6e 74 20 61 70 70 66 69  d_fragment appfi
0370: 6c 65 66 6f 72 6d 61 74 3c 2f 74 63 6c 3e 0a 3c  leformat</tcl>.<
0380: 6c 69 3e 3c 62 3e 45 6d 62 65 64 64 65 64 20 64  li><b>Embedded d
0390: 65 76 69 63 65 73 20 61 6e 64 20 74 68 65 20 69  evices and the i
03a0: 6e 74 65 72 6e 65 74 20 6f 66 20 74 68 69 6e 67  nternet of thing
03b0: 73 3c 2f 62 3e 0a 0a 3c 70 3e 42 65 63 61 75 73  s</b>..<p>Becaus
03c0: 65 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61  e an SQLite data
03d0: 62 61 73 65 20 72 65 71 75 69 72 65 73 20 6e 6f  base requires no
03e0: 20 61 64 6d 69 6e 69 73 74 72 61 74 69 6f 6e 2c   administration,
03f0: 0a 69 74 20 77 6f 72 6b 73 20 77 65 6c 6c 20 69  .it works well i
0400: 6e 20 64 65 76 69 63 65 73 20 74 68 61 74 20 6d  n devices that m
0410: 75 73 74 20 6f 70 65 72 61 74 65 20 77 69 74 68  ust operate with
0420: 6f 75 74 20 65 78 70 65 72 74 20 68 75 6d 61 6e  out expert human
0430: 20 73 75 70 70 6f 72 74 2e 0a 53 51 4c 69 74 65   support..SQLite
0440: 20 69 73 20 61 20 67 6f 6f 64 20 66 69 74 20 66   is a good fit f
0450: 6f 72 20 75 73 65 20 69 6e 20 0a 63 65 6c 6c 70  or use in .cellp
0460: 68 6f 6e 65 73 2c 20 73 65 74 2d 74 6f 70 20 62  hones, set-top b
0470: 6f 78 65 73 2c 20 74 65 6c 65 76 69 73 69 6f 6e  oxes, television
0480: 73 2c 20 67 61 6d 65 20 63 6f 6e 73 6f 6c 65 73  s, game consoles
0490: 2c 0a 63 61 6d 65 72 61 73 2c 20 77 61 74 63 68  ,.cameras, watch
04a0: 65 73 2c 20 6b 69 74 63 68 65 6e 20 61 70 70 6c  es, kitchen appl
04b0: 69 61 6e 63 65 73 2c 20 74 68 65 72 6d 6f 73 74  iances, thermost
04c0: 61 74 73 2c 20 61 75 74 6f 6d 6f 62 69 6c 65 73  ats, automobiles
04d0: 2c 20 0a 6d 61 63 68 69 6e 65 20 74 6f 6f 6c 73  , .machine tools
04e0: 2c 20 61 69 72 70 6c 61 6e 65 73 2c 20 72 65 6d  , airplanes, rem
04f0: 6f 74 65 20 73 65 6e 73 6f 72 73 2c 20 64 72 6f  ote sensors, dro
0500: 6e 65 73 2c 20 6d 65 64 69 63 61 6c 20 64 65 76  nes, medical dev
0510: 69 63 65 73 2c 0a 61 6e 64 20 72 6f 62 6f 74 73  ices,.and robots
0520: 3a 20 20 74 68 65 20 22 69 6e 74 65 72 6e 65 74  :  the "internet
0530: 20 6f 66 20 74 68 69 6e 67 73 22 2e 0a 3c 2f 70   of things"..</p
0540: 3e 0a 0a 3c 70 3e 43 6c 69 65 6e 74 2f 73 65 72  >..<p>Client/ser
0550: 76 65 72 20 64 61 74 61 62 61 73 65 20 65 6e 67  ver database eng
0560: 69 6e 65 73 20 61 72 65 20 64 65 73 69 67 6e 65  ines are designe
0570: 64 20 74 6f 20 6c 69 76 65 20 69 6e 73 69 64 65  d to live inside
0580: 20 61 0a 6c 6f 76 69 6e 67 6c 79 2d 61 74 74 65   a.lovingly-atte
0590: 6e 64 65 64 20 64 61 74 61 63 65 6e 74 65 72 20  nded datacenter 
05a0: 61 74 20 74 68 65 20 63 6f 72 65 20 6f 66 20 74  at the core of t
05b0: 68 65 20 6e 65 74 77 6f 72 6b 2e 0a 53 51 4c 69  he network..SQLi
05c0: 74 65 20 77 6f 72 6b 73 20 74 68 65 72 65 20 74  te works there t
05d0: 6f 6f 2c 20 62 75 74 20 53 51 4c 69 74 65 20 61  oo, but SQLite a
05e0: 6c 73 6f 20 74 68 72 69 76 65 73 20 61 74 20 74  lso thrives at t
05f0: 68 65 20 65 64 67 65 20 6f 66 20 74 68 65 20 6e  he edge of the n
0600: 65 74 77 6f 72 6b 2c 0a 66 65 6e 64 69 6e 67 20  etwork,.fending 
0610: 66 6f 72 20 69 74 73 65 6c 66 20 77 68 69 6c 65  for itself while
0620: 20 70 72 6f 76 69 64 69 6e 67 20 66 61 73 74 20   providing fast 
0630: 61 6e 64 0a 72 65 6c 69 61 62 6c 65 20 64 61 74  and.reliable dat
0640: 61 20 73 65 72 76 69 63 65 73 20 74 6f 20 61 70  a services to ap
0650: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20  plications that 
0660: 77 6f 75 6c 64 20 6f 74 68 65 72 77 69 73 65 0a  would otherwise.
0670: 68 61 76 65 20 64 6f 64 67 79 20 63 6f 6e 6e 65  have dodgy conne
0680: 63 74 69 76 69 74 79 2e 0a 3c 2f 6c 69 3e 0a 0a  ctivity..</li>..
0690: 3c 6c 69 3e 3c 70 3e 3c 62 3e 41 70 70 6c 69 63  <li><p><b>Applic
06a0: 61 74 69 6f 6e 20 66 69 6c 65 20 66 6f 72 6d 61  ation file forma
06b0: 74 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  t</b></p>..<p>.S
06c0: 51 4c 69 74 65 20 69 73 20 6f 66 74 65 6e 20 75  QLite is often u
06d0: 73 65 64 20 61 73 20 74 68 65 20 6f 6e 2d 64 69  sed as the on-di
06e0: 73 6b 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 66  sk file format.f
06f0: 6f 72 20 64 65 73 6b 74 6f 70 20 61 70 70 6c 69  or desktop appli
0700: 63 61 74 69 6f 6e 73 20 73 75 63 68 20 61 73 20  cations such as 
0710: 76 65 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20  version control 
0720: 73 79 73 74 65 6d 73 2c 0a 66 69 6e 61 6e 63 69  systems,.financi
0730: 61 6c 20 61 6e 61 6c 79 73 69 73 20 74 6f 6f 6c  al analysis tool
0740: 73 2c 20 6d 65 64 69 61 20 63 61 74 61 6c 6f 67  s, media catalog
0750: 69 6e 67 20 61 6e 64 20 65 64 69 74 69 6e 67 20  ing and editing 
0760: 73 75 69 74 65 73 2c 20 43 41 44 0a 70 61 63 6b  suites, CAD.pack
0770: 61 67 65 73 2c 20 72 65 63 6f 72 64 20 6b 65 65  ages, record kee
0780: 70 69 6e 67 20 70 72 6f 67 72 61 6d 73 2c 20 61  ping programs, a
0790: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 54 68  nd so forth.  Th
07a0: 65 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a 46 69  e traditional.Fi
07b0: 6c 65 2f 4f 70 65 6e 20 6f 70 65 72 61 74 69 6f  le/Open operatio
07c0: 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f  n calls sqlite3_
07d0: 6f 70 65 6e 28 29 20 74 6f 20 61 74 74 61 63 68  open() to attach
07e0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
07f0: 0a 66 69 6c 65 2e 20 20 55 70 64 61 74 65 73 20  .file.  Updates 
0800: 68 61 70 70 65 6e 20 61 75 74 6f 6d 61 74 69 63  happen automatic
0810: 61 6c 6c 79 20 61 73 20 61 70 70 6c 69 63 61 74  ally as applicat
0820: 69 6f 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 72  ion content is r
0830: 65 76 69 73 65 64 0a 73 6f 20 74 68 65 20 46 69  evised.so the Fi
0840: 6c 65 2f 53 61 76 65 20 6d 65 6e 75 20 6f 70 74  le/Save menu opt
0850: 69 6f 6e 20 62 65 63 6f 6d 65 73 20 73 75 70 65  ion becomes supe
0860: 72 66 6c 75 6f 75 73 2e 20 20 54 68 65 20 46 69  rfluous.  The Fi
0870: 6c 65 2f 53 61 76 65 5f 41 73 0a 6d 65 6e 75 20  le/Save_As.menu 
0880: 6f 70 74 69 6f 6e 20 63 61 6e 20 62 65 20 69 6d  option can be im
0890: 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
08a0: 74 68 65 20 5b 62 61 63 6b 75 70 20 41 50 49 5d  the [backup API]
08b0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65  ..</p>..<p>There
08c0: 20 61 72 65 20 6d 61 6e 79 20 62 65 6e 65 66 69   are many benefi
08d0: 74 73 20 74 6f 20 74 68 69 73 20 61 70 70 72 6f  ts to this appro
08e0: 61 63 68 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  ach, including i
08f0: 6d 70 72 6f 76 65 64 0a 70 65 72 66 6f 72 6d 61  mproved.performa
0900: 6e 63 65 2c 20 72 65 64 75 63 65 64 20 63 6f 73  nce, reduced cos
0910: 74 20 61 6e 64 20 63 6f 6d 70 6c 65 78 69 74 79  t and complexity
0920: 2c 20 61 6e 64 0a 69 6d 70 72 6f 76 65 64 20 72  , and.improved r
0930: 65 6c 69 61 62 69 6c 69 74 79 2e 20 20 53 65 65  eliability.  See
0940: 20 74 65 63 68 6e 69 63 61 6c 20 6e 6f 74 65 73   technical notes
0950: 0a 5b 66 69 6c 65 2d 66 6f 72 6d 61 74 20 62 65  .[file-format be
0960: 6e 65 66 69 74 73 7c 22 61 66 66 5f 73 68 6f 72  nefits|"aff_shor
0970: 74 2e 68 74 6d 6c 22 5d 20 61 6e 64 20 0a 5b 61  t.html"] and .[a
0980: 70 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d  pplication file-
0990: 66 6f 72 6d 61 74 7c 22 61 70 70 66 69 6c 65 66  format|"appfilef
09a0: 6f 72 6d 61 74 2e 68 74 6d 6c 22 5d 20 61 6e 64  ormat.html"] and
09b0: 0a 5b 66 61 73 74 65 72 20 74 68 61 6e 20 74 68  .[faster than th
09c0: 65 20 66 69 6c 65 73 79 73 74 65 6d 7c 22 66 61  e filesystem|"fa
09d0: 73 74 65 72 74 68 61 6e 66 73 2e 68 74 6d 6c 22  sterthanfs.html"
09e0: 5d 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  ] for more infor
09f0: 6d 61 74 69 6f 6e 2e 0a 54 68 69 73 20 75 73 65  mation..This use
0a00: 20 63 61 73 65 20 69 73 20 63 6c 6f 73 65 6c 79   case is closely
0a10: 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 0a   related to the.
0a20: 3c 61 20 68 72 65 66 3d 22 23 77 69 72 65 70 72  <a href="#wirepr
0a30: 6f 74 6f 22 3e 64 61 74 61 20 74 72 61 6e 73 66  oto">data transf
0a40: 65 72 20 66 6f 72 6d 61 74 3c 2f 61 3e 20 61 6e  er format</a> an
0a50: 64 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e 74  d.<a href="#cont
0a60: 61 69 6e 65 72 22 3e 64 61 74 61 20 63 6f 6e 74  ainer">data cont
0a70: 61 69 6e 65 72 3c 2f 61 3e 20 75 73 65 20 63 61  ainer</a> use ca
0a80: 73 65 73 20 62 65 6c 6f 77 2e 0a 3c 2f 6c 69 3e  ses below..</li>
0a90: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
0aa0: 6e 74 20 77 65 62 73 69 74 65 20 7b 75 73 69 6e  nt website {usin
0ab0: 67 20 53 51 4c 69 74 65 20 66 6f 72 20 77 65 62  g SQLite for web
0ac0: 73 69 74 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 6c 69  sites}</tcl>.<li
0ad0: 3e 3c 70 3e 3c 62 3e 57 65 62 73 69 74 65 73 3c  ><p><b>Websites<
0ae0: 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69  /b></p>..<p>SQLi
0af0: 74 65 20 77 6f 72 6b 73 20 67 72 65 61 74 20 61  te works great a
0b00: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  s the database e
0b10: 6e 67 69 6e 65 20 66 6f 72 20 6d 6f 73 74 20 6c  ngine for most l
0b20: 6f 77 20 74 6f 0a 6d 65 64 69 75 6d 20 74 72 61  ow to.medium tra
0b30: 66 66 69 63 20 77 65 62 73 69 74 65 73 20 28 77  ffic websites (w
0b40: 68 69 63 68 20 69 73 20 74 6f 20 73 61 79 2c 20  hich is to say, 
0b50: 6d 6f 73 74 20 77 65 62 73 69 74 65 73 29 2e 0a  most websites)..
0b60: 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 77 65  The amount of we
0b70: 62 20 74 72 61 66 66 69 63 20 74 68 61 74 20 53  b traffic that S
0b80: 51 4c 69 74 65 20 63 61 6e 20 68 61 6e 64 6c 65  QLite can handle
0b90: 20 64 65 70 65 6e 64 73 0a 6f 6e 20 68 6f 77 20   depends.on how 
0ba0: 68 65 61 76 69 6c 79 20 74 68 65 20 77 65 62 73  heavily the webs
0bb0: 69 74 65 20 75 73 65 73 20 69 74 73 20 64 61 74  ite uses its dat
0bc0: 61 62 61 73 65 2e 20 20 47 65 6e 65 72 61 6c 6c  abase.  Generall
0bd0: 79 0a 73 70 65 61 6b 69 6e 67 2c 20 61 6e 79 20  y.speaking, any 
0be0: 73 69 74 65 20 74 68 61 74 20 67 65 74 73 20 66  site that gets f
0bf0: 65 77 65 72 20 74 68 61 6e 20 31 30 30 4b 20 68  ewer than 100K h
0c00: 69 74 73 2f 64 61 79 20 73 68 6f 75 6c 64 20 77  its/day should w
0c10: 6f 72 6b 0a 66 69 6e 65 20 77 69 74 68 20 53 51  ork.fine with SQ
0c20: 4c 69 74 65 2e 0a 54 68 65 20 31 30 30 4b 20 68  Lite..The 100K h
0c30: 69 74 73 2f 64 61 79 20 66 69 67 75 72 65 20 69  its/day figure i
0c40: 73 20 61 20 63 6f 6e 73 65 72 76 61 74 69 76 65  s a conservative
0c50: 20 65 73 74 69 6d 61 74 65 2c 20 6e 6f 74 20 61   estimate, not a
0c60: 0a 68 61 72 64 20 75 70 70 65 72 20 62 6f 75 6e  .hard upper boun
0c70: 64 2e 0a 53 51 4c 69 74 65 20 68 61 73 20 62 65  d..SQLite has be
0c80: 65 6e 20 64 65 6d 6f 6e 73 74 72 61 74 65 64 20  en demonstrated 
0c90: 74 6f 20 77 6f 72 6b 20 77 69 74 68 20 31 30 20  to work with 10 
0ca0: 74 69 6d 65 73 20 74 68 61 74 20 61 6d 6f 75 6e  times that amoun
0cb0: 74 0a 6f 66 20 74 72 61 66 66 69 63 2e 3c 2f 70  t.of traffic.</p
0cc0: 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 69 74 65  >..<p>The SQLite
0cd0: 20 77 65 62 73 69 74 65 20 28 5b 68 74 74 70 73   website ([https
0ce0: 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
0cf0: 67 2f 5d 29 20 75 73 65 73 20 53 51 4c 69 74 65  g/]) uses SQLite
0d00: 20 69 74 73 65 6c 66 2c 0a 6f 66 20 63 6f 75 72   itself,.of cour
0d10: 73 65 2c 20 61 6e 64 20 61 73 20 6f 66 20 74 68  se, and as of th
0d20: 69 73 20 77 72 69 74 69 6e 67 20 28 32 30 31 35  is writing (2015
0d30: 29 20 69 74 20 68 61 6e 64 6c 65 73 20 61 62 6f  ) it handles abo
0d40: 75 74 20 34 30 30 4b 20 74 6f 20 35 30 30 4b 0a  ut 400K to 500K.
0d50: 48 54 54 50 20 72 65 71 75 65 73 74 73 20 70 65  HTTP requests pe
0d60: 72 20 64 61 79 2c 20 61 62 6f 75 74 20 31 35 2d  r day, about 15-
0d70: 32 30 25 20 6f 66 20 77 68 69 63 68 20 61 72 65  20% of which are
0d80: 20 64 79 6e 61 6d 69 63 20 70 61 67 65 73 20 74   dynamic pages t
0d90: 6f 75 63 68 69 6e 67 0a 74 68 65 20 64 61 74 61  ouching.the data
0da0: 62 61 73 65 2e 20 20 44 79 6e 61 6d 69 63 20 63  base.  Dynamic c
0db0: 6f 6e 74 65 6e 74 20 75 73 65 73 20 5b 61 62 6f  ontent uses [abo
0dc0: 75 74 20 32 30 30 20 53 51 4c 20 73 74 61 74 65  ut 200 SQL state
0dd0: 6d 65 6e 74 73 20 70 65 72 20 77 65 62 70 61 67  ments per webpag
0de0: 65 5d 2e 0a 54 68 69 73 20 73 65 74 75 70 20 72  e]..This setup r
0df0: 75 6e 73 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20  uns on a single 
0e00: 56 4d 20 74 68 61 74 20 73 68 61 72 65 73 20 61  VM that shares a
0e10: 20 70 68 79 73 69 63 61 6c 20 73 65 72 76 65 72   physical server
0e20: 20 77 69 74 68 20 32 33 20 6f 74 68 65 72 73 0a   with 23 others.
0e30: 61 6e 64 20 79 65 74 20 73 74 69 6c 6c 20 6b 65  and yet still ke
0e40: 65 70 73 20 74 68 65 20 6c 6f 61 64 20 61 76 65  eps the load ave
0e50: 72 61 67 65 20 62 65 6c 6f 77 20 30 2e 31 20 6d  rage below 0.1 m
0e60: 6f 73 74 20 6f 66 20 74 68 65 20 74 69 6d 65 2e  ost of the time.
0e70: 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  .</li>..<li><p><
0e80: 62 3e 44 61 74 61 20 61 6e 61 6c 79 73 69 73 3c  b>Data analysis<
0e90: 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 50 65 6f  /b></p>..<p>.Peo
0ea0: 70 6c 65 20 77 68 6f 20 75 6e 64 65 72 73 74 61  ple who understa
0eb0: 6e 64 20 53 51 4c 20 63 61 6e 20 65 6d 70 6c 6f  nd SQL can emplo
0ec0: 79 20 74 68 65 20 0a 5b 63 6f 6d 6d 61 6e 64 2d  y the .[command-
0ed0: 6c 69 6e 65 20 73 68 65 6c 6c 7c 73 71 6c 69 74  line shell|sqlit
0ee0: 65 33 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  e3 command-line 
0ef0: 73 68 65 6c 6c 5d 20 28 6f 72 20 76 61 72 69 6f  shell] (or vario
0f00: 75 73 20 74 68 69 72 64 2d 70 61 72 74 79 0a 53  us third-party.S
0f10: 51 4c 69 74 65 20 61 63 63 65 73 73 20 70 72 6f  QLite access pro
0f20: 67 72 61 6d 73 29 20 74 6f 20 61 6e 61 6c 79 7a  grams) to analyz
0f30: 65 20 6c 61 72 67 65 0a 64 61 74 61 73 65 74 73  e large.datasets
0f40: 2e 20 52 61 77 20 64 61 74 61 20 63 61 6e 20 62  . Raw data can b
0f50: 65 20 69 6d 70 6f 72 74 65 64 20 66 72 6f 6d 20  e imported from 
0f60: 43 53 56 20 66 69 6c 65 73 2c 20 74 68 65 6e 20  CSV files, then 
0f70: 74 68 61 74 0a 64 61 74 61 20 63 61 6e 20 62 65  that.data can be
0f80: 20 73 6c 69 63 65 64 20 61 6e 64 20 64 69 63 65   sliced and dice
0f90: 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 20  d to generate a 
0fa0: 6d 79 72 69 61 64 20 6f 66 20 73 75 6d 6d 61 72  myriad of summar
0fb0: 79 0a 72 65 70 6f 72 74 73 2e 20 20 4d 6f 72 65  y.reports.  More
0fc0: 20 63 6f 6d 70 6c 65 78 20 61 6e 61 6c 79 73 69   complex analysi
0fd0: 73 20 63 61 6e 20 62 65 20 64 6f 6e 65 20 75 73  s can be done us
0fe0: 69 6e 67 20 73 69 6d 70 6c 65 20 73 63 72 69 70  ing simple scrip
0ff0: 74 73 20 77 72 69 74 74 65 6e 0a 69 6e 20 54 63  ts written.in Tc
1000: 6c 20 6f 72 20 50 79 74 68 6f 6e 20 28 62 6f 74  l or Python (bot
1010: 68 20 6f 66 20 77 68 69 63 68 20 63 6f 6d 65 20  h of which come 
1020: 77 69 74 68 20 53 51 4c 69 74 65 20 62 75 69 6c  with SQLite buil
1030: 74 2d 69 6e 29 20 6f 72 20 69 6e 20 52 20 6f 72  t-in) or in R or
1040: 0a 6f 74 68 65 72 20 6c 61 6e 67 75 61 67 65 73  .other languages
1050: 20 75 73 69 6e 67 20 72 65 61 64 69 6c 79 20 61   using readily a
1060: 76 61 69 6c 61 62 6c 65 20 61 64 61 70 74 6f 72  vailable adaptor
1070: 73 2e 0a 50 6f 73 73 69 62 6c 65 20 75 73 65 73  s..Possible uses
1080: 20 69 6e 63 6c 75 64 65 20 77 65 62 73 69 74 65   include website
1090: 20 6c 6f 67 20 61 6e 61 6c 79 73 69 73 2c 20 73   log analysis, s
10a0: 70 6f 72 74 73 0a 73 74 61 74 69 73 74 69 63 73  ports.statistics
10b0: 20 61 6e 61 6c 79 73 69 73 2c 20 63 6f 6d 70 69   analysis, compi
10c0: 6c 61 74 69 6f 6e 20 6f 66 20 70 72 6f 67 72 61  lation of progra
10d0: 6d 6d 69 6e 67 20 6d 65 74 72 69 63 73 2c 20 61  mming metrics, a
10e0: 6e 64 0a 61 6e 61 6c 79 73 69 73 20 6f 66 20 65  nd.analysis of e
10f0: 78 70 65 72 69 6d 65 6e 74 61 6c 20 72 65 73 75  xperimental resu
1100: 6c 74 73 2e 20 20 4d 61 6e 79 20 62 69 6f 69 6e  lts.  Many bioin
1110: 66 6f 72 6d 61 74 69 63 73 20 72 65 73 65 61 72  formatics resear
1120: 63 68 65 72 73 0a 75 73 65 20 53 51 4c 69 74 65  chers.use SQLite
1130: 20 69 6e 20 74 68 69 73 20 77 61 79 2e 0a 3c 2f   in this way..</
1140: 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 73 61 6d 65  p>..<p>.The same
1150: 20 74 68 69 6e 67 20 63 61 6e 20 62 65 20 64 6f   thing can be do
1160: 6e 65 20 77 69 74 68 20 61 6e 20 65 6e 74 65 72  ne with an enter
1170: 70 72 69 73 65 20 63 6c 69 65 6e 74 2f 73 65 72  prise client/ser
1180: 76 65 72 0a 64 61 74 61 62 61 73 65 2c 20 6f 66  ver.database, of
1190: 20 63 6f 75 72 73 65 2e 20 20 54 68 65 20 61 64   course.  The ad
11a0: 76 61 6e 74 61 67 65 20 6f 66 20 53 51 4c 69 74  vantage of SQLit
11b0: 65 20 69 73 0a 74 68 61 74 20 69 74 20 69 73 20  e is.that it is 
11c0: 65 61 73 69 65 72 20 74 6f 20 69 6e 73 74 61 6c  easier to instal
11d0: 6c 20 61 6e 64 20 75 73 65 20 61 6e 64 20 74 68  l and use and th
11e0: 65 20 72 65 73 75 6c 74 69 6e 67 20 64 61 74 61  e resulting data
11f0: 62 61 73 65 20 0a 69 73 20 61 20 73 69 6e 67 6c  base .is a singl
1200: 65 20 66 69 6c 65 20 74 68 61 74 20 63 61 6e 20  e file that can 
1210: 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20 61 20  be written to a 
1220: 55 53 42 20 6d 65 6d 6f 72 79 20 73 74 69 63 6b  USB memory stick
1230: 0a 6f 72 20 65 6d 61 69 6c 65 64 20 74 6f 20 61  .or emailed to a
1240: 20 63 6f 6c 6c 65 61 67 75 65 2e 0a 3c 2f 70 3e   colleague..</p>
1250: 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  .</li>..<li><p><
1260: 62 3e 43 61 63 68 65 20 66 6f 72 20 65 6e 74 65  b>Cache for ente
1270: 72 70 72 69 73 65 20 64 61 74 61 3c 2f 62 3e 3c  rprise data</b><
1280: 2f 70 3e 0a 0a 3c 70 3e 0a 4d 61 6e 79 20 61 70  /p>..<p>.Many ap
1290: 70 6c 69 63 61 74 69 6f 6e 73 20 75 73 65 20 53  plications use S
12a0: 51 4c 69 74 65 20 61 73 20 61 20 63 61 63 68 65  QLite as a cache
12b0: 20 6f 66 20 72 65 6c 65 76 61 6e 74 20 63 6f 6e   of relevant con
12c0: 74 65 6e 74 20 66 72 6f 6d 0a 61 6e 20 65 6e 74  tent from.an ent
12d0: 65 72 70 72 69 73 65 20 52 44 42 4d 53 2e 0a 54  erprise RDBMS..T
12e0: 68 69 73 20 72 65 64 75 63 65 73 20 6c 61 74 65  his reduces late
12f0: 6e 63 79 2c 20 73 69 6e 63 65 20 6d 6f 73 74 20  ncy, since most 
1300: 71 75 65 72 69 65 73 20 6e 6f 77 20 6f 63 63 75  queries now occu
1310: 72 20 61 67 61 69 6e 73 74 20 74 68 65 20 6c 6f  r against the lo
1320: 63 61 6c 0a 63 61 63 68 65 20 61 6e 64 20 61 76  cal.cache and av
1330: 6f 69 64 20 61 20 6e 65 74 77 6f 72 6b 20 72 6f  oid a network ro
1340: 75 6e 64 2d 74 72 69 70 2e 20 20 49 74 20 61 6c  und-trip.  It al
1350: 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 6c  so reduces the l
1360: 6f 61 64 20 0a 6f 6e 20 74 68 65 20 6e 65 74 77  oad .on the netw
1370: 6f 72 6b 20 61 6e 64 20 6f 6e 20 74 68 65 20 63  ork and on the c
1380: 65 6e 74 72 61 6c 20 64 61 74 61 62 61 73 65 20  entral database 
1390: 73 65 72 76 65 72 2e 20 20 41 6e 64 20 69 6e 20  server.  And in 
13a0: 6d 61 6e 79 20 63 61 73 65 73 2c 20 0a 69 74 20  many cases, .it 
13b0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 63  means that the c
13c0: 6c 69 65 6e 74 2d 73 69 64 65 20 61 70 70 6c 69  lient-side appli
13d0: 63 61 74 69 6f 6e 20 63 61 6e 20 63 6f 6e 74 69  cation can conti
13e0: 6e 75 65 20 6f 70 65 72 61 74 69 6e 67 20 64 75  nue operating du
13f0: 72 69 6e 67 0a 6e 65 74 77 6f 72 6b 20 6f 75 74  ring.network out
1400: 61 67 65 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e  ages..</p>.</li>
1410: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
1420: 6e 74 20 73 65 72 76 65 72 73 69 64 65 64 62 20  nt serversidedb 
1430: 7b 73 65 72 76 65 72 2d 73 69 64 65 20 64 61 74  {server-side dat
1440: 61 62 61 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 6c 69  abase}</tcl>.<li
1450: 3e 3c 70 3e 3c 62 3e 53 65 72 76 65 72 2d 73 69  ><p><b>Server-si
1460: 64 65 20 64 61 74 61 62 61 73 65 3c 2f 62 3e 3c  de database</b><
1470: 2f 70 3e 0a 0a 3c 70 3e 0a 53 79 73 74 65 6d 73  /p>..<p>.Systems
1480: 20 64 65 73 69 67 6e 65 72 73 0a 72 65 70 6f 72   designers.repor
1490: 74 20 73 75 63 63 65 73 73 20 75 73 69 6e 67 20  t success using 
14a0: 53 51 4c 69 74 65 20 61 73 20 61 20 64 61 74 61  SQLite as a data
14b0: 20 73 74 6f 72 65 20 6f 6e 20 73 65 72 76 65 72   store on server
14c0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 72 75   applications.ru
14d0: 6e 6e 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74  nning in the dat
14e0: 61 63 65 6e 74 65 72 2c 20 6f 72 20 69 6e 20 6f  acenter, or in o
14f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 75 73 69 6e  ther words, usin
1500: 67 20 53 51 4c 69 74 65 20 61 73 20 74 68 65 20  g SQLite as the 
1510: 75 6e 64 65 72 6c 79 69 6e 67 0a 73 74 6f 72 61  underlying.stora
1520: 67 65 20 65 6e 67 69 6e 65 20 66 6f 72 20 61 6e  ge engine for an
1530: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73 70 65   application-spe
1540: 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 73  cific database s
1550: 65 72 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57  erver.</p>..<p>W
1560: 69 74 68 20 74 68 69 73 20 70 61 74 74 65 72 6e  ith this pattern
1570: 2c 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 73 79  , the overall sy
1580: 73 74 65 6d 20 69 73 20 73 74 69 6c 6c 20 63 6c  stem is still cl
1590: 69 65 6e 74 2f 73 65 72 76 65 72 3a 0a 63 6c 69  ient/server:.cli
15a0: 65 6e 74 73 20 73 65 6e 64 20 72 65 71 75 65 73  ents send reques
15b0: 74 73 20 74 6f 20 74 68 65 20 73 65 72 76 65 72  ts to the server
15c0: 20 61 6e 64 20 67 65 74 20 62 61 63 6b 20 72 65   and get back re
15d0: 70 6c 69 65 73 20 6f 76 65 72 20 74 68 65 20 6e  plies over the n
15e0: 65 74 77 6f 72 6b 2e 0a 42 75 74 20 69 6e 73 74  etwork..But inst
15f0: 65 61 64 20 6f 66 20 73 65 6e 64 69 6e 67 20 67  ead of sending g
1600: 65 6e 65 72 69 63 20 53 51 4c 20 61 6e 64 20 67  eneric SQL and g
1610: 65 74 74 69 6e 67 20 62 61 63 6b 20 72 61 77 20  etting back raw 
1620: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 2c 20 0a  table content, .
1630: 74 68 65 20 63 6c 69 65 6e 74 20 72 65 71 75 65  the client reque
1640: 73 74 73 20 61 6e 64 20 73 65 72 76 65 72 20 72  sts and server r
1650: 65 73 70 6f 6e 73 65 73 20 61 72 65 20 68 69 67  esponses are hig
1660: 68 2d 6c 65 76 65 6c 20 61 6e 64 20 0a 61 70 70  h-level and .app
1670: 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69  lication-specifi
1680: 63 2e 0a 54 68 65 20 73 65 72 76 65 72 20 74 72  c..The server tr
1690: 61 6e 73 6c 61 74 65 73 20 72 65 71 75 65 73 74  anslates request
16a0: 73 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c 65 20  s into multiple 
16b0: 53 51 4c 20 71 75 65 72 69 65 73 2c 20 67 61 74  SQL queries, gat
16c0: 68 65 72 73 20 74 68 65 0a 72 65 73 75 6c 74 73  hers the.results
16d0: 2c 20 64 6f 65 73 20 70 6f 73 74 2d 70 72 6f 63  , does post-proc
16e0: 65 73 73 69 6e 67 2c 20 66 69 6c 74 65 72 69 6e  essing, filterin
16f0: 67 2c 20 61 6e 64 20 61 6e 61 6c 79 73 69 73 2c  g, and analysis,
1700: 20 74 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 73   then constructs
1710: 0a 61 20 68 69 67 68 2d 6c 65 76 65 6c 20 72 65  .a high-level re
1720: 70 6c 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6f  ply containing o
1730: 6e 6c 79 20 74 68 65 20 65 73 73 65 6e 74 69 61  nly the essentia
1740: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  l information.</
1750: 70 3e 0a 0a 3c 70 3e 44 65 76 65 6c 6f 70 65 72  p>..<p>Developer
1760: 73 20 72 65 70 6f 72 74 20 74 68 61 74 20 53 51  s report that SQ
1770: 4c 69 74 65 20 69 73 20 6f 66 74 65 6e 20 66 61  Lite is often fa
1780: 73 74 65 72 20 74 68 61 6e 20 61 20 63 6c 69 65  ster than a clie
1790: 6e 74 2f 73 65 72 76 65 72 0a 53 51 4c 20 64 61  nt/server.SQL da
17a0: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 69 6e  tabase engine in
17b0: 20 74 68 69 73 20 73 63 65 6e 61 72 69 6f 2e 0a   this scenario..
17c0: 44 61 74 61 62 61 73 65 20 72 65 71 75 65 73 74  Database request
17d0: 73 20 61 72 65 20 73 65 72 69 61 6c 69 7a 65 64  s are serialized
17e0: 20 62 79 20 74 68 65 20 73 65 72 76 65 72 2c 20   by the server, 
17f0: 73 6f 20 63 6f 6e 63 75 72 72 65 6e 63 79 20 69  so concurrency i
1800: 73 20 6e 6f 74 0a 61 6e 20 69 73 73 75 65 2e 20  s not.an issue. 
1810: 20 43 6f 6e 63 75 72 72 65 6e 63 79 20 69 73 20   Concurrency is 
1820: 61 6c 73 6f 20 69 6d 70 72 6f 76 65 64 20 62 79  also improved by
1830: 20 22 64 61 74 61 62 61 73 65 20 73 68 61 72 64   "database shard
1840: 69 6e 67 22 3a 0a 75 73 69 6e 67 20 73 65 70 61  ing":.using sepa
1850: 72 61 74 65 20 64 61 74 61 62 61 73 65 20 66 69  rate database fi
1860: 6c 65 73 20 66 6f 72 20 64 69 66 66 65 72 65 6e  les for differen
1870: 74 20 73 75 62 64 6f 6d 61 69 6e 73 2e 20 20 46  t subdomains.  F
1880: 6f 72 0a 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or.example, the 
1890: 73 65 72 76 65 72 20 6d 69 67 68 74 20 68 61 76  server might hav
18a0: 65 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  e a separate SQL
18b0: 69 74 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  ite database for
18c0: 20 65 61 63 68 0a 75 73 65 72 2c 20 73 6f 20 74   each.user, so t
18d0: 68 61 74 20 74 68 65 20 73 65 72 76 65 72 20 63  hat the server c
18e0: 61 6e 20 68 61 6e 64 6c 65 20 68 75 6e 64 72 65  an handle hundre
18f0: 64 73 20 6f 72 20 74 68 6f 75 73 61 6e 64 73 20  ds or thousands 
1900: 6f 66 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 0a  of simultaneous.
1910: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 62 75 74  connections, but
1920: 20 65 61 63 68 20 53 51 4c 69 74 65 20 64 61 74   each SQLite dat
1930: 61 62 61 73 65 20 69 73 20 6f 6e 6c 79 20 75 73  abase is only us
1940: 65 64 20 62 79 20 6f 6e 65 20 63 6f 6e 6e 65 63  ed by one connec
1950: 74 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a  tion.</p>.</li>.
1960: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1970: 74 20 77 69 72 65 70 72 6f 74 6f 20 7b 64 61 74  t wireproto {dat
1980: 61 20 74 72 61 6e 73 66 65 72 20 66 6f 72 6d 61  a transfer forma
1990: 74 7d 3c 2f 74 63 6c 3e 0a 3c 6c 69 3e 3c 70 3e  t}</tcl>.<li><p>
19a0: 3c 62 3e 44 61 74 61 20 74 72 61 6e 73 66 65 72  <b>Data transfer
19b0: 20 66 6f 72 6d 61 74 3c 2f 62 3e 3c 70 3e 0a 0a   format</b><p>..
19c0: 3c 70 3e 42 65 63 61 75 73 65 20 61 6e 20 53 51  <p>Because an SQ
19d0: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
19e0: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 63   a single compac
19f0: 74 20 66 69 6c 65 20 69 6e 20 61 0a 5b 66 69 6c  t file in a.[fil
1a00: 65 20 66 6f 72 6d 61 74 7c 77 65 6c 6c 2d 64 65  e format|well-de
1a10: 66 69 6e 65 64 20 63 72 6f 73 73 2d 70 6c 61 74  fined cross-plat
1a20: 66 6f 72 6d 20 66 6f 72 6d 61 74 5d 2c 20 69 74  form format], it
1a30: 20 69 73 20 6f 66 74 65 6e 20 75 73 65 64 0a 61   is often used.a
1a40: 73 20 61 20 63 6f 6e 74 61 69 6e 65 72 20 66 6f  s a container fo
1a50: 72 20 74 72 61 6e 73 66 65 72 72 69 6e 67 20 63  r transferring c
1a60: 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 6f 6e 65 20  ontent from one 
1a70: 73 79 73 74 65 6d 20 74 6f 20 61 6e 6f 74 68 65  system to anothe
1a80: 72 2e 0a 54 68 65 20 73 65 6e 64 65 72 20 67 61  r..The sender ga
1a90: 74 68 65 72 73 20 63 6f 6e 74 65 6e 74 20 69 6e  thers content in
1aa0: 74 6f 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74  to an SQLite dat
1ab0: 61 62 61 73 65 20 66 69 6c 65 2c 20 74 72 61 6e  abase file, tran
1ac0: 73 66 65 72 73 0a 74 68 61 74 20 6f 6e 65 20 66  sfers.that one f
1ad0: 69 6c 65 20 74 6f 20 74 68 65 20 72 65 63 65 69  ile to the recei
1ae0: 76 65 72 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ver, then the re
1af0: 63 65 69 76 65 72 20 75 73 65 73 20 53 51 4c 20  ceiver uses SQL 
1b00: 74 6f 20 65 78 74 72 61 63 74 0a 74 68 65 20 63  to extract.the c
1b10: 6f 6e 74 65 6e 74 20 61 73 20 6e 65 65 64 65 64  ontent as needed
1b20: 2e 0a 0a 3c 70 3e 41 6e 20 53 51 4c 69 74 65 20  ...<p>An SQLite 
1b30: 64 61 74 61 62 61 73 65 20 66 61 63 69 6c 69 74  database facilit
1b40: 61 74 65 73 20 64 61 74 61 20 74 72 61 6e 73 66  ates data transf
1b50: 65 72 20 62 65 74 77 65 65 6e 20 73 79 73 74 65  er between syste
1b60: 6d 73 20 65 76 65 6e 0a 77 68 65 6e 20 74 68 65  ms even.when the
1b70: 20 65 6e 64 70 6f 69 6e 74 73 20 68 61 76 65 20   endpoints have 
1b80: 64 69 66 66 65 72 65 6e 74 20 77 6f 72 64 20 73  different word s
1b90: 69 7a 65 73 20 61 6e 64 2f 6f 72 20 62 79 74 65  izes and/or byte
1ba0: 20 6f 72 64 65 72 73 2e 0a 54 68 65 20 64 61 74   orders..The dat
1bb0: 61 20 63 61 6e 20 62 65 20 61 20 63 6f 6d 70 6c  a can be a compl
1bc0: 65 78 20 6d 69 78 20 6f 66 20 6c 61 72 67 65 20  ex mix of large 
1bd0: 62 69 6e 61 72 79 20 62 6c 6f 62 73 2c 20 74 65  binary blobs, te
1be0: 78 74 2c 20 61 6e 64 20 73 6d 61 6c 6c 0a 6e 75  xt, and small.nu
1bf0: 6d 65 72 69 63 20 6f 72 20 62 6f 6f 6c 65 61 6e  meric or boolean
1c00: 20 76 61 6c 75 65 73 2e 20 20 54 68 65 20 64 61   values.  The da
1c10: 74 61 20 66 6f 72 6d 61 74 20 63 61 6e 20 62 65  ta format can be
1c20: 20 65 61 73 69 6c 79 20 65 78 74 65 6e 64 65 64   easily extended
1c30: 0a 62 79 20 61 64 64 69 6e 67 20 6e 65 77 20 74  .by adding new t
1c40: 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20 63 6f 6c  ables and/or col
1c50: 75 6d 6e 73 2c 20 77 69 74 68 6f 75 74 20 62 72  umns, without br
1c60: 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 72 65  eaking legacy re
1c70: 63 65 69 76 65 72 73 2e 0a 54 68 65 20 53 51 4c  ceivers..The SQL
1c80: 20 71 75 65 72 79 20 6c 61 6e 67 75 61 67 65 20   query language 
1c90: 6d 65 61 6e 73 20 74 68 61 74 20 72 65 63 65 69  means that recei
1ca0: 76 65 72 73 20 61 72 65 20 6e 6f 74 20 72 65 71  vers are not req
1cb0: 75 69 72 65 64 20 74 6f 20 70 61 72 73 65 0a 74  uired to parse.t
1cc0: 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 66  he entire transf
1cd0: 65 72 20 61 6c 6c 20 61 74 20 6f 6e 63 65 2c 20  er all at once, 
1ce0: 62 75 74 20 63 61 6e 20 69 6e 73 74 65 61 64 20  but can instead 
1cf0: 71 75 65 72 79 20 74 68 65 0a 72 65 63 65 69 76  query the.receiv
1d00: 65 64 20 63 6f 6e 74 65 6e 74 20 61 73 20 6e 65  ed content as ne
1d10: 65 64 65 64 2e 20 20 54 68 65 20 64 61 74 61 20  eded.  The data 
1d20: 66 6f 72 6d 61 74 20 69 73 20 22 74 72 61 6e 73  format is "trans
1d30: 70 61 72 65 6e 74 22 20 69 6e 20 74 68 65 0a 73  parent" in the.s
1d40: 65 6e 73 65 20 74 68 61 74 20 69 74 20 69 73 20  ense that it is 
1d50: 65 61 73 69 6c 79 20 64 65 63 6f 64 65 64 20 66  easily decoded f
1d60: 6f 72 20 68 75 6d 61 6e 20 76 69 65 77 69 6e 67  or human viewing
1d70: 20 75 73 69 6e 67 20 0a 61 20 76 61 72 69 65 74   using .a variet
1d80: 79 20 6f 66 20 75 6e 69 76 65 72 73 61 6c 6c 79  y of universally
1d90: 20 61 76 61 69 6c 61 62 6c 65 2c 20 6f 70 65 6e   available, open
1da0: 2d 73 6f 75 72 63 65 20 74 6f 6f 6c 73 2c 20 66  -source tools, f
1db0: 72 6f 6d 20 6d 75 6c 74 69 70 6c 65 0a 76 65 6e  rom multiple.ven
1dc0: 64 6f 72 73 2e 0a 3c 2f 6c 69 3e 0a 0a 3c 74 63  dors..</li>..<tc
1dd0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f  l>hd_fragment co
1de0: 6e 74 61 69 6e 65 72 20 7b 64 61 74 61 20 63 6f  ntainer {data co
1df0: 6e 74 61 69 6e 65 72 7d 3c 2f 74 63 6c 3e 0a 3c  ntainer}</tcl>.<
1e00: 6c 69 3e 3c 70 3e 3c 62 3e 46 69 6c 65 20 61 72  li><p><b>File ar
1e10: 63 68 69 76 65 20 61 6e 64 2f 6f 72 20 64 61 74  chive and/or dat
1e20: 61 20 63 6f 6e 74 61 69 6e 65 72 3c 2f 62 3e 3c  a container</b><
1e30: 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 5b 53 51  /p>..<p>.The [SQ
1e40: 4c 69 74 65 20 41 72 63 68 69 76 65 5d 20 69 64  Lite Archive] id
1e50: 65 61 20 73 68 6f 77 73 20 68 6f 77 0a 53 51 4c  ea shows how.SQL
1e60: 69 74 65 20 63 61 6e 20 62 65 20 75 73 65 64 20  ite can be used 
1e70: 61 73 20 61 20 73 75 62 73 74 69 74 75 74 65 20  as a substitute 
1e80: 66 6f 72 20 5a 49 50 20 61 72 63 68 69 76 65 73  for ZIP archives
1e90: 20 6f 72 20 54 61 72 62 61 6c 6c 73 2e 0a 41 6e   or Tarballs..An
1ea0: 20 61 72 63 68 69 76 65 20 6f 66 20 66 69 6c 65   archive of file
1eb0: 73 20 73 74 6f 72 65 64 20 69 6e 20 53 51 4c 69  s stored in SQLi
1ec0: 74 65 20 69 73 20 6f 6e 6c 79 20 76 65 72 79 20  te is only very 
1ed0: 73 6c 69 67 68 74 6c 79 20 6c 61 72 67 65 72 2c  slightly larger,
1ee0: 20 61 6e 64 0a 69 6e 20 73 6f 6d 65 20 63 61 73   and.in some cas
1ef0: 65 73 20 61 63 74 75 61 6c 6c 79 20 73 6d 61 6c  es actually smal
1f00: 6c 65 72 2c 20 74 68 61 6e 20 74 68 65 20 65 71  ler, than the eq
1f10: 75 69 76 61 6c 65 6e 74 20 5a 49 50 20 61 72 63  uivalent ZIP arc
1f20: 68 69 76 65 2e 0a 41 6e 64 20 61 6e 20 53 51 4c  hive..And an SQL
1f30: 69 74 65 20 61 72 63 68 69 76 65 20 66 65 61 74  ite archive feat
1f40: 75 72 65 73 20 69 6e 63 72 65 6d 65 6e 74 61 6c  ures incremental
1f50: 20 61 6e 64 20 61 74 6f 6d 69 63 20 75 70 64 61   and atomic upda
1f60: 74 69 6e 67 0a 61 6e 64 20 74 68 65 20 61 62 69  ting.and the abi
1f70: 6c 69 74 79 20 74 6f 20 73 74 6f 72 65 20 6d 75  lity to store mu
1f80: 63 68 20 72 69 63 68 65 72 20 6d 65 74 61 64 61  ch richer metada
1f90: 74 61 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5b 68 74  ta..</p>..<p>[ht
1fa0: 74 70 73 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c  tps://www.fossil
1fb0: 2d 73 63 6d 2e 6f 72 67 2f 7c 46 6f 73 73 69 6c  -scm.org/|Fossil
1fc0: 5d 20 76 65 72 73 69 6f 6e 20 32 2e 35 20 61 6e  ] version 2.5 an
1fd0: 64 20 6c 61 74 65 72 20 6f 66 66 65 72 73 0a 5b  d later offers.[
1fe0: 53 51 4c 69 74 65 20 41 72 63 68 69 76 65 20 66  SQLite Archive f
1ff0: 69 6c 65 73 5d 20 61 73 20 61 20 64 6f 77 6e 6c  iles] as a downl
2000: 6f 61 64 20 66 6f 72 6d 61 74 2c 20 69 6e 20 61  oad format, in a
2010: 64 64 69 74 69 6f 6e 0a 74 6f 20 74 72 61 64 69  ddition.to tradi
2020: 74 69 6f 6e 61 6c 20 74 61 72 62 61 6c 6c 20 61  tional tarball a
2030: 6e 64 20 5a 49 50 20 61 72 63 68 69 76 65 2e 0a  nd ZIP archive..
2040: 54 68 65 20 5b 73 71 6c 69 74 65 33 2e 65 78 65  The [sqlite3.exe
2050: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68   command-line sh
2060: 65 6c 6c 5d 20 76 65 72 73 69 6f 6e 20 33 2e 32  ell] version 3.2
2070: 32 2e 30 20 61 6e 64 20 6c 61 74 65 72 20 77 69  2.0 and later wi
2080: 6c 6c 20 63 72 65 61 74 65 2c 0a 6c 69 73 74 2c  ll create,.list,
2090: 20 6f 72 20 75 6e 70 61 63 6b 20 61 6e 20 53 51   or unpack an SQ
20a0: 4c 20 61 72 63 68 69 76 69 6e 67 20 75 73 69 6e  L archiving usin
20b0: 67 20 74 68 65 20 0a 5b 2e 61 72 63 68 69 76 65  g the .[.archive
20c0: 20 63 6f 6d 6d 61 6e 64 5d 2e 3c 2f 70 3e 0a 0a   command].</p>..
20d0: 3c 70 3e 0a 53 51 4c 69 74 65 20 69 73 20 61 20  <p>.SQLite is a 
20e0: 67 6f 6f 64 20 73 6f 6c 75 74 69 6f 6e 20 66 6f  good solution fo
20f0: 72 20 61 6e 79 20 73 69 74 75 61 74 69 6f 6e 20  r any situation 
2100: 74 68 61 74 20 72 65 71 75 69 72 65 73 20 62 75  that requires bu
2110: 6e 64 6c 69 6e 67 0a 64 69 76 65 72 73 65 20 63  ndling.diverse c
2120: 6f 6e 74 65 6e 74 20 69 6e 74 6f 20 61 20 73 65  ontent into a se
2130: 6c 66 2d 63 6f 6e 74 61 69 6e 65 64 20 61 6e 64  lf-contained and
2140: 20 73 65 6c 66 2d 64 65 73 63 72 69 62 69 6e 67   self-describing
2150: 20 70 61 63 6b 61 67 65 20 0a 66 6f 72 20 73 68   package .for sh
2160: 69 70 6d 65 6e 74 20 61 63 72 6f 73 73 20 61 20  ipment across a 
2170: 6e 65 74 77 6f 72 6b 2e 0a 43 6f 6e 74 65 6e 74  network..Content
2180: 20 69 73 20 65 6e 63 6f 64 69 6e 67 20 69 6e 20   is encoding in 
2190: 61 20 0a 5b 66 69 6c 65 20 66 6f 72 6d 61 74 7c  a .[file format|
21a0: 77 65 6c 6c 2d 64 65 66 69 6e 65 64 2c 20 63 72  well-defined, cr
21b0: 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2c 20 61 6e  oss-platform, an
21c0: 64 20 73 74 61 62 6c 65 20 66 69 6c 65 20 66 6f  d stable file fo
21d0: 72 6d 61 74 5d 2e 0a 54 68 65 20 65 6e 63 6f 64  rmat]..The encod
21e0: 69 6e 67 20 69 73 20 65 66 66 69 63 69 65 6e 74  ing is efficient
21f0: 2c 20 61 6e 64 20 72 65 63 65 69 76 65 72 73 20  , and receivers 
2200: 63 61 6e 20 65 78 74 72 61 63 74 20 73 6d 61 6c  can extract smal
2210: 6c 20 73 75 62 73 65 74 73 0a 6f 66 20 74 68 65  l subsets.of the
2220: 20 63 6f 6e 74 65 6e 74 20 77 69 74 68 6f 75 74   content without
2230: 20 68 61 76 69 6e 67 20 74 6f 20 72 65 61 64 20   having to read 
2240: 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 65 6e  and parse the en
2250: 74 69 72 65 20 66 69 6c 65 2e 0a 3c 2f 70 3e 0a  tire file..</p>.
2260: 0a 3c 70 3e 53 51 4c 20 61 72 63 68 69 76 65 73  .<p>SQL archives
2270: 20 61 72 65 20 75 73 65 66 75 6c 20 61 73 20 74   are useful as t
2280: 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20  he distribution 
2290: 66 6f 72 6d 61 74 20 66 6f 72 20 73 6f 66 74 77  format for softw
22a0: 61 72 65 0a 6f 72 20 63 6f 6e 74 65 6e 74 20 75  are.or content u
22b0: 70 64 61 74 65 73 20 74 68 61 74 20 61 72 65 20  pdates that are 
22c0: 62 72 6f 61 64 63 61 73 74 20 74 6f 20 6d 61 6e  broadcast to man
22d0: 79 20 63 6c 69 65 6e 74 73 2e 20 20 56 61 72 69  y clients.  Vari
22e0: 61 74 69 6f 6e 73 0a 6f 6e 20 74 68 69 73 20 69  ations.on this i
22f0: 64 65 61 20 61 72 65 20 75 73 65 64 2c 20 66 6f  dea are used, fo
2300: 72 20 65 78 61 6d 70 6c 65 2c 20 74 6f 20 74 72  r example, to tr
2310: 61 6e 73 6d 69 74 20 54 56 20 70 72 6f 67 72 61  ansmit TV progra
2320: 6d 6d 69 6e 67 20 67 75 69 64 65 73 0a 74 6f 20  mming guides.to 
2330: 73 65 74 2d 74 6f 70 20 62 6f 78 65 73 20 61 6e  set-top boxes an
2340: 64 20 74 6f 20 73 65 6e 64 20 6f 76 65 72 2d 74  d to send over-t
2350: 68 65 2d 61 69 72 20 75 70 64 61 74 65 73 20 74  he-air updates t
2360: 6f 20 76 65 68 69 63 6c 65 20 6e 61 76 69 67 61  o vehicle naviga
2370: 74 69 6f 6e 0a 73 79 73 74 65 6d 73 2e 3c 2f 70  tion.systems.</p
2380: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  >.</li>..<li><p>
2390: 3c 62 3e 52 65 70 6c 61 63 65 6d 65 6e 74 20 66  <b>Replacement f
23a0: 6f 72 20 3c 69 3e 61 64 20 68 6f 63 3c 2f 69 3e  or <i>ad hoc</i>
23b0: 20 64 69 73 6b 20 66 69 6c 65 73 3c 2f 62 3e 3c   disk files</b><
23c0: 2f 70 3e 0a 0a 3c 70 3e 4d 61 6e 79 20 70 72 6f  /p>..<p>Many pro
23d0: 67 72 61 6d 73 20 75 73 65 20 0a 5b 68 74 74 70  grams use .[http
23e0: 3a 2f 2f 6d 61 6e 2e 68 65 2e 6e 65 74 2f 6d 61  ://man.he.net/ma
23f0: 6e 33 2f 66 6f 70 65 6e 20 7c 20 66 6f 70 65 6e  n3/fopen | fopen
2400: 28 29 5d 2c 0a 5b 68 74 74 70 3a 2f 2f 6d 61 6e  ()],.[http://man
2410: 2e 68 65 2e 6e 65 74 2f 6d 61 6e 33 2f 66 72 65  .he.net/man3/fre
2420: 61 64 20 7c 20 66 72 65 61 64 28 29 5d 2c 20 61  ad | fread()], a
2430: 6e 64 20 0a 5b 68 74 74 70 3a 2f 2f 6d 61 6e 2e  nd .[http://man.
2440: 68 65 2e 6e 65 74 2f 6d 61 6e 33 2f 66 77 72 69  he.net/man3/fwri
2450: 74 65 20 7c 20 66 77 72 69 74 65 28 29 5d 20 74  te | fwrite()] t
2460: 6f 20 63 72 65 61 74 65 20 61 6e 64 0a 6d 61 6e  o create and.man
2470: 61 67 65 20 66 69 6c 65 73 20 6f 66 20 64 61 74  age files of dat
2480: 61 20 69 6e 20 68 6f 6d 65 2d 67 72 6f 77 6e 20  a in home-grown 
2490: 66 6f 72 6d 61 74 73 2e 20 20 53 51 4c 69 74 65  formats.  SQLite
24a0: 20 77 6f 72 6b 73 20 0a 70 61 72 74 69 63 75 6c   works .particul
24b0: 61 72 6c 79 20 77 65 6c 6c 20 61 73 20 61 0a 72  arly well as a.r
24c0: 65 70 6c 61 63 65 6d 65 6e 74 20 66 6f 72 20 74  eplacement for t
24d0: 68 65 73 65 20 3c 69 3e 61 64 20 68 6f 63 3c 2f  hese <i>ad hoc</
24e0: 69 3e 20 64 61 74 61 20 66 69 6c 65 73 2e 0a 43  i> data files..C
24f0: 6f 6e 74 72 61 72 79 20 74 6f 20 69 6e 74 75 69  ontrary to intui
2500: 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 63 61 6e  tion, SQLite can
2510: 20 62 65 20 5b 66 61 73 74 65 72 20 74 68 61 6e   be [faster than
2520: 20 74 68 65 20 66 69 6c 65 73 79 73 74 65 6d 5d   the filesystem]
2530: 0a 66 6f 72 20 72 65 61 64 69 6e 67 20 61 6e 64  .for reading and
2540: 20 77 72 69 74 69 6e 67 20 63 6f 6e 74 65 6e 74   writing content
2550: 20 74 6f 20 64 69 73 6b 2e 0a 3c 2f 6c 69 3e 0a   to disk..</li>.
2560: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 6e 74 65 72  .<li><p><b>Inter
2570: 6e 61 6c 20 6f 72 20 74 65 6d 70 6f 72 61 72 79  nal or temporary
2580: 20 64 61 74 61 62 61 73 65 73 3c 2f 62 3e 3c 2f   databases</b></
2590: 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 20 70 72 6f 67  p>..<p>.For prog
25a0: 72 61 6d 73 20 74 68 61 74 20 68 61 76 65 20 61  rams that have a
25b0: 20 6c 6f 74 20 6f 66 20 64 61 74 61 20 74 68 61   lot of data tha
25c0: 74 20 6d 75 73 74 20 62 65 20 73 69 66 74 65 64  t must be sifted
25d0: 20 61 6e 64 20 73 6f 72 74 65 64 0a 69 6e 20 64   and sorted.in d
25e0: 69 76 65 72 73 65 20 77 61 79 73 2c 20 69 74 20  iverse ways, it 
25f0: 69 73 20 6f 66 74 65 6e 20 65 61 73 69 65 72 20  is often easier 
2600: 61 6e 64 20 71 75 69 63 6b 65 72 20 74 6f 20 6c  and quicker to l
2610: 6f 61 64 20 74 68 65 20 64 61 74 61 20 69 6e 74  oad the data int
2620: 6f 0a 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 53  o.an in-memory S
2630: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61  QLite database a
2640: 6e 64 20 75 73 65 20 71 75 65 72 69 65 73 20 77  nd use queries w
2650: 69 74 68 20 6a 6f 69 6e 73 20 61 6e 64 20 4f 52  ith joins and OR
2660: 44 45 52 20 42 59 0a 63 6c 61 75 73 65 73 20 74  DER BY.clauses t
2670: 6f 20 65 78 74 72 61 63 74 20 74 68 65 20 64 61  o extract the da
2680: 74 61 20 69 6e 20 74 68 65 20 66 6f 72 6d 20 61  ta in the form a
2690: 6e 64 20 6f 72 64 65 72 20 6e 65 65 64 65 64 20  nd order needed 
26a0: 72 61 74 68 65 72 20 74 68 61 6e 0a 74 6f 20 74  rather than.to t
26b0: 72 79 20 74 6f 20 63 6f 64 65 20 74 68 65 20 73  ry to code the s
26c0: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 6d  ame operations m
26d0: 61 6e 75 61 6c 6c 79 2e 0a 55 73 69 6e 67 20 61  anually..Using a
26e0: 6e 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 69  n SQL database i
26f0: 6e 74 65 72 6e 61 6c 6c 79 20 69 6e 20 74 68 69  nternally in thi
2700: 73 20 77 61 79 20 61 6c 73 6f 20 67 69 76 65 73  s way also gives
2710: 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 67 72 65   the program.gre
2720: 61 74 65 72 20 66 6c 65 78 69 62 69 6c 69 74 79  ater flexibility
2730: 20 73 69 6e 63 65 20 6e 65 77 20 63 6f 6c 75 6d   since new colum
2740: 6e 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 63  ns and indices c
2750: 61 6e 20 62 65 20 61 64 64 65 64 20 77 69 74 68  an be added with
2760: 6f 75 74 0a 68 61 76 69 6e 67 20 74 6f 20 72 65  out.having to re
2770: 63 6f 64 65 20 65 76 65 72 79 20 71 75 65 72 79  code every query
2780: 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c  ..</p>.</li>..<l
2790: 69 3e 3c 70 3e 3c 62 3e 53 74 61 6e 64 2d 69 6e  i><p><b>Stand-in
27a0: 20 66 6f 72 20 61 6e 20 65 6e 74 65 72 70 72 69   for an enterpri
27b0: 73 65 20 64 61 74 61 62 61 73 65 20 64 75 72 69  se database duri
27c0: 6e 67 20 64 65 6d 6f 73 20 6f 72 20 74 65 73 74  ng demos or test
27d0: 69 6e 67 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e  ing</b></p>..<p>
27e0: 0a 43 6c 69 65 6e 74 20 61 70 70 6c 69 63 61 74  .Client applicat
27f0: 69 6f 6e 73 20 74 79 70 69 63 61 6c 6c 79 20 75  ions typically u
2800: 73 65 20 61 20 67 65 6e 65 72 69 63 20 64 61 74  se a generic dat
2810: 61 62 61 73 65 20 69 6e 74 65 72 66 61 63 65 20  abase interface 
2820: 74 68 61 74 20 61 6c 6c 6f 77 73 0a 63 6f 6e 6e  that allows.conn
2830: 65 63 74 69 6f 6e 73 20 74 6f 20 76 61 72 69 6f  ections to vario
2840: 75 73 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  us SQL database 
2850: 65 6e 67 69 6e 65 73 2e 20 20 49 74 20 6d 61 6b  engines.  It mak
2860: 65 73 20 67 6f 6f 64 20 73 65 6e 73 65 20 74 6f  es good sense to
2870: 20 0a 69 6e 63 6c 75 64 65 20 53 51 4c 69 74 65   .include SQLite
2880: 20 69 6e 20 74 68 65 20 6d 69 78 20 6f 66 20 73   in the mix of s
2890: 75 70 70 6f 72 74 65 64 20 64 61 74 61 62 61 73  upported databas
28a0: 65 73 20 61 6e 64 20 74 6f 20 73 74 61 74 69 63  es and to static
28b0: 61 6c 6c 79 0a 6c 69 6e 6b 20 74 68 65 20 53 51  ally.link the SQ
28c0: 4c 69 74 65 20 65 6e 67 69 6e 65 20 69 6e 20 77  Lite engine in w
28d0: 69 74 68 20 74 68 65 20 63 6c 69 65 6e 74 2e 20  ith the client. 
28e0: 20 54 68 61 74 20 77 61 79 20 74 68 65 20 63 6c   That way the cl
28f0: 69 65 6e 74 20 70 72 6f 67 72 61 6d 0a 63 61 6e  ient program.can
2900: 20 62 65 20 75 73 65 64 20 73 74 61 6e 64 61 6c   be used standal
2910: 6f 6e 65 20 77 69 74 68 20 61 6e 20 53 51 4c 69  one with an SQLi
2920: 74 65 20 64 61 74 61 20 66 69 6c 65 20 66 6f 72  te data file for
2930: 20 74 65 73 74 69 6e 67 20 6f 72 20 66 6f 72 0a   testing or for.
2940: 64 65 6d 6f 6e 73 74 72 61 74 69 6f 6e 73 2e 0a  demonstrations..
2950: 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  </p>.</li>..<li>
2960: 3c 70 3e 3c 62 3e 45 64 75 63 61 74 69 6f 6e 20  <p><b>Education 
2970: 61 6e 64 20 54 72 61 69 6e 69 6e 67 3c 2f 62 3e  and Training</b>
2980: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 42 65 63 61 75 73  </p>..<p>.Becaus
2990: 65 20 69 74 20 69 73 20 73 69 6d 70 6c 65 20 74  e it is simple t
29a0: 6f 20 73 65 74 75 70 20 61 6e 64 20 75 73 65 20  o setup and use 
29b0: 28 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 69 73  (installation is
29c0: 20 74 72 69 76 69 61 6c 3a 20 6a 75 73 74 0a 63   trivial: just.c
29d0: 6f 70 79 20 74 68 65 20 3c 62 3e 73 71 6c 69 74  opy the <b>sqlit
29e0: 65 33 3c 2f 62 3e 20 6f 72 20 3c 62 3e 73 71 6c  e3</b> or <b>sql
29f0: 69 74 65 33 2e 65 78 65 3c 2f 62 3e 20 65 78 65  ite3.exe</b> exe
2a00: 63 75 74 61 62 6c 65 20 74 6f 20 74 68 65 20 74  cutable to the t
2a10: 61 72 67 65 74 20 6d 61 63 68 69 6e 65 0a 61 6e  arget machine.an
2a20: 64 20 72 75 6e 20 69 74 29 20 53 51 4c 69 74 65  d run it) SQLite
2a30: 20 6d 61 6b 65 73 20 61 20 67 6f 6f 64 20 64 61   makes a good da
2a40: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 66 6f  tabase engine fo
2a50: 72 20 75 73 65 20 69 6e 20 74 65 61 63 68 69 6e  r use in teachin
2a60: 67 20 53 51 4c 2e 0a 53 74 75 64 65 6e 74 73 20  g SQL..Students 
2a70: 63 61 6e 20 65 61 73 69 6c 79 20 63 72 65 61 74  can easily creat
2a80: 65 20 61 73 20 6d 61 6e 79 20 64 61 74 61 62 61  e as many databa
2a90: 73 65 73 20 61 73 20 74 68 65 79 20 6c 69 6b 65  ses as they like
2aa0: 20 61 6e 64 20 63 61 6e 0a 65 6d 61 69 6c 20 64   and can.email d
2ab0: 61 74 61 62 61 73 65 73 20 74 6f 20 74 68 65 20  atabases to the 
2ac0: 69 6e 73 74 72 75 63 74 6f 72 20 66 6f 72 20 63  instructor for c
2ad0: 6f 6d 6d 65 6e 74 73 20 6f 72 20 67 72 61 64 69  omments or gradi
2ae0: 6e 67 2e 20 20 46 6f 72 20 6d 6f 72 65 0a 61 64  ng.  For more.ad
2af0: 76 61 6e 63 65 64 20 73 74 75 64 65 6e 74 73 20  vanced students 
2b00: 77 68 6f 20 61 72 65 20 69 6e 74 65 72 65 73 74  who are interest
2b10: 65 64 20 69 6e 20 73 74 75 64 79 69 6e 67 20 68  ed in studying h
2b20: 6f 77 20 61 6e 20 52 44 42 4d 53 20 69 73 0a 69  ow an RDBMS is.i
2b30: 6d 70 6c 65 6d 65 6e 74 65 64 2c 20 74 68 65 20  mplemented, the 
2b40: 6d 6f 64 75 6c 61 72 20 61 6e 64 20 77 65 6c 6c  modular and well
2b50: 2d 63 6f 6d 6d 65 6e 74 65 64 20 61 6e 64 20 64  -commented and d
2b60: 6f 63 75 6d 65 6e 74 65 64 20 53 51 4c 69 74 65  ocumented SQLite
2b70: 20 63 6f 64 65 0a 63 61 6e 20 73 65 72 76 65 20   code.can serve 
2b80: 61 73 20 61 20 67 6f 6f 64 20 62 61 73 69 73 2e  as a good basis.
2b90: 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69  .</p>.</li>..<li
2ba0: 3e 3c 70 3e 3c 62 3e 45 78 70 65 72 69 6d 65 6e  ><p><b>Experimen
2bb0: 74 61 6c 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  tal SQL language
2bc0: 20 65 78 74 65 6e 73 69 6f 6e 73 3c 2f 62 3e 3c   extensions</b><
2bd0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 69 6d 70  /p>..<p>The simp
2be0: 6c 65 2c 20 6d 6f 64 75 6c 61 72 20 64 65 73 69  le, modular desi
2bf0: 67 6e 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 6b  gn of SQLite mak
2c00: 65 73 20 69 74 20 61 20 67 6f 6f 64 20 70 6c 61  es it a good pla
2c10: 74 66 6f 72 6d 20 66 6f 72 0a 70 72 6f 74 6f 74  tform for.protot
2c20: 79 70 69 6e 67 20 6e 65 77 2c 20 65 78 70 65 72  yping new, exper
2c30: 69 6d 65 6e 74 61 6c 20 64 61 74 61 62 61 73 65  imental database
2c40: 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72   language featur
2c50: 65 73 20 6f 72 20 69 64 65 61 73 2e 0a 3c 2f 70  es or ideas..</p
2c60: 3e 0a 3c 2f 6c 69 3e 0a 0a 0a 3c 2f 75 6c 3e 0a  >.</li>...</ul>.
2c70: 0a 3c 68 32 3e 53 69 74 75 61 74 69 6f 6e 73 20  .<h2>Situations 
2c80: 57 68 65 72 65 20 41 20 43 6c 69 65 6e 74 2f 53  Where A Client/S
2c90: 65 72 76 65 72 20 52 44 42 4d 53 20 4d 61 79 20  erver RDBMS May 
2ca0: 57 6f 72 6b 20 42 65 74 74 65 72 3c 2f 68 32 3e  Work Better</h2>
2cb0: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62  ..<ul>.<li><p><b
2cc0: 3e 43 6c 69 65 6e 74 2f 53 65 72 76 65 72 20 41  >Client/Server A
2cd0: 70 70 6c 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c  pplications</b><
2ce0: 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 72 65 20  p>..<p>If there 
2cf0: 61 72 65 20 6d 61 6e 79 20 63 6c 69 65 6e 74 20  are many client 
2d00: 70 72 6f 67 72 61 6d 73 20 73 65 6e 64 69 6e 67  programs sending
2d10: 20 53 51 4c 20 74 6f 20 74 68 65 20 73 61 6d 65   SQL to the same
2d20: 20 0a 64 61 74 61 62 61 73 65 20 6f 76 65 72 20   .database over 
2d30: 61 20 6e 65 74 77 6f 72 6b 2c 20 74 68 65 6e 20  a network, then 
2d40: 75 73 65 20 61 20 63 6c 69 65 6e 74 2f 73 65 72  use a client/ser
2d50: 76 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67  ver database.eng
2d60: 69 6e 65 20 69 6e 73 74 65 61 64 20 6f 66 20 53  ine instead of S
2d70: 51 4c 69 74 65 2e 20 20 53 51 4c 69 74 65 20 77  QLite.  SQLite w
2d80: 69 6c 6c 20 77 6f 72 6b 20 6f 76 65 72 20 61 20  ill work over a 
2d90: 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74  network filesyst
2da0: 65 6d 2c 0a 62 75 74 20 62 65 63 61 75 73 65 20  em,.but because 
2db0: 6f 66 20 74 68 65 20 6c 61 74 65 6e 63 79 20 61  of the latency a
2dc0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 6d  ssociated with m
2dd0: 6f 73 74 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65  ost network file
2de0: 73 79 73 74 65 6d 73 2c 0a 70 65 72 66 6f 72 6d  systems,.perform
2df0: 61 6e 63 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  ance will not be
2e00: 20 67 72 65 61 74 2e 20 20 41 6c 73 6f 2c 20 66   great.  Also, f
2e10: 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 6c 6f 67 69  ile locking logi
2e20: 63 20 69 73 20 62 75 67 67 79 20 69 6e 0a 6d 61  c is buggy in.ma
2e30: 6e 79 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73  ny network files
2e40: 79 73 74 65 6d 20 69 6d 70 6c 65 6d 65 6e 74 61  ystem implementa
2e50: 74 69 6f 6e 73 20 28 6f 6e 20 62 6f 74 68 20 55  tions (on both U
2e60: 6e 69 78 20 61 6e 64 20 57 69 6e 64 6f 77 73 29  nix and Windows)
2e70: 2e 0a 49 66 20 66 69 6c 65 20 6c 6f 63 6b 69 6e  ..If file lockin
2e80: 67 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20  g does not work 
2e90: 63 6f 72 72 65 63 74 6c 79 2c 0a 74 77 6f 20 6f  correctly,.two o
2ea0: 72 20 6d 6f 72 65 20 63 6c 69 65 6e 74 73 20 6d  r more clients m
2eb0: 69 67 68 74 20 74 72 79 20 74 6f 20 6d 6f 64 69  ight try to modi
2ec0: 66 79 20 74 68 65 0a 73 61 6d 65 20 70 61 72 74  fy the.same part
2ed0: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 64 61 74   of the same dat
2ee0: 61 62 61 73 65 20 61 74 20 74 68 65 20 73 61 6d  abase at the sam
2ef0: 65 20 74 69 6d 65 2c 20 72 65 73 75 6c 74 69 6e  e time, resultin
2f00: 67 20 69 6e 20 0a 63 6f 72 72 75 70 74 69 6f 6e  g in .corruption
2f10: 2e 20 20 42 65 63 61 75 73 65 20 74 68 69 73 20  .  Because this 
2f20: 70 72 6f 62 6c 65 6d 20 72 65 73 75 6c 74 73 20  problem results 
2f30: 66 72 6f 6d 20 62 75 67 73 20 69 6e 0a 74 68 65  from bugs in.the
2f40: 20 75 6e 64 65 72 6c 79 69 6e 67 20 66 69 6c 65   underlying file
2f50: 73 79 73 74 65 6d 20 69 6d 70 6c 65 6d 65 6e 74  system implement
2f60: 61 74 69 6f 6e 2c 20 74 68 65 72 65 20 69 73 20  ation, there is 
2f70: 6e 6f 74 68 69 6e 67 20 53 51 4c 69 74 65 0a 63  nothing SQLite.c
2f80: 61 6e 20 64 6f 20 74 6f 20 70 72 65 76 65 6e 74  an do to prevent
2f90: 20 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 67   it.</p>..<p>A g
2fa0: 6f 6f 64 20 72 75 6c 65 20 6f 66 20 74 68 75 6d  ood rule of thum
2fb0: 62 20 69 73 20 74 6f 20 61 76 6f 69 64 20 75 73  b is to avoid us
2fc0: 69 6e 67 20 53 51 4c 69 74 65 0a 69 6e 20 73 69  ing SQLite.in si
2fd0: 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20 74  tuations where t
2fe0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
2ff0: 20 77 69 6c 6c 20 62 65 20 61 63 63 65 73 73 65   will be accesse
3000: 64 20 64 69 72 65 63 74 6c 79 0a 28 77 69 74 68  d directly.(with
3010: 6f 75 74 20 61 6e 20 69 6e 74 65 72 76 65 6e 69  out an interveni
3020: 6e 67 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 73  ng application s
3030: 65 72 76 65 72 29 20 61 6e 64 20 73 69 6d 75 6c  erver) and simul
3040: 74 61 6e 65 6f 75 73 6c 79 0a 66 72 6f 6d 20 6d  taneously.from m
3050: 61 6e 79 20 63 6f 6d 70 75 74 65 72 73 20 6f 76  any computers ov
3060: 65 72 20 61 20 6e 65 74 77 6f 72 6b 2e 3c 2f 70  er a network.</p
3070: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  >.</li>..<li><p>
3080: 3c 62 3e 48 69 67 68 2d 76 6f 6c 75 6d 65 20 57  <b>High-volume W
3090: 65 62 73 69 74 65 73 3c 2f 62 3e 3c 2f 70 3e 0a  ebsites</b></p>.
30a0: 0a 3c 70 3e 53 51 4c 69 74 65 20 77 69 6c 6c 20  .<p>SQLite will 
30b0: 6e 6f 72 6d 61 6c 6c 79 20 77 6f 72 6b 20 66 69  normally work fi
30c0: 6e 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ne as the databa
30d0: 73 65 20 62 61 63 6b 65 6e 64 20 74 6f 20 61 20  se backend to a 
30e0: 77 65 62 73 69 74 65 2e 0a 42 75 74 20 69 66 20  website..But if 
30f0: 74 68 65 20 77 65 62 73 69 74 65 20 69 73 20 77  the website is w
3100: 72 69 74 65 2d 69 6e 74 65 6e 73 69 76 65 20 6f  rite-intensive o
3110: 72 20 69 73 20 73 6f 20 62 75 73 79 20 74 68 61  r is so busy tha
3120: 74 20 69 74 20 72 65 71 75 69 72 65 73 0a 6d 75  t it requires.mu
3130: 6c 74 69 70 6c 65 20 73 65 72 76 65 72 73 2c 20  ltiple servers, 
3140: 74 68 65 6e 20 63 6f 6e 73 69 64 65 72 20 75 73  then consider us
3150: 69 6e 67 20 61 6e 20 65 6e 74 65 72 70 72 69 73  ing an enterpris
3160: 65 2d 63 6c 61 73 73 20 63 6c 69 65 6e 74 2f 73  e-class client/s
3170: 65 72 76 65 72 20 0a 64 61 74 61 62 61 73 65 20  erver .database 
3180: 65 6e 67 69 6e 65 20 69 6e 73 74 65 61 64 20 6f  engine instead o
3190: 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 3c 2f  f SQLite.</p>.</
31a0: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 56  li>..<li><p><b>V
31b0: 65 72 79 20 6c 61 72 67 65 20 64 61 74 61 73 65  ery large datase
31c0: 74 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41  ts</b></p>..<p>A
31d0: 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
31e0: 65 20 69 73 20 6c 69 6d 69 74 65 64 20 69 6e 20  e is limited in 
31f0: 73 69 7a 65 20 74 6f 20 31 34 30 20 74 65 72 61  size to 140 tera
3200: 62 79 74 65 73 20 0a 28 32 3c 73 75 70 3e 3c 73  bytes .(2<sup><s
3210: 6d 61 6c 6c 3e 34 37 3c 2f 73 6d 61 6c 6c 3e 3c  mall>47</small><
3220: 2f 73 75 70 3e 20 62 79 74 65 73 2c 20 31 32 38  /sup> bytes, 128
3230: 20 74 69 62 69 62 79 74 65 73 29 2e 0a 41 6e 64   tibibytes)..And
3240: 20 65 76 65 6e 20 69 66 20 69 74 20 63 6f 75 6c   even if it coul
3250: 64 20 68 61 6e 64 6c 65 20 6c 61 72 67 65 72 20  d handle larger 
3260: 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74  databases, SQLit
3270: 65 20 73 74 6f 72 65 73 20 74 68 65 20 65 6e 74  e stores the ent
3280: 69 72 65 0a 64 61 74 61 62 61 73 65 20 69 6e 20  ire.database in 
3290: 61 20 73 69 6e 67 6c 65 20 64 69 73 6b 20 66 69  a single disk fi
32a0: 6c 65 20 61 6e 64 20 6d 61 6e 79 20 66 69 6c 65  le and many file
32b0: 73 79 73 74 65 6d 73 20 6c 69 6d 69 74 20 74 68  systems limit th
32c0: 65 20 6d 61 78 69 6d 75 6d 0a 73 69 7a 65 20 6f  e maximum.size o
32d0: 66 20 66 69 6c 65 73 20 74 6f 20 73 6f 6d 65 74  f files to somet
32e0: 68 69 6e 67 20 6c 65 73 73 20 74 68 61 6e 20 74  hing less than t
32f0: 68 69 73 2e 20 20 53 6f 20 69 66 20 79 6f 75 20  his.  So if you 
3300: 61 72 65 20 63 6f 6e 74 65 6d 70 6c 61 74 69 6e  are contemplatin
3310: 67 0a 64 61 74 61 62 61 73 65 73 20 6f 66 20 74  g.databases of t
3320: 68 69 73 20 6d 61 67 6e 69 74 75 64 65 2c 20 79  his magnitude, y
3330: 6f 75 20 77 6f 75 6c 64 20 64 6f 20 77 65 6c 6c  ou would do well
3340: 20 74 6f 20 63 6f 6e 73 69 64 65 72 20 75 73 69   to consider usi
3350: 6e 67 20 61 0a 63 6c 69 65 6e 74 2f 73 65 72 76  ng a.client/serv
3360: 65 72 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  er database engi
3370: 6e 65 20 74 68 61 74 20 73 70 72 65 61 64 73 20  ne that spreads 
3380: 69 74 73 20 63 6f 6e 74 65 6e 74 20 61 63 72 6f  its content acro
3390: 73 73 20 6d 75 6c 74 69 70 6c 65 0a 64 69 73 6b  ss multiple.disk
33a0: 20 66 69 6c 65 73 2c 20 61 6e 64 20 70 65 72 68   files, and perh
33b0: 61 70 73 20 61 63 72 6f 73 73 20 6d 75 6c 74 69  aps across multi
33c0: 70 6c 65 20 76 6f 6c 75 6d 65 73 2e 0a 3c 2f 70  ple volumes..</p
33d0: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  >.</li>..<li><p>
33e0: 3c 62 3e 48 69 67 68 20 43 6f 6e 63 75 72 72 65  <b>High Concurre
33f0: 6e 63 79 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e  ncy</b></p>..<p>
3400: 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73  .SQLite supports
3410: 20 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75   an unlimited nu
3420: 6d 62 65 72 20 6f 66 20 73 69 6d 75 6c 74 61 6e  mber of simultan
3430: 65 6f 75 73 20 72 65 61 64 65 72 73 2c 20 62 75  eous readers, bu
3440: 74 20 69 74 20 0a 77 69 6c 6c 20 6f 6e 6c 79 20  t it .will only 
3450: 61 6c 6c 6f 77 20 6f 6e 65 20 77 72 69 74 65 72  allow one writer
3460: 20 61 74 20 61 6e 79 20 69 6e 73 74 61 6e 74 20   at any instant 
3470: 69 6e 20 74 69 6d 65 2e 0a 46 6f 72 20 6d 61 6e  in time..For man
3480: 79 20 73 69 74 75 61 74 69 6f 6e 73 2c 20 74 68  y situations, th
3490: 69 73 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  is is not a prob
34a0: 6c 65 6d 2e 20 20 57 72 69 74 65 72 73 20 71 75  lem.  Writers qu
34b0: 65 75 65 20 75 70 2e 20 45 61 63 68 20 61 70 70  eue up. Each app
34c0: 6c 69 63 61 74 69 6f 6e 0a 64 6f 65 73 20 69 74  lication.does it
34d0: 73 20 64 61 74 61 62 61 73 65 20 77 6f 72 6b 20  s database work 
34e0: 71 75 69 63 6b 6c 79 20 61 6e 64 20 6d 6f 76 65  quickly and move
34f0: 73 20 6f 6e 2c 20 61 6e 64 20 6e 6f 20 6c 6f 63  s on, and no loc
3500: 6b 20 6c 61 73 74 73 20 66 6f 72 20 6d 6f 72 65  k lasts for more
3510: 0a 74 68 61 6e 20 61 20 66 65 77 20 64 6f 7a 65  .than a few doze
3520: 6e 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2e 20  n milliseconds. 
3530: 42 75 74 20 74 68 65 72 65 20 61 72 65 20 73 6f  But there are so
3540: 6d 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  me applications 
3550: 74 68 61 74 20 72 65 71 75 69 72 65 0a 6d 6f 72  that require.mor
3560: 65 20 63 6f 6e 63 75 72 72 65 6e 63 79 2c 20 61  e concurrency, a
3570: 6e 64 20 74 68 6f 73 65 20 61 70 70 6c 69 63 61  nd those applica
3580: 74 69 6f 6e 73 20 6d 61 79 20 6e 65 65 64 20 74  tions may need t
3590: 6f 20 73 65 65 6b 20 61 20 64 69 66 66 65 72 65  o seek a differe
35a0: 6e 74 0a 73 6f 6c 75 74 69 6f 6e 2e 0a 3c 2f 70  nt.solution..</p
35b0: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 2f 75 6c 3e 0a 0a  >.</li>..</ul>..
35c0: 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e  <tcl>.hd_fragmen
35d0: 74 20 64 62 63 6b 6c 73 74 20 7b 64 65 63 69 73  t dbcklst {decis
35e0: 69 6f 6e 20 63 68 65 63 6b 6c 69 73 74 7d 0a 3c  ion checklist}.<
35f0: 2f 74 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b 6c  /tcl>.<h2>Checkl
3600: 69 73 74 20 46 6f 72 20 43 68 6f 6f 73 69 6e 67  ist For Choosing
3610: 20 54 68 65 20 52 69 67 68 74 20 44 61 74 61 62   The Right Datab
3620: 61 73 65 20 45 6e 67 69 6e 65 3c 2f 68 32 3e 0a  ase Engine</h2>.
3630: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  .<ol>.<li><p><b>
3640: 49 73 20 74 68 65 20 64 61 74 61 20 73 65 70 61  Is the data sepa
3650: 72 61 74 65 64 20 66 72 6f 6d 20 74 68 65 20 61  rated from the a
3660: 70 70 6c 69 63 61 74 69 6f 6e 20 62 79 20 61 20  pplication by a 
3670: 6e 65 74 77 6f 72 6b 3f 0a 20 20 20 20 20 20 20  network?.       
3680: 26 72 61 72 72 3b 20 63 68 6f 6f 73 65 20 63 6c  &rarr; choose cl
3690: 69 65 6e 74 2f 73 65 72 76 65 72 3c 2f 62 3e 3c  ient/server</b><
36a0: 2f 70 3e 0a 0a 3c 70 3e 52 65 6c 61 74 69 6f 6e  /p>..<p>Relation
36b0: 61 6c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  al database engi
36c0: 6e 65 73 20 61 63 74 20 61 73 20 62 61 6e 64 77  nes act as bandw
36d0: 69 64 74 68 2d 72 65 64 75 63 69 6e 67 20 64 61  idth-reducing da
36e0: 74 61 20 66 69 6c 74 65 72 73 2e 0a 53 6f 20 69  ta filters..So i
36f0: 74 20 69 73 20 62 65 73 74 20 74 6f 20 6b 65 65  t is best to kee
3700: 70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  p the database e
3710: 6e 67 69 6e 65 20 61 6e 64 20 74 68 65 20 64 61  ngine and the da
3720: 74 61 20 6f 6e 0a 74 68 65 20 73 61 6d 65 20 70  ta on.the same p
3730: 68 79 73 69 63 61 6c 20 64 65 76 69 63 65 20 73  hysical device s
3740: 6f 20 74 68 61 74 20 74 68 65 20 68 69 67 68 2d  o that the high-
3750: 62 61 6e 64 77 69 64 74 68 20 65 6e 67 69 6e 65  bandwidth engine
3760: 2d 74 6f 2d 64 69 73 6b 0a 6c 69 6e 6b 20 64 6f  -to-disk.link do
3770: 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 74  es not have to t
3780: 72 61 76 65 72 73 65 20 74 68 65 20 6e 65 74 77  raverse the netw
3790: 6f 72 6b 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  ork, only the lo
37a0: 77 65 72 2d 62 61 6e 64 77 69 64 74 68 0a 61 70  wer-bandwidth.ap
37b0: 70 6c 69 63 61 74 69 6f 6e 2d 74 6f 2d 65 6e 67  plication-to-eng
37c0: 69 6e 65 20 6c 69 6e 6b 2e 0a 0a 3c 70 3e 42 75  ine link...<p>Bu
37d0: 74 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  t SQLite is buil
37e0: 74 20 69 6e 74 6f 20 74 68 65 20 61 70 70 6c 69  t into the appli
37f0: 63 61 74 69 6f 6e 2e 20 20 53 6f 20 69 66 20 74  cation.  So if t
3800: 68 65 20 64 61 74 61 20 69 73 20 6f 6e 20 61 0a  he data is on a.
3810: 73 65 70 61 72 61 74 65 20 64 65 76 69 63 65 20  separate device 
3820: 66 72 6f 6d 20 74 68 65 20 61 70 70 6c 69 63 61  from the applica
3830: 74 69 6f 6e 2c 20 69 74 20 69 73 20 72 65 71 75  tion, it is requ
3840: 69 72 65 64 20 74 68 61 74 20 74 68 65 20 68 69  ired that the hi
3850: 67 68 65 72 0a 62 61 6e 64 77 69 64 74 68 20 65  gher.bandwidth e
3860: 6e 67 69 6e 65 2d 74 6f 2d 64 69 73 6b 20 6c 69  ngine-to-disk li
3870: 6e 6b 20 62 65 20 61 63 72 6f 73 73 20 74 68 65  nk be across the
3880: 20 6e 65 74 77 6f 72 6b 2e 20 20 54 68 69 73 20   network.  This 
3890: 77 6f 72 6b 73 2c 20 62 75 74 0a 69 74 20 69 73  works, but.it is
38a0: 20 73 75 62 6f 70 74 69 6d 61 6c 2e 20 20 48 65   suboptimal.  He
38b0: 6e 63 65 2c 20 69 74 20 69 73 20 75 73 75 61 6c  nce, it is usual
38c0: 6c 79 20 62 65 74 74 65 72 20 74 6f 20 73 65 6c  ly better to sel
38d0: 65 63 74 20 61 20 63 6c 69 65 6e 74 2f 73 65 72  ect a client/ser
38e0: 76 65 72 0a 64 61 74 61 62 61 73 65 20 65 6e 67  ver.database eng
38f0: 69 6e 65 20 77 68 65 6e 20 74 68 65 20 64 61 74  ine when the dat
3900: 61 20 69 73 20 6f 6e 20 61 20 73 65 70 61 72 61  a is on a separa
3910: 74 65 20 64 65 76 69 63 65 20 66 72 6f 6d 20 74  te device from t
3920: 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a  he.application..
3930: 0a 3c 70 3e 3c 65 6d 3e 4e 6f 74 61 20 42 65 6e  .<p><em>Nota Ben
3940: 65 3a 3c 2f 65 6d 3e 0a 49 6e 20 74 68 69 73 20  e:</em>.In this 
3950: 72 75 6c 65 2c 20 22 61 70 70 6c 69 63 61 74 69  rule, "applicati
3960: 6f 6e 22 20 6d 65 61 6e 73 20 74 68 65 20 63 6f  on" means the co
3970: 64 65 20 74 68 61 74 20 69 73 73 75 65 73 20 53  de that issues S
3980: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 49  QL statements..I
3990: 66 20 74 68 65 20 22 61 70 70 6c 69 63 61 74 69  f the "applicati
39a0: 6f 6e 22 20 69 73 20 61 6e 20 5b 73 65 72 76 65  on" is an [serve
39b0: 72 2d 73 69 64 65 20 64 61 74 61 62 61 73 65 7c  r-side database|
39c0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 73 65 72 76  application serv
39d0: 65 72 5d 20 61 6e 64 0a 69 66 20 74 68 65 20 63  er] and.if the c
39e0: 6f 6e 74 65 6e 74 20 72 65 73 69 64 65 73 20 6f  ontent resides o
39f0: 6e 20 74 68 65 20 73 61 6d 65 20 70 68 79 73 69  n the same physi
3a00: 63 61 6c 20 6d 61 63 68 69 6e 65 20 61 73 20 74  cal machine as t
3a10: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 73  he application s
3a20: 65 72 76 65 72 2c 0a 74 68 65 6e 20 53 51 4c 69  erver,.then SQLi
3a30: 74 65 20 6d 69 67 68 74 20 73 74 69 6c 6c 20 62  te might still b
3a40: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 76  e appropriate ev
3a50: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 20 65 6e  en though the en
3a60: 64 20 75 73 65 72 20 69 73 0a 61 6e 6f 74 68 65  d user is.anothe
3a70: 72 20 6e 65 74 77 6f 72 6b 20 68 6f 70 20 61 77  r network hop aw
3a80: 61 79 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c  ay.</p>.</li>..<
3a90: 6c 69 3e 3c 70 3e 3c 62 3e 4d 61 6e 79 20 63 6f  li><p><b>Many co
3aa0: 6e 63 75 72 72 65 6e 74 20 77 72 69 74 65 72 73  ncurrent writers
3ab0: 3f 20 26 72 61 72 72 3b 20 63 68 6f 6f 73 65 20  ? &rarr; choose 
3ac0: 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 3c 2f 62  client/server</b
3ad0: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6d 61 6e  ></p>..<p>If man
3ae0: 79 20 74 68 72 65 61 64 73 20 61 6e 64 2f 6f 72  y threads and/or
3af0: 20 70 72 6f 63 65 73 73 65 73 20 6e 65 65 64 20   processes need 
3b00: 74 6f 20 77 72 69 74 65 20 74 68 65 0a 64 61 74  to write the.dat
3b10: 61 62 61 73 65 20 61 74 20 74 68 65 20 73 61 6d  abase at the sam
3b20: 65 20 69 6e 73 74 61 6e 74 20 28 61 6e 64 20 74  e instant (and t
3b30: 68 65 79 20 63 61 6e 6e 6f 74 20 71 75 65 75 65  hey cannot queue
3b40: 20 75 70 20 61 6e 64 20 74 61 6b 65 20 74 75 72   up and take tur
3b50: 6e 73 29 0a 74 68 65 6e 20 69 74 20 69 73 20 62  ns).then it is b
3b60: 65 73 74 20 74 6f 20 73 65 6c 65 63 74 20 61 20  est to select a 
3b70: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20  database engine 
3b80: 74 68 61 74 20 73 75 70 70 6f 72 74 73 20 74 68  that supports th
3b90: 61 74 0a 63 61 70 61 62 69 6c 69 74 79 2c 20 77  at.capability, w
3ba0: 68 69 63 68 20 61 6c 77 61 79 73 20 6d 65 61 6e  hich always mean
3bb0: 73 20 61 20 63 6c 69 65 6e 74 2f 73 65 72 76 65  s a client/serve
3bc0: 72 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  r database engin
3bd0: 65 2e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 6f 6e  e...<p>SQLite on
3be0: 6c 79 20 73 75 70 70 6f 72 74 73 20 6f 6e 65 20  ly supports one 
3bf0: 77 72 69 74 65 72 20 61 74 20 61 20 74 69 6d 65  writer at a time
3c00: 20 70 65 72 20 64 61 74 61 62 61 73 65 20 66 69   per database fi
3c10: 6c 65 2e 0a 42 75 74 20 69 6e 20 6d 6f 73 74 20  le..But in most 
3c20: 63 61 73 65 73 2c 20 61 20 77 72 69 74 65 20 74  cases, a write t
3c30: 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 6c 79 20  ransaction only 
3c40: 74 61 6b 65 73 20 6d 69 6c 6c 69 73 65 63 6f 6e  takes millisecon
3c50: 64 73 20 61 6e 64 0a 73 6f 20 6d 75 6c 74 69 70  ds and.so multip
3c60: 6c 65 20 77 72 69 74 65 72 73 20 63 61 6e 20 73  le writers can s
3c70: 69 6d 70 6c 79 20 74 61 6b 65 20 74 75 72 6e 73  imply take turns
3c80: 2e 20 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 68  .  SQLite will h
3c90: 61 6e 64 6c 65 0a 6d 6f 72 65 20 77 72 69 74 65  andle.more write
3ca0: 20 63 6f 6e 63 75 72 72 65 6e 63 79 20 74 68 61   concurrency tha
3cb0: 74 20 6d 61 6e 79 20 70 65 6f 70 6c 65 20 73 75  t many people su
3cc0: 73 70 65 63 74 2e 20 20 4e 65 76 65 72 74 68 65  spect.  Neverthe
3cd0: 6c 65 73 73 2c 0a 63 6c 69 65 6e 74 2f 73 65 72  less,.client/ser
3ce0: 76 65 72 20 64 61 74 61 62 61 73 65 20 73 79 73  ver database sys
3cf0: 74 65 6d 73 2c 20 62 65 63 61 75 73 65 20 74 68  tems, because th
3d00: 65 79 20 68 61 76 65 20 61 20 6c 6f 6e 67 2d 72  ey have a long-r
3d10: 75 6e 6e 69 6e 67 0a 73 65 72 76 65 72 20 70 72  unning.server pr
3d20: 6f 63 65 73 73 20 61 74 20 68 61 6e 64 20 74 6f  ocess at hand to
3d30: 20 63 6f 6f 72 64 69 6e 61 74 65 20 61 63 63 65   coordinate acce
3d40: 73 73 2c 20 63 61 6e 20 75 73 75 61 6c 6c 79 20  ss, can usually 
3d50: 68 61 6e 64 6c 65 20 0a 66 61 72 20 6d 6f 72 65  handle .far more
3d60: 20 77 72 69 74 65 20 63 6f 6e 63 75 72 72 65 6e   write concurren
3d70: 63 79 20 74 68 61 6e 20 53 51 4c 69 74 65 20 65  cy than SQLite e
3d80: 76 65 72 20 77 69 6c 6c 2e 0a 3c 2f 6c 69 3e 0a  ver will..</li>.
3d90: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 42 69 67 20 64  .<li><p><b>Big d
3da0: 61 74 61 3f 20 26 72 61 72 72 3b 20 63 68 6f 6f  ata? &rarr; choo
3db0: 73 65 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72  se client/server
3dc0: 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20  </b></p>..<p>If 
3dd0: 79 6f 75 72 20 64 61 74 61 20 77 69 6c 6c 20 67  your data will g
3de0: 72 6f 77 20 74 6f 20 61 20 73 69 7a 65 20 74 68  row to a size th
3df0: 61 74 20 79 6f 75 20 61 72 65 20 75 6e 63 6f 6d  at you are uncom
3e00: 66 6f 72 74 61 62 6c 65 0a 6f 72 20 75 6e 61 62  fortable.or unab
3e10: 6c 65 20 74 6f 20 66 69 74 20 69 6e 74 6f 20 61  le to fit into a
3e20: 20 73 69 6e 67 6c 65 20 64 69 73 6b 20 66 69 6c   single disk fil
3e30: 65 2c 20 74 68 65 6e 20 79 6f 75 20 73 68 6f 75  e, then you shou
3e40: 6c 64 20 73 65 6c 65 63 74 0a 61 20 73 6f 6c 75  ld select.a solu
3e50: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
3e60: 53 51 4c 69 74 65 2e 20 20 53 51 4c 69 74 65 20  SQLite.  SQLite 
3e70: 73 75 70 70 6f 72 74 73 20 64 61 74 61 62 61 73  supports databas
3e80: 65 73 20 75 70 20 74 6f 0a 31 34 30 20 74 65 72  es up to.140 ter
3e90: 61 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2c 20  abytes in size, 
3ea0: 61 73 73 75 6d 69 6e 67 20 79 6f 75 20 63 61 6e  assuming you can
3eb0: 20 66 69 6e 64 20 61 20 64 69 73 6b 20 64 72 69   find a disk dri
3ec0: 76 65 20 61 6e 64 20 66 69 6c 65 73 79 73 74 65  ve and filesyste
3ed0: 6d 0a 74 68 61 74 20 77 69 6c 6c 20 73 75 70 70  m.that will supp
3ee0: 6f 72 74 20 31 34 30 2d 74 65 72 61 62 79 74 65  ort 140-terabyte
3ef0: 20 66 69 6c 65 73 2e 20 20 45 76 65 6e 20 73 6f   files.  Even so
3f00: 2c 20 77 68 65 6e 20 74 68 65 20 73 69 7a 65 20  , when the size 
3f10: 6f 66 20 74 68 65 0a 63 6f 6e 74 65 6e 74 20 6c  of the.content l
3f20: 6f 6f 6b 73 20 6c 69 6b 65 20 69 74 20 6d 69 67  ooks like it mig
3f30: 68 74 20 63 72 65 65 70 20 69 6e 74 6f 20 74 68  ht creep into th
3f40: 65 20 74 65 72 61 62 79 74 65 20 72 61 6e 67 65  e terabyte range
3f50: 2c 20 69 74 20 77 6f 75 6c 64 0a 62 65 20 67 6f  , it would.be go
3f60: 6f 64 20 74 6f 20 63 6f 6e 73 69 64 65 72 20 61  od to consider a
3f70: 20 63 65 6e 74 72 61 6c 69 7a 65 64 20 63 6c 69   centralized cli
3f80: 65 6e 74 2f 73 65 72 76 65 72 20 64 61 74 61 62  ent/server datab
3f90: 61 73 65 2e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  ase..</li>..<li>
3fa0: 3c 70 3e 3c 62 3e 4f 74 68 65 72 77 69 73 65 20  <p><b>Otherwise 
3fb0: 26 72 61 72 72 3b 20 63 68 6f 6f 73 65 20 53 51  &rarr; choose SQ
3fc0: 4c 69 74 65 21 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c  Lite!</b></p>..<
3fd0: 70 3e 46 6f 72 20 64 65 76 69 63 65 2d 6c 6f 63  p>For device-loc
3fe0: 61 6c 20 73 74 6f 72 61 67 65 20 77 69 74 68 20  al storage with 
3ff0: 6c 6f 77 20 77 72 69 74 65 72 20 63 6f 6e 63 75  low writer concu
4000: 72 72 65 6e 63 79 20 61 6e 64 20 6c 65 73 73 20  rrency and less 
4010: 74 68 61 6e 20 61 0a 74 65 72 61 62 79 74 65 20  than a.terabyte 
4020: 6f 66 20 63 6f 6e 74 65 6e 74 2c 20 53 51 4c 69  of content, SQLi
4030: 74 65 20 69 73 20 61 6c 6d 6f 73 74 20 61 6c 77  te is almost alw
4040: 61 79 73 20 61 20 62 65 74 74 65 72 20 73 6f 6c  ays a better sol
4050: 75 74 69 6f 6e 2e 20 20 53 51 4c 69 74 65 0a 69  ution.  SQLite.i
4060: 73 20 66 61 73 74 20 61 6e 64 20 72 65 6c 69 61  s fast and relia
4070: 62 6c 65 20 61 6e 64 20 69 74 20 72 65 71 75 69  ble and it requi
4080: 72 65 73 20 6e 6f 20 63 6f 6e 66 69 67 75 72 61  res no configura
4090: 74 69 6f 6e 20 6f 72 20 6d 61 69 6e 74 65 6e 61  tion or maintena
40a0: 6e 63 65 2e 0a 49 74 20 6b 65 65 70 73 20 74 68  nce..It keeps th
40b0: 69 6e 67 20 73 69 6d 70 6c 65 2e 20 20 53 51 4c  ing simple.  SQL
40c0: 69 74 65 20 22 6a 75 73 74 20 77 6f 72 6b 73 22  ite "just works"
40d0: 2e 0a 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a        ..</li>.</ol>.