Sqlite és php, sqlite

Az utóbbi időben talán hallott már egy új kiterjesztés a PHP-ről: az SQLite. Sok oka van annak, hogy az SQLite a legjobb eredménynek tűnhet, mivel megtanulta kenyér vágását. Az SQLite egy szilárd SQL felületet kínál egy nem relációs adatbázis számára, és elegáns alternatívát teremt más adatbázisok nehézkes interfészeivel anélkül, hogy feláldozná a funkcionalitást vagy a sebességet, ahogy az elvárható. Nézzük meg ezt a csodálatos kiterjesztést a cikkben, és remélhetőleg tudjuk megerősíteni azokat az előnyöket, amelyekről esetleg hallottál.

Mi az SQLite?

Az SQLite olyan beágyazott könyvtár, amely az SQL 92 nagy részét hajtja végre, a hírnévre való törekvés pedig maga a tényleges adatbázis-motor, annak interfésze (vagy inkább a motorja) egy könyvtáron belül, és az összes adat tárolása egy fájlban. Az SQLite funkció helyét a MySQL és a PostgreSQL között helyeztem el. A gyakorlatban azonban az SQLite ritkán 2-3 alkalommal (és még több) gyorsabb. Ez a nagyon rendezett belső architektúra és a kiszolgáló-kliens és az ügyfél-kiszolgáló kapcsolatok szükségességének kiküszöbölése miatt lehetséges.

Mindez egyetlen csomagban összeszerelve csak kicsit nagyobb, mint a MySQL könyvtár kliens része, ez egy teljes értékű adatbázis. Erősen hatékony infrastruktúra használatával az SQLite képes arra, hogy egy kis mennyiségű memóriát használjon rá, sokkal kisebb, mint bármely más adatbázisrendszerben. Ez teszi az SQLite-t egy nagyon kényelmes eszközré, amely képes szinte bármilyen, az adatbázishoz rendelt feladatot felhasználni.

Mit kell az SQLite-től?

A sebesség és a hatékonyság mellett az SQLite számos más előnye, hogy ideális megoldás sok feladat elvégzésére. Mivel az SQLite adatbázis lényegében rendes fájlokat igényel, nincs szükség további adminisztrációs eszközökre, amelyek sok időt igényelnek ahhoz, hogy komplex hozzáférési jogszerkezetet hozzanak létre a felhasználói adatbázisok védelmére. Mindezeket már automatikusan támogatja a hozzáférési jogok szervezése a fájlrendszerben, ez azt is jelenti (a térbeli korlátozási területen), hogy nincsenek különleges szabályok a felhasználó lemezterületének nyomon követéséhez. A felhasználók számára az előnye, hogy lehetősége van arra, hogy annyi adatbázisot hozzanak létre, amennyit csak akarnak, valamint abszolút irányítást biztosítanak ezeken az adatbázisokon.

Az a tény, hogy az adatbázis az egyetlen fájl, könnyen hordozhatóvá teszi. Az SQLite szintén kiküszöböli a további démonok futtatását, amelyek jelentős mennyiségű memóriát és egyéb erőforrásokat "elfogynak", még akkor is, ha az adatbázis mérsékelten használható.

A legfrissebb DB kiterjesztésnek köszönhetően az SQLite-nek szerencséje volt, hogy mentes a visszafelé kompatibilis kódtól, ellentétben a régebbi kiterjesztésekkel, mint a MySQL. amelyek az elavult funkcionalitás megőrzéséhez szükségesek a visszamenőleges kompatibilitás miatt. Ez azt is lehetővé teszi, hogy az új bővítmény a legfrissebb fejlesztéseket használja a PHP-ben a legmagasabb szintű teljesítmény és funkcionalitás elérése érdekében. A fejlesztők könnyebbé tették a felhasználók számára, hogy olyan kiterjesztést hozzanak létre, amely egyszerűen navigálhat más adatbázisrendszerektől, így a felület hasonló a PHP-ben már megvalósított felülethez.

Az SQLite egy rugalmas mechanizmust is támogat az adatbázis-erőforrások átvitelére az eljárási interfészekhez, így ugyanúgy könnyű áttérni a MySQL-ről, ahol az erőforrás elmúlt, és a PostgreSQL-t, ahol először átadják.

Az SQLite olyan hatékony objektum-orientált felületet is tartalmaz, amely hatékonyan kihúzhatja az adatokat az adatbázisból, így nincs szükség arra, hogy a saját héját végrehajtsuk egy eljárási felülethez. Amint az alábbi példában látható, az objektum-orientált felület lehetővé teszi, hogy elkerülje az összes forrás átvitelét egy halomba.

A PHP 5.0-ban az SQLite telepítésének sajátos sajátossága van, hiszen mind a kiterjesztés, mind a könyvtár össze van kapcsolva, így mindössze annyit kell tennie, hogy a konfigurációs sorban add -with-sqlite. Még mindig javaslom az SQLite telepítését, de csak akkor, ha egy összeállított bináris fájl, amely lehetővé teszi az adatbázis megnyitását és a PHP használata nélkül történő kezelését. Ez nagyon hasznos a különböző egyidejű parancsok hibakeresésére és végrehajtására, valamint hasznos a lekérdezési kód teszteléséhez. A jövőben elég gyakran találja meg, hogy a kapcsolódó SQLite könyvtár egy kicsit "elavult", így egy csomó PHP egy külső könyvtárral lehetővé teszi, hogy kihasználja az SQLite legfrissebb javításait és innovációit. Ez lehetővé teszi az SQLite jövőbeli frissítését a PHP újrafordítása nélkül is.

Az SQLite kiterjesztés külső könyvtárként történő létrehozásához egyszerűen használd a -with-sqlite = / path / to / lib / parancsot.

Azt is meg kell említenem, hogy az SQLite kiterjesztés kimerítő tesztsorozaton halad át, mind az objektumorientált, mind az eljárási interfészeken. Minden egyes funkciót megvizsgálunk, és minden egyes eljárást az SQLite támogat. Ez nemcsak az egyes módszerek és az egyes SQLite függvények működésének, hanem a várt kimenetnek is kiváló példája, amely lehetővé teszi az egyes műveletek végeredményének megtekintését.

Az SQLite eljárási felülete majdnem ugyanaz, mint a MySQL és más adatbázis-kiterjesztések. Az SQLite-re való áttérés többnyire csak a mysql / pq / etc ... függvény módosítását igényli az sqlite függvényfüggvényre.

Az SQLite és más adatbázisok között ténylegesen jelentős eltérések vannak a motorban. Az SQLite többi adatbázisával ellentétben nincs kötődés a típusokhoz; minden adat NULL karakterrel végződő karakterláncként tárolódik, ami jobb, mint a speciális típusú oszlopok bináris ábrázolása. A kompatibilitás miatt az SQLite továbbra is támogatja a CREATE TABLE konstrukciók specifikációját, például INT, CHAR, FLOAT, TEXT és hasonlók, de ténylegesen nem használja őket. Az adatbázisban az SQLite csak a sztring és az egész szám között különbözteti meg a sort. Ezért, ha nem rendezi az adatokat, akkor az SQLite tábláinak létrehozásakor különleges típusú mezők megadása nélkül teheti meg.

"Az out-of-the-box jelleg" Az SQLite valamilyen módon lassabban rendezi és illeszkedik az adatokhoz, mert minden alkalommal, amikor az SQLite kénytelen lesz meghatározni az adattípust, és alkalmazza a string sorting / comparison mechanizmust vagy a numerikus egységet. Az SQL táblázatok gyakran szükségessé teszik az automatikusan hozzárendelt kulcsot a gyors hozzáférést a cellákhoz, azaz az utolsó hozzáadott cellához való hivatkozást. Az SQLite számára ez a szintaxis haszontalan, enyhén szólva. Egy ilyen táblázat létrehozásához a mezőt INTEGER PRIMARY KEY-nak kell deklarálnia, amely kényelmesebb, mint egy speciális típus megadása vagy további tulajdonságok hozzárendelése, amelyek azt jelzik, hogy a mező automatikusan növekszik.

Az SQLite számos új funkcióval rendelkezik, amelyek javítják a teljesítményt és bővítik a funkciókat. Az egyik ilyen jellemző az a képesség, hogy olyan lekérdezéseket hajthasson végre, amelyek több lekérdezés végrehajtásával járnak, egy lekérdezés végrehajtásával. Ez csökkenti a PHP függvények számát, és ezáltal növeli a forgatókönyv sebességét. Ezenkívül lehetővé teszi, hogy könnyen csoportosíthasson lekérdezési blokkokat az ügyletekben, és javíthatja a végrehajtást a jövőben. Ez a lehetõség jelentõs tényezõ lehet az adatbázisba való többszörös megkeresések végrehajtása során. Azonban számos piquant funkció létezik, amelyet nem szabad megfeledkezni.

Ha az SQLite bármelyik lekérdezése valami olyat használ, amelyet a felhasználó közvetlenül bead, akkor további óvintézkedéseket kell tennie ennek a bemenetnek a teszteléséhez a nem kívánt lekérdezés leállításához. A MySQL-sel ellentétben, ahol ez csak félreértést okozhat az adatbázis lekérdezése és hiba elhárítása során, az SQLite-ben ez lehetővé teszi a támadó számára, hogy bizonyos lekérdezést végezzen a kiszolgálón, amely katasztrofális következményekkel járhat. Ha rekordokat ad hozzá a lekérdezési blokkhoz és egy azonosítót szeretne visszaadni, akkor a sqlite_last_insert_rowid () jó feladatot fog végrehajtani a feladatnál, de csak az utolsó rekord azonosítóját adja vissza. Másrészt, ha megpróbáljuk meghatározni, hogy hány cellát cseréltek sqlite_changes () segítségével, akkor az összes lekérdezéssel megváltoztatott összes sejtet tartalmazó eredményt kapjuk. Ha a lekérdezési blokk tartalmaz SELECTet, győződjön meg róla, hogy ez a legelső lekérdezés, ellenkező esetben a végső kiválasztás nem fogja tartalmazni a lekérdezés által visszaküldött cellákat.

Új belső jellemzői mellett az SQLite számos olyan új funkciót kínál, amelyek egyszerűsítik és felgyorsítják az adatok adatbázisból történő kitermelését.

Ez lehetővé teszi, hogy lekérdezést hajtson végre és egyetlen funkcióhívással lekérdezze az adatokat, eltörölve a PHP minden felesleges munkáját. Maga a PHP szkript egyszerűsített, csak egy függvény használatával, különben számos funkciót kell használni a hurokban dolgozó adatok lekéréséhez. Azokban az esetekben, amikor csak egy oszlop eredményét adják vissza, akkor használhat sqlite_single_query () parancsot, amely azonnal visszaad egy sorból vagy egy sor sorból, attól függően, hogy hány cellából származik az információ kivonása.

Mint más funkciók is, használhatja, de nem szabad visszaélni vele. Az összes adat mintavételezésénél egy egylépcsős lekérdezés esetén emlékezni kell arra, hogy az összes eredmény a memóriában tárolódik. Ha a minta eredménye nagy mennyiségű adatot tartalmaz, akkor a memória költségei minden bizonnyal elutasítják a funkcióhívások számának csökkentéséből származó előnyöket. Ezért ezeket a funkciókat csak kis mennyiségű adat mintavételezéséhez kell fenntartania.

Iterátorok az SQLite-ben

A PHP 5.0-ban van egy másik módja az adatok lekérdezésének lekérdezéséhez az iterátorok használatával.

Ha egy hurok eredményt kap, ugyanúgy működik, mint egy hurok áthalad egy hurokon a foreach () alatt, kivéve, hogy ebben az időben nincs hozzáférése a kulcsokhoz és az érték olyan tömb, amely adatokat tartalmaz speciális cellákban. Mivel az iterátorok nem funkciók, hanem belső mutatók a motoron belül, sokkal kevesebb erőforrást igényelnek, mint az sqlite_fetch _ * () függvények, és nem követelik meg, hogy az eredményeket tárolják a memóriában. A végeredmény rendkívül gyors lesz, egyszerűbb és könnyebben elérhető adateladási módszer. Nincsenek mellékhatásai az objektum iterátorok SQLite-ben történő használatában, és ha csak több sor formájában szeretnél eredményt elérni, akkor erre a lehetőségre emlékezned kell.

Az SQLite számos olyan kiegészítő funkciót is megkülönbözteti, amelyek hasznosak lehetnek az adatbázis használatakor. Az egyik ilyen függvény, az sqlite_num_fields (), felhasználható az oszlopok számának meghatározására speciális mintaeredményekben. Alternatív megoldásként, ha ki szeretné bontani az adatokat, csak a count () értéket használja az első eredményhez, amely ugyanazt a számot kapja vissza. Ha mind a karakterláncot, mind a számbillentyűket kivonjuk, akkor el kell különíteni az eredményt, mivel a megjelenő tömbben annyi előfordulás lesz, amilyen a táblázatban van. Ez a szám lehet fontos, ha a szkriptnek meg kell adnia a mezők nevét egy adott táblán belül. Ebben az esetben az sqlite_field_name () egy hurokban használható az információ eléréséhez, amint az az alábbi példában látható.

Természetesen nem ez az ideális módja annak, hogy a nevét az oszlopok a táblázatban, egyszerűen az a tény, hogy ez nem fog sikerülni, ha a táblázat nem tartalmaz egyetlen sejt, valamint az a tény, hogy ez lesz szükség, hogy adatokat lekérdezni, hogy ne használja . Egy sokkal jobb megoldás, ha sqlite_fetch_column_types () függvény, amely megkapja az oszlopok együtt típusok a táblázatban függetlenül attól, hogy vannak adatok, vagy sem.

A legtöbb esetben a memória használatának vagy használatának okán nem kívánja használni a gyorsítótárazás nélküli lekérdezéseket. Ez kis mértékű funkcionalitásvesztést eredményezhet, amely esetekben szükség lehet arra, hogy a gyorsítótár nélküli kérések nem mindig a legjobb választás.

Tegyük fel például, hogy szeretné megtudni a lekérdezés által kiválasztott cellák tényleges számát. A gyorsítótár nélküli lekérdezésben minden egyes cellát meg kell vizsgálnia, mielőtt meghatározható. A gyorsítótárazott lekérdezések könnyebbek az sqlite_num_rows () függvénnyel, amely könnyen megkapja ezt az információt a kiválasztás eredményétől. A gyorsítótárazás nélküli lekérdezések szintén korlátozottak a közvetlen adatkeresés során, azaz az összes cellából származó adatokat egyetlen adatban kell kiválasztani. A gyorsítótárazott lekérdezésekben nincs ilyen korlátozás, akkor az sqlite_seek () segítségével bármely cellára ugorhat és adatokat gyűjthet le, vagy akár a sejtekhez fordított sorrendben is elérheti, ha szükséges.

Az egyik legérdekesebb tulajdonság az, hogy az SQLite kiterjesztés egy táblázatot nyújt az SQL-ben használt saját funkciók létrehozására. Ez azért lehetséges, mert az SQLite egy könyvtárban tartalmaz egy PHP-hez kapcsolódó felületet, valamint magát az adatbázismotort. Az sqlite_create_function () használatával olyan funkciókat hozhat létre, amelyek később alkalmazhatók a kiválasztás eredményére vagy bármely WHERE záradékon belül.

A PHP in SQL használatának lehetősége lehetővé teszi, hogy egyszerűsítse ezt a szkriptet, így elérhetővé válik egy nagyobb közönség számára a fejlesztők számára. Ez lehetővé teszi, hogy a PHP-t mint sablonmotort használja, amely HTML-kódot helyez az adatbázishoz. Sok esetben ez egyszerűsítheti a kódot, így nincs szükség további sablonmotor használatára. A kód egyszerűsítése mellett javítja a program végrehajtását is, és csökkenti a memória memóriájának költségeit, mivel nincs hatása a felhasználói térben lévő adatokkal.

Ne felejtsük el, hogy ha az adatok dolgozik együtt, tartalmazhatnak bináris kód, akkor használja sqlite_udf_decode_binary () függvény átalakítani a belső kódolás, ahol ezek tárolják az SQLite, mielőtt dolgozni velük. Ha igen, akkor a sqlite_udf_encode_binary () segítségével bináris adatokat kell kódolni annak biztosítása érdekében, hogy a következő alkalommal, amikor elérte őket, az adatok nem sérülnek meg.

Most, ha megnézzük, hogy működik-e az SQLite, és mit kínál, akkor figyeljen rá a jelenlegi vagy jövőbeli alkalmazásaiban. Remélem, hogy ez a rövid áttekintés némi betekintést nyújt az SQLite funkcionalitásába, és nem hagyta el semmit, amit jól hallottál róla.

Mint bármely eszköz, az SQLite-nek is van erőssége és gyengesége. Mivel ideális megoldás a kis és / vagy leginkább adatokkal olvasható alkalmazásokhoz, nem alkalmas nagyszámú alkalmazásokra, amelyek gyakran írnak az adatbázisba. Ez a korlátozás annak a következménye, hogy az SQLite architektúrája egyetlen fájlon alapul, amely nem biztosítja az adatok ismételt létrehozására, és írási zárat is alkalmaz.