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 iː k w ə ˌ la aɪ 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] .
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 på tværs af platforme .
SQLite kan bruges både på indlejrede systemer og på dedikerede maskiner med gigabyte dataarrays.
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]
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.
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:
Databasestyringssystemer (DBMS) | |
---|---|
Klient-server | |
Motorer | |
Filserver |
Database | |
---|---|
Begreber |
|
Objekter | |
Nøgler | |
SQL | |
Komponenter |