SQLite | |
---|---|
Típusú | szerver nélküli relációs adatbázis-kezelő rendszer [d] |
Fejlesztő | Richard Hipp [d] |
Beírva | C [2] |
Operációs rendszer | platformközi |
Első kiadás | 2000. augusztus |
legújabb verzió |
|
Olvasható fájlformátumok | SQLite adatbázis fájlformátum [d] , SQLite 3.x adatbázis [d] és SQLite rollbak napló [d] |
Generált fájlformátumok | SQLite adatbázis fájlformátum [d] , SQLite 3.x adatbázis [d] , SQLite Zipvfs tömörített adatbázis [d] és SQLite rollbak napló [d] |
Engedély | 🅮 [d] [3] |
Weboldal | sqlite.org _ |
Médiafájlok a Wikimedia Commons oldalon |
Az SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ aɪ t / , [4] [5] / ˈ s iː k w ə ˌ la aɪ t / [6] ) egy kompakt beágyazott DBMS . A könyvtár forráskódja nyilvánosságra került . 2005 -ben a projekt elnyerte a Google-O'Reilly Open Source Awards díjat [7] .
Az "embedded" ( eng. embedded ) szó azt jelenti, hogy az SQLite nem használja a kliens-szerver paradigmát , vagyis az SQLite motor nem egy különálló munkafolyamat, amellyel a program interakcióba lép, hanem egy könyvtár , amelyhez a program kapcsolódik. , és a motor a programok szerves részévé válik. Így az SQLite könyvtár függvényhívásait ( API ) használják csereprotokollként. Ez a megközelítés csökkenti az általános költségeket, a válaszidőt és leegyszerűsíti a programot. Az SQLite a teljes adatbázist (beleértve a definíciókat, táblákat, indexeket és adatokat) egyetlen szabványos fájlban tárolja azon a gépen, amelyen a program fut. A megvalósítás egyszerűsége annak köszönhető, hogy az írási tranzakció végrehajtásának megkezdése előtt az adatbázist tároló teljes fájl blokkolva van; Az ACID funkciók többek között naplófájl létrehozásával érhetők el.
Egyidejűleg több folyamat vagy szál is képes gond nélkül kiolvasni az adatokat ugyanabból az adatbázisból. Az adatbázisba csak akkor lehet írni, ha jelenleg nincs más kérés kiszolgálása; ellenkező esetben az írási kísérlet meghiúsul, és a program egy hibakódot küld vissza. Az események fejlesztésének másik lehetősége a rögzítési kísérletek automatikus megismétlése egy meghatározott időintervallumon belül.
A csomag egy funkcionális kliens részt is tartalmaz egy végrehajtható sqlite3 fájl formájában , amely bemutatja a fő könyvtár funkcióinak megvalósítását. Az ügyfél rész egy többplatformos parancssori segédprogram .
Az SQLite beágyazott rendszereken és dedikált, gigabájtos adattömbökkel rendelkező gépeken egyaránt használható.
Az SQLite támogatja a dinamikus adatbevitelt. A lehetséges értéktípusok: INTEGER, REAL, TEXTés BLOB. A speciális érték szintén támogatott NULL. [nyolc]
A TEXT és BLOB értékek méretét semmi sem korlátozza, kivéve SQLITE_MAX_LENGTHaz SQLite forrásokban egy milliárdnak megfelelő állandót (10 9 ) [9] .
Bármely rekord bármely mezőjében minden érték a fenti típusok bármelyikébe tartozhat, függetlenül a tábla mezőinek deklarálásakor megadott típustól. A mező deklarálásakor megadott típust a rendszer referenciaként tárolja az eredeti írásmódjában, és alapul szolgál a preferenciák kiválasztásához (úgynevezett "típusaffinitás": ez a megközelítés ritkán található meg más DBMS-ekben) implicit típuskonverziók végrehajtásakor. ennek a típusnévnek az SQLite-ban ismert bármihez való hasonlósága alapján. Ez az algoritmus kiterjedt listát tartalmaz a más DBMS-ekben alkalmazott adattípusnevek változatairól. Ha egy írási értéket nem lehet biztonságosan átalakítani a preferált típusra, az SQLite az értéket az eredeti formájában írja ki. Ahhoz, hogy értékeket kapjunk az adatbázisból, mindegyik típushoz számos függvény tartozik, és ha a tárolt érték típusa nem egyezik a kért értékkel, akkor lehetőség szerint át is konvertáljuk. [tíz]
Az SQLite régi verzióit megkötés nélkül tervezték, csak az volt a feltétel, hogy az adatbázis elférjen a memóriában, amelyben minden számítás 32 bites egész számokkal történt. Ez bizonyos problémákat okozott. Mivel a felső határértékek nincsenek meghatározva és megfelelően tesztelve, gyakran találtak hibákat az SQLite meglehetősen szélsőséges körülmények között történő használatakor. Ezért az SQLite újabb verziói korlátokat vezettek be, amelyeket most az általános tesztkészlettel együtt ellenőriznek.
Az SQLite könyvtár fordítása során a következő korlátok kerülnek beállításra, amelyek szükség esetén növelhetők:
Leírás | Jelentése | Állandó a forráskódban |
---|---|---|
Egy karakterlánc vagy BLOB mező maximális hossza | 1 000 000 000 | SQLITE_MAX_LENGTH |
Az oszlopok maximális száma | 2000 | SQLITE_MAX_COLUMN |
Egy SQL utasítás maximális hossza | 1 000 000 000 | SQLITE_MAX_SQL_LENGTH |
A táblák maximális száma a JOIN funkcióval rendelkező kifejezésekben | 64 | |
Kifejezési fa maximális mélysége | 1000 | SQLITE_MAX_EXPR_DEPTH |
A függvény argumentumainak maximális száma | 127 | SQLITE_MAX_FUNCTION_ARG |
A kifejezések maximális száma a SELECT funkcióval kombinált kifejezésben | 500 | SQLITE_MAX_COMPOUND_SELECT |
A minta maximális hossza a LIKE vagy a GLOB operátorok argumentumaként | 50 000 | SQLITE_MAX_LIKE_PATTERN_LENGTH |
Helyőrző karakterek maximális száma egy SQL utasításban | 999 | SQLITE_MAX_VARIABLE_NUMBER |
Maximális trigger rekurziós mélység | 1000 | SQLITE_MAX_TRIGGER_DEPTH |
Maximális számú csatlakoztatott alap | tíz | SQLITE_MAX_ATTACHED |
Az adatbázis maximális oldalmérete | 65 536 | SQLITE_MAX_PAGE_SIZE |
Oldalak maximális száma egy adatbázisfájlban | 1 073 741 823 | SQLITE_MAX_PAGE_COUNT |
A 3.37.0 verziótól kezdve az SQLITE_MAX_PAGE_SIZE érték nem lehet nagyobb, mint az alapértelmezett érték, amely kifejezetten szerepel a forráskódban. Az adatbázis maximális oldalszáma 4294967294. Így az adatbázis maximális mérete 1,4e+14 bájt (281 decimális terabájt vagy 256 TiB ). [tizenegy]
Néhány korlát lefelé módosítható futás közben egy kategória és az sqlite3_limit() függvény megfelelő értékének megadásával :
int sqlite3_limit ( sqlite3 * , int id , int newVal )Kategória | Leírás |
---|---|
SQLITE_LIMIT_LENGTH | Bármely karakterlánc vagy BLOB mező vagy sor maximális hossza |
SQLITE_LIMIT_SQL_LENGTH | Maximális SQL utasítás hossza |
SQLITE_LIMIT_COLUMN | Oszlopok maximális száma egy táblázatdefinícióban, vagy válassza ki az eredményt vagy indexet vagy kifejezéseket ORDER BY vagy GROUP BY záradékkal |
SQLITE_LIMIT_EXPR_DEPTH | Bármely kifejezés elemzett fa maximális mélysége |
SQLITE_LIMIT_COMPOUND_SELECT | A kifejezések maximális száma a SELECT funkcióval kombinált kifejezésben |
SQLITE_LIMIT_VDBE_OP | Egy végrehajtható SQL utasítás virtuálisgép -program utasításainak maximális száma |
SQLITE_LIMIT_FUNCTION_ARG | A függvény argumentumainak maximális száma |
SQLITE_LIMIT_ATTACHED | Maximális számú csatlakoztatott alap |
SQLITE_LIMIT_LIKE_PATTERN_LENGTH | A minta maximális hossza a LIKE vagy a GLOB operátorok argumentumaként |
SQLITE_LIMIT_VARIABLE_NUMBER | Egy SQL-utasításban a köthető változók maximális száma |
SQLITE_LIMIT_TRIGGER_DEPTH | Maximális trigger rekurziós mélység |
Ez hasznos lehet, ha az SQLite-ot webalkalmazásokban használják , mivel a csökkentett korlátok megakadályozhatják a nem megbízható külső ügyfelektől érkező DoS-támadásokat .
Maga az SQLite könyvtár C nyelven van írva ; számos kötés létezik más programozási nyelvekhez, köztük Apple Swift, Delphi , C++ , Java , C# , VB.NET , Python , Perl , Node.js , PHP , PureBasic [12] , Tcl (a Tcl-lel való munkavégzéshez szükséges eszközöket a csomag tartalmazza SQLite-tal), Ruby , Haskell , Scheme , Smalltalk , Lua és Parser , és még sok más. A meglévő eszközök teljes listája elérhető a projekt oldalán [13] .
Az SQLite beágyazásának egyszerűsége és kényelme oda vezetett, hogy a könyvtárat böngészőkben , zenelejátszókban és sok más programban használják.
Az SQLite-t különösen a következőkben használják:
Számos program támogatja az SQLite-ot adattárolási formátumként (különösen Mac OS és iOS , Android rendszeren ), többek között:
Adatbázis-kezelő rendszerek (DBMS) | |
---|---|
Kliens-szerver | |
Motorok | |
Fájlszerver |
Adatbázis | |
---|---|
Fogalmak |
|
Objektumok |
|
Kulcsok | |
SQL |
|
Alkatrészek |