SQLite — server jarayonini talab qilmaydigan, relatsion ma’lumotlar bazasi imkoniyatlarini dastur ichiga kutubxona sifatida joylaydigan ochiq kodli tizimdir. Database odatda bitta faylda saqlanadi, ilova esa SQLite API orqali shu faylni bevosita o‘qiydi va yozadi. U mobil ilova, desktop dastur, brauzer, embedded qurilma va lokal test muhitlarida keng qo‘llanadi.
Serverless arxitektura
Client-server databasega ulanishda alohida MySQL yoki PostgreSQL serveri so‘rovni bajaradi. SQLite’da SQL parser, query planner, storage va transaction log ilova processi ichida ishlaydi. Tarmoq protokoli va server konfiguratsiyasi yo‘q. Database faylini ko‘chirish ma’lumotni boshqa muhitga olib o‘tishning sodda usuli bo‘lishi mumkin.
Bu “cloud server ishlatmaydi” degani emas. Ilova serverda ishlasa, SQLite fayli ham server storageida turadi. Muhim farq — database engine alohida service emas.
Type tizimi
SQLite dynamic typing va type affinity modelidan foydalanadi. Ustunga e’lon qilingan type qiymatni qaysi storage classga o‘tkazishga urinishni belgilaydi, ammo klassik qat’iy database kabi har doim bitta tur bilan cheklamaydi. Storage classlar NULL, INTEGER, REAL, TEXT va BLOBdan iborat.
STRICT table rejimi yangi versiyalarda qat’iyroq type tekshiruvi beradi. Sana va boolean uchun alohida storage class yo‘q; ular kelishilgan integer yoki text formatda saqlanishi mumkin. Ilova bir xil formatni izchil ishlatishi kerak.
Tranzaksiya va jurnal
SQLite ACID tranzaksiyalarni qo‘llab-quvvatlaydi. Rollback journal eski sahifalarni saqlab, xatoda bazani qaytaradi. Write-Ahead Logging rejimida yozuvlar alohida WAL fayliga tushadi; readerlar eski snapshotni o‘qiyotganda writer ishlashi mumkin.
Bir database fayliga ko‘plab reader parallel murojaat qilishi mumkin, ammo yozuvlar amalda seriallashtiriladi. Uzoq write transaction boshqa writerlarni kutdiradi. busy_timeout lock bo‘shashini ma’lum muddat kutishga imkon beradi, lekin yomon transaction dizaynini tuzatmaydi.
Foydalanish chegaralari
SQLite lokal, o‘rtacha yozuvli va bitta host doirasidagi vazifa uchun qulay. Ko‘p application server bir xil faylni network filesystem orqali yozishi lock hamda ishonchlilik muammosi keltirishi mumkin. Yuqori parallel write, markaziy permission boshqaruvi yoki murakkab replikatsiya talabida client-server database mosroq bo‘ladi.
Database faylining maksimal imkoniyati katta bo‘lishi mumkin, ammo amaliy chegara storage, backup va query xususiyatiga bog‘liq. “Kichik database” va “SQLite” aynan bir tushuncha emas.
Xavfsizlik va backup
SQLite o‘zida tarmoq foydalanuvchisi yoki GRANT tizimini bermaydi. Kirish huquqi database faylining operatsion tizim permissionlari va ilova orqali boshqariladi. Fayl nusxasini olishda faol write bilan izchillik hisobga olinadi; online backup API yoki SQLite backup buyruqlari xavfsiz snapshot yaratadi.
SQL parametrizatsiyasi boshqa bazalardagi kabi injectiondan himoya qiladi. Database lokal bo‘lgani ishonchsiz kiritmani xavfsiz qilmaydi. Maxfiy ma’lumot uchun qurilma storage himoyasi yoki mos shifrlash yechimi alohida talab etiladi.
Query planner va indeks
SQLite EXPLAIN QUERY PLAN orqali jadval skani yoki indeks qidiruvini ko‘rsatadi. Composite indeksning chapdagi ustunlari filterga mos bo‘lsa samarali ishlaydi. Keraksiz indekslar fayl hajmi va har write narxini oshiradi. ANALYZE statistika yig‘ib plannerga variant tanlashda yordam beradi. Foreign key enforcement ulanish uchun alohida yoqilishi talab qilinadigan muhitlar bo‘lishi mumkin; ilova har connectionda kutilgan pragma sozlamalarini tekshiradi. VACUUM database faylini qayta qurib bo‘sh joyni qaytarishi mumkin, ammo qo‘shimcha disk va vaqt talab qiladi. Oddiy DELETE fayl hajmini darhol kamaytirmasligi normal holatdir.
Bog‘liq tushunchalar
SQL, embedded database, transaction, WAL, database file, ACID, query planner