SQLite

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 9 maj 2022; kontroller kräver 52 redigeringar .
SQLite
Sorts serverlöst relationsdatabashanteringssystem [d]
Utvecklaren Richard Hipp [d]
Skrivet i C [2]
Operativ system plattformsoberoende
Första upplagan augusti 2000
senaste versionen
Läsbara filformat SQLite databas filformat [d] , SQLite 3.x databas [d] och SQLite rollbak journal [d]
Genererade filformat SQLite databas filformat [d] , SQLite 3.x databas [d] , SQLite Zipvfs komprimerade databas [d] och SQLite rollbak journal [d]
Licens 🅮 [d] [3]
Hemsida sqlite.org
 Mediafiler på Wikimedia Commons

SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ aɪ t / , [4] [5] / ˈ s k w ə ˌ la t / [6] ) är en kompakt inbäddad DBMS . Källkoden för biblioteket har släppts till allmän egendom . 2005 fick projektet Google-O'Reilly Open Source Awards [7] .

Enhet

Ordet "embedded" ( eng.  embedded ) betyder att SQLite inte använder klient-server- paradigmet , det vill säga att SQLite -motorn inte är en separat arbetsprocess som programmet interagerar med, utan är ett bibliotek som programmet är länkat till. , och motorn blir en integrerad del program. Sålunda används funktionsanrop ( API ) i SQLite-biblioteket som utbytesprotokoll. Detta tillvägagångssätt minskar overhead, svarstid och förenklar programmet. SQLite lagrar hela databasen (inklusive definitioner, tabeller, index och data) i en enda standardfil på maskinen där programmet körs. Enkel implementering uppnås på grund av det faktum att innan exekveringen av skrivtransaktionen påbörjas blockeras hela filen som lagrar databasen; ACID- funktioner uppnås bland annat genom att skapa en loggfil.

Flera processer eller trådar kan samtidigt läsa data från samma databas utan problem. Att skriva till databasen kan endast göras om inga andra förfrågningar för närvarande betjänas; annars misslyckas skrivförsöket och en felkod returneras till programmet. Ett annat alternativ för utveckling av händelser är automatisk upprepning av inspelningsförsök inom ett angivet tidsintervall.

Paketet innehåller också en funktionell klientdel i form av en körbar sqlite3 -fil , som demonstrerar implementeringen av huvudbibliotekets funktioner. Klientdelen är ett kommandoradsverktyg för flera plattformar .

SQLite kan användas både på inbyggda system och på dedikerade maskiner med gigabyte datamatriser.

Datatyper

SQLite stöder dynamisk datainmatning. Möjliga värdetyper är INTEGER, REAL, TEXToch BLOB. Det speciella värdet stöds också NULL. [åtta]

Storleken på TEXT- och BLOB-värdena begränsas inte av någonting, förutom en konstant SQLITE_MAX_LENGTHi SQLite-källorna lika med en miljard (10 9 ) [9] .

Varje värde i vilket fält som helst i en post kan vara av vilken som helst av dessa typer, oavsett vilken typ som anges när tabellens fält deklareras. Typen som anges när ett fält deklareras lagras för referens i dess ursprungliga stavning och används som grund för att välja inställningar (så kallad "typaffinitet": detta är ett tillvägagångssätt som sällan finns i andra DBMS) när man utför implicita typkonverteringar baserat på likheten mellan detta typnamn och allt som är bekant med SQLite. Denna algoritm har en omfattande lista över varianter av datatypsnamn som praktiseras i andra DBMS. Om ett skrivvärde inte säkert kan konverteras till sin föredragna typ, skriver SQLite värdet i sin ursprungliga form. För att få värden från databasen finns det ett antal funktioner för var och en av typerna, och om typen av det lagrade värdet inte stämmer överens med det begärda, konverteras det också om möjligt. [tio]

Begränsningar

Gamla versioner av SQLite designades utan några begränsningar, det enda villkoret var att databasen fick plats i minnet, där alla beräkningar utfördes med 32-bitars heltal. Detta skapade vissa problem. Eftersom övre gränser inte har definierats och korrekt testats, har buggar ofta hittats när man använder SQLite under ganska extrema förhållanden. Därför introducerade nyare versioner av SQLite gränser som nu kontrolleras tillsammans med den allmänna testsviten.

Under kompileringen av SQLite-biblioteket ställs följande gränser in, som kan ökas vid behov:

Beskrivning Menande Konstant i källkoden
Maximal längd på en sträng eller BLOB- fält 1 000 000 000 SQLITE_MAX_LENGTH
Maximalt antal kolumner 2000 SQLITE_MAX_COLUMN
Maximal längd på en SQL- sats 1 000 000 000 SQLITE_MAX_SQL_LENGTH
Maximalt antal tabeller i uttryck med JOIN 64
Expressionsträd Maximalt djup 1000 SQLITE_MAX_EXPR_DEPTH
Maximalt antal funktionsargument 127 SQLITE_MAX_FUNCTION_ARG
Maximalt antal termer i ett kombinerat uttryck med SELECT 500 SQLITE_MAX_COMPOUND_SELECT
Den maximala längden på ett mönster som ett argument till LIKE- eller GLOB-operatorerna 50 000 SQLITE_MAX_LIKE_PATTERN_LENGTH
Maximalt antal platshållartecken i en SQL-sats 999 SQLITE_MAX_VARIABLE_NUMBER
Maximalt triggerrekursionsdjup 1000 SQLITE_MAX_TRIGGER_DEPTH
Maximalt antal anslutna baser tio SQLITE_MAX_ATTACHED
Maximal databassidastorlek 65 536 SQLITE_MAX_PAGE_SIZE
Maximalt antal sidor i en databasfil 1 073 741 823 SQLITE_MAX_PAGE_COUNT

Från och med version 3.37.0 kan SQLITE_MAX_PAGE_SIZE-värdet inte vara större än standardvärdet, vilket uttryckligen anges i källkoden. Det maximala antalet sidor i databasen är 4294967294. Den maximala storleken på databasen är alltså 1,4e+14 byte (281 decimal terabyte eller 256 TiB ). [elva]

Vissa gränser kan ändras nedåt under körning genom att ange en kategori och motsvarande värde för funktionen sqlite3_limit() :

int sqlite3_limit ( sqlite3 * , int id , int newVal )
Kategori Beskrivning
SQLITE_LIMIT_LENGTH Den maximala längden på en sträng eller BLOB-fält eller rad
SQLITE_LIMIT_SQL_LENGTH Maximal SQL-satslängd
SQLITE_LIMIT_COLUMN Maximalt antal kolumner i en tabelldefinition eller välj resultat eller index eller uttryck med ORDER BY eller GROUP BY-satser
SQLITE_LIMIT_EXPR_DEPTH Det maximala djupet för det analyserade trädet för ett uttryck
SQLITE_LIMIT_COMPOUND_SELECT Maximalt antal termer i ett kombinerat uttryck med SELECT
SQLITE_LIMIT_VDBE_OP Maximalt antal instruktioner för virtuella maskinprogram för en körbar SQL-sats
SQLITE_LIMIT_FUNCTION_ARG Maximalt antal funktionsargument
SQLITE_LIMIT_ATTACHED Maximalt antal anslutna baser
SQLITE_LIMIT_LIKE_PATTERN_LENGTH Den maximala längden på ett mönster som ett argument till LIKE- eller GLOB-operatorerna
SQLITE_LIMIT_VARIABLE_NUMBER Det maximala antalet variabler i en SQL-sats som kan bindas
SQLITE_LIMIT_TRIGGER_DEPTH Maximalt triggerrekursionsdjup

Detta kan vara användbart om SQLite används i webbapplikationer , eftersom reducerade gränser kan förhindra DoS-attacker från opålitliga externa klienter.

Användning

Själva SQLite-biblioteket är skrivet i C ; det finns många bindningar till andra programmeringsspråk, inklusive Apple Swift, Delphi , C++ , Java , C# , VB.NET , Python , Perl , Node.js , PHP , PureBasic [12] , Tcl (Verktyg för att arbeta med Tcl ingår med SQLite), Ruby , Haskell , Scheme , Smalltalk , Lua och Parser och många fler. En komplett lista över befintliga verktyg finns på projektsidan [13] .

Lättheten och bekvämligheten med att bädda in SQLite har lett till att biblioteket används i webbläsare , musikspelare och många andra program.

I synnerhet används SQLite i:

Många program stöder SQLite som datalagringsformat (särskilt på Mac OS och iOS , Android ), inklusive:

Se även

Anteckningar

  1. SQLite Release 3.39.4 Den 2022-09-29 - 2022.
  2. SQLite Open Source Project på Open Hub: Languages-sidan - 2006.
  3. https://www.sqlite.org/copyright.html
  4. " Varför SQLite lyckades som en databas - Richard Hipp, skapare av SQLite ". Ändringsloggen . Avsnitt 201. Händelsen inträffar klockan 00:17:25. Jag säger SQL-ite, som en mineral."
  5. D. Richard Hipp (presentatör). En introduktion till SQLite (video). Google Inc. Tid från källans start: 00:01:14. "[...]ess-kju-ellite [...]"
  6. D. Richard Hipp (presentatör). En introduktion till SQLite . Google Inc.. Tid från källans start: 00:48:15. "[...]uppföljare [...]"
  7. Google-O'Reilly Open Source Awards - Hall of Fame - Google Code . Hämtad 5 mars 2010. Arkiverad från originalet 11 juli 2011.
  8. Arkiverad kopia (länk ej tillgänglig) . Hämtad 11 mars 2019. Arkiverad från originalet 13 februari 2019.    (Engelsk)
  9. Implementeringsgränser för SQLite . Hämtad 23 november 2018. Arkiverad från originalet 8 januari 2019.
  10. Arkiverad kopia (länk ej tillgänglig) . Hämtad 11 mars 2019. Arkiverad från originalet 10 mars 2019.    (Engelsk)
  11. Implementeringsgränser för SQLite . Hämtad 8 december 2021. Arkiverad från originalet 7 november 2021.
  12. AnvändSQLiteDatabase()-funktionen . Hämtad 28 september 2013. Arkiverad från originalet 2 oktober 2013.
  13. Lista över SQLite-bindningar för andra språk (nedlänk) . Hämtad 4 april 2007. Arkiverad från originalet 5 februari 2009. 
  14. sqlite-manager - Projektvärd på Google Code . Hämtad 5 mars 2010. Arkiverad från originalet 9 februari 2010.
  15. Skype-klient som använder SQLite? (inte tillgänglig länk) . Hämtad 7 maj 2010. Arkiverad från originalet 28 september 2014. 
  16. sqlite1c - Projektvärd på Google Code . Hämtad 5 augusti 2008. Arkiverad från originalet 12 april 2009.
  17. Hur vi förbättrade registreringsloggen . 1C (29 oktober 2013). Hämtad 1 juli 2014. Arkiverad från originalet 27 augusti 2014.
  18. dbRW Database Driver 1.2 Arkiverad 1 maj 2011.

Länkar