SQLite

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 9. maj 2022; checks kræver 52 redigeringer .
SQLite
Type serverløst relationsdatabasestyringssystem [d]
Udvikler Richard Hipp [d]
Skrevet i C [2]
Operativ system på tværs af platforme
Første udgave august 2000
nyeste version
Læsbare filformater SQLite database filformat [d] , SQLite 3.x database [d] og SQLite rollbak journal [d]
Genererede filformater SQLite database filformat [d] , SQLite 3.x database [d] , SQLite Zipvfs komprimerede database [d] og SQLite rollbak journal [d]
Licens 🅮 [d] [3]
Internet side sqlite.org
 Mediefiler på Wikimedia Commons

SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ aɪ t / , [4] [5] / ˈ s k w ə ˌ la t / [6] ) er et kompakt indlejret DBMS . Kildekoden til biblioteket er blevet frigivet til det offentlige domæne . I 2005 modtog projektet Google-O'Reilly Open Source Awards [7] .

Enhed

Ordet "embedded" ( eng.  embedded ) betyder, at SQLite ikke bruger klient-server- paradigmet , det vil sige, at SQLite -motoren ikke er en separat arbejdsproces, som programmet interagerer med, men er et bibliotek , som programmet er forbundet med. , og motoren bliver en integreret del programmer. Således bruges funktionskald ( API ) af SQLite-biblioteket som udvekslingsprotokollen. Denne tilgang reducerer overhead, responstid og forenkler programmet. SQLite gemmer hele databasen (inklusive definitioner, tabeller, indekser og data) i en enkelt standardfil på den maskine, hvor programmet kører. Nem implementering opnås på grund af det faktum, at før starten af ​​udførelsen af ​​skrivetransaktionen er hele filen, der gemmer databasen, blokeret; ACID -funktioner opnås blandt andet ved at oprette en logfil.

Flere processer eller tråde kan samtidigt læse data fra den samme database uden problemer. Der kan kun skrives til databasen, hvis ingen andre anmodninger i øjeblikket behandles; ellers mislykkes skriveforsøget, og en fejlkode returneres til programmet. En anden mulighed for udvikling af begivenheder er den automatiske gentagelse af optagelsesforsøg inden for et bestemt tidsinterval.

Pakken indeholder også en funktionel klientdel i form af en eksekverbar sqlite3 -fil , som demonstrerer implementeringen af ​​hovedbibliotekets funktioner. Klientdelen er et kommandolinjeværktøj tværs af platforme .

SQLite kan bruges både på indlejrede systemer og på dedikerede maskiner med gigabyte dataarrays.

Datatyper

SQLite understøtter dynamisk dataindtastning. Mulige værdityper er INTEGER, REAL, TEXTog BLOB. Den særlige værdi understøttes også NULL. [otte]

Størrelsen af ​​TEXT- og BLOB-værdier er ikke begrænset af noget, bortset fra en konstant SQLITE_MAX_LENGTHi SQLite-kilderne svarende til en milliard (10 9 ) [9] .

Hver værdi i ethvert felt i enhver post kan være af en hvilken som helst af disse typer, uanset hvilken type der er angivet, når tabellens felter erklæres. Den type, der er angivet, når et felt er erklæret, gemmes til reference i dens oprindelige stavemåde og bruges som grundlag for valg af præferencer (såkaldt "type-affinitet": dette er en tilgang, der sjældent findes i andre DBMS'er), når der udføres implicitte typekonverteringer baseret på ligheden mellem dette typenavn og noget, der er bekendt med SQLite. Denne algoritme har en omfattende liste over varianter af datatypenavne, der praktiseres i andre DBMS'er. Hvis en skriveværdi ikke sikkert kan konverteres til dens foretrukne type, skriver SQLite værdien i sin oprindelige form. For at hente værdier fra databasen er der en række funktioner for hver af typerne, og hvis typen af ​​den lagrede værdi ikke matcher den ønskede, konverteres den også, hvis det er muligt. [ti]

Begrænsninger

Gamle versioner af SQLite blev designet uden nogen restriktioner, den eneste betingelse var, at databasen passede ind i hukommelsen, hvor alle beregninger blev udført ved hjælp af 32-bit heltal. Dette skabte visse problemer. Fordi øvre grænser ikke er blevet defineret og korrekt testet, er der ofte fundet fejl ved brug af SQLite under ret ekstreme forhold. Derfor introducerede nyere versioner af SQLite grænser, der nu kontrolleres sammen med den generelle testpakke.

Under kompilering af SQLite-biblioteket sættes følgende grænser, som kan øges om nødvendigt:

Beskrivelse Betyder Konstant i kildekoden
Maksimal længde af en streng eller BLOB -felt 1.000.000.000 SQLITE_MAX_LENGTH
Maksimalt antal kolonner 2000 SQLITE_MAX_COLUMN
Maksimal længde af en SQL- sætning 1.000.000.000 SQLITE_MAX_SQL_LENGTH
Maksimalt antal tabeller i udtryk med JOIN 64
Udtrykstræ Maksimal dybde 1000 SQLITE_MAX_EXPR_DEPTH
Maksimalt antal funktionsargumenter 127 SQLITE_MAX_FUNCTION_ARG
Maksimalt antal termer i et kombineret udtryk med SELECT 500 SQLITE_MAX_COMPOUND_SELECT
Den maksimale længde af et mønster som argument til LIKE- eller GLOB-operatorerne 50.000 SQLITE_MAX_LIKE_PATTERN_LENGTH
Maksimalt antal pladsholdertegn i én SQL-sætning 999 SQLITE_MAX_VARIABLE_NUMBER
Maksimal trigger -rekursionsdybde 1000 SQLITE_MAX_TRIGGER_DEPTH
Maksimalt antal vedhæftede baser ti SQLITE_MAX_ATTACHED
Maksimal databasesidestørrelse 65 536 SQLITE_MAX_PAGE_SIZE
Maksimalt antal sider i en databasefil 1 073 741 823 SQLITE_MAX_PAGE_COUNT

Fra version 3.37.0 kan SQLITE_MAX_PAGE_SIZE-værdien ikke være større end standarden, som udtrykkeligt er angivet i kildekoden. Det maksimale antal sider i databasen er 4294967294. Den maksimale størrelse af databasen er således 1,4e+14 bytes (281 decimal terabyte eller 256 TiB ). [elleve]

Nogle grænser kan ændres nedad under kørsel ved at angive en kategori og den tilsvarende værdi af funktionen sqlite3_limit() :

int sqlite3_limit ( sqlite3 * , int id , int newVal )
Kategori Beskrivelse
SQLITE_LIMIT_LENGTH Den maksimale længde af en streng eller BLOB-felt eller række
SQLITE_LIMIT_SQL_LENGTH Maksimal længde af SQL-sætning
SQLITE_LIMIT_COLUMN Maksimalt antal kolonner i en tabeldefinition eller vælg resultat eller indeks eller udtryk med ORDER BY eller GROUP BY klausuler
SQLITE_LIMIT_EXPR_DEPTH Den maksimale dybde af det analyserede træ for ethvert udtryk
SQLITE_LIMIT_COMPOUND_SELECT Maksimalt antal termer i et kombineret udtryk med SELECT
SQLITE_LIMIT_VDBE_OP Maksimalt antal virtuelle maskinprograminstruktioner for en eksekverbar SQL-sætning
SQLITE_LIMIT_FUNCTION_ARG Maksimalt antal funktionsargumenter
SQLITE_LIMIT_ATTACHED Maksimalt antal vedhæftede baser
SQLITE_LIMIT_LIKE_PATTERN_LENGTH Den maksimale længde af et mønster som argument til LIKE- eller GLOB-operatorerne
SQLITE_LIMIT_VARIABLE_NUMBER Det maksimale antal variabler i en SQL-sætning, der kan bindes
SQLITE_LIMIT_TRIGGER_DEPTH Maksimal trigger-rekursionsdybde

Dette kan være nyttigt, hvis SQLite bruges i webapplikationer , da reducerede grænser kan forhindre DoS-angreb fra eksterne klienter, der ikke er tillid til.

Brug

Selve SQLite-biblioteket er skrevet i C ; der er mange bindinger til andre programmeringssprog, inklusive Apple Swift, Delphi , C++ , Java , C# , VB.NET , Python , Perl , Node.js , PHP , PureBasic [12] , Tcl (Værktøjer til at arbejde med Tcl er inkluderet inkluderet med SQLite), Ruby , Haskell , Scheme , Smalltalk , Lua og Parser og mange flere. En komplet liste over eksisterende værktøjer er tilgængelig på projektsiden [13] .

Nemheden og bekvemmeligheden ved at indlejre SQLite har ført til, at biblioteket bliver brugt i browsere , musikafspillere og mange andre programmer.

SQLite bruges især i:

Mange programmer understøtter SQLite som et datalagringsformat (især på Mac OS og iOS , Android ), herunder:

Se også

Noter

  1. SQLite udgivelse 3.39.4 den 2022-09-29 - 2022.
  2. sqlite Open Source-projektet på Open Hub: Languages-side - 2006.
  3. https://www.sqlite.org/copyright.html
  4. " Hvorfor SQLite lykkedes som database - Richard Hipp, skaberen af ​​SQLite ". Ændringsloggen . Afsnit 201. Begivenheden finder sted kl. 00:17:25. Jeg siger SQL-ite, som et mineral."
  5. D. Richard Hipp (oplægsholder). En introduktion til SQLite (video). Google Inc. Tid fra kildestart: 00:01:14. "[...]ess-kju-ellite [...]"
  6. D. Richard Hipp (oplægsholder). En introduktion til SQLite . Google Inc.. Tid fra kildestart: 00:48:15. "[...]efterfølger [...]"
  7. Google-O'Reilly Open Source Awards - Hall of Fame - Google Code . Hentet 5. marts 2010. Arkiveret fra originalen 11. juli 2011.
  8. Arkiveret kopi (link ikke tilgængeligt) . Hentet 11. marts 2019. Arkiveret fra originalen 13. februar 2019.    (Engelsk)
  9. Implementeringsgrænser for SQLite . Hentet 23. november 2018. Arkiveret fra originalen 8. januar 2019.
  10. Arkiveret kopi (link ikke tilgængeligt) . Hentet 11. marts 2019. Arkiveret fra originalen 10. marts 2019.    (Engelsk)
  11. Implementeringsgrænser for SQLite . Hentet 8. december 2021. Arkiveret fra originalen 7. november 2021.
  12. BrugSQLiteDatabase()-funktionen . Hentet 28. september 2013. Arkiveret fra originalen 2. oktober 2013.
  13. Liste over SQLite-bindinger til andre sprog (downlink) . Hentet 4. april 2007. Arkiveret fra originalen 5. februar 2009. 
  14. sqlite-manager - Projekthosting på Google Code . Hentet 5. marts 2010. Arkiveret fra originalen 9. februar 2010.
  15. Skype-klient ved hjælp af SQLite? (utilgængeligt link) . Hentet 7. maj 2010. Arkiveret fra originalen 28. september 2014. 
  16. sqlite1c - Projekthosting på Google Code . Hentet 5. august 2008. Arkiveret fra originalen 12. april 2009.
  17. Hvordan vi forbedrede registreringsloggen . 1C (29. oktober 2013). Hentet 1. juli 2014. Arkiveret fra originalen 27. august 2014.
  18. dbRW Database Driver 1.2 Arkiveret 1. maj 2011.

Links