Sqlite arxitekturasi
Sqlite bu yagona file’da ma’lumotlarni saqlay oluvchi mini RDBMS va u “SQL text"larni “bytecode"larga o’girib oladi va “virtual machine”da “bytecode"ni ishga tushirish orqali ishlaydi.
Ushbu rasmda sqlite’ni qanday ishlashi haqida qisqacha tushuncha olishingiz mumkin:
Interface
SQL buyruqlarini qabul qiluvchi qatlam bo’lib userga ko’rinadigan barcha narsani/result’ni shu yerga kiritishimiz mumkin. Asosiy componentlariga kiritishimiz mumkin:
- API functions: ma’lumotlar bazasiga ulanish, SQL buyruqlarini o’qish/bajarish/natijalarni olishni va h.k.z.
- Error handling: hosil bo’ladigan, kelib chiqadigan xatoliklarni boshqarish.
SQL command protsessor
Bu “SQL query"larni Virtual Machinega tayyorlashga yordam beruvchi qatlam. Uning o’zi yana bo’linadi:
Tokenizer:
SQL buyruqni kichkina token’larga bo’lakchalarga bo’lib chiqadi va bunda asosiy e’tibor yozilgan buyruqqa qaratiladi ortiqcha bo’shliq(whitespace)lar olib tashlanadi.
- Lexical Analysis: SQL buyruq uzun matn ko’rinishda kelsa bo’lakchalarga buyruqlarga bo’ladi
- Token Classification: Buyruqni turini qandaydir kalit so’zligini aniqlab beradi
- Handling Whitespace and Comments: Aytganimizdek keraksiz sharxlarni, bo’shliqlarni olib tashlaydi.
Keling endi bir misol ko’rsak. Bizda ushbu buyruq bor: SELECT name FROM users WHERE age > 21;
Tokenizer ushbu ko’rinishga keltirib oladi:
- SELECT (keyword)
- name (identifier)
- FROM (keyword)
- users (identifier)
- WHERE (keyword)
- age (identifier)
>
(operator)- 21 (literal)
Parser:
Tokenizer’dan kelgan natijani olib parse treega o’girib oladi. Vazifasi sintaksisni analiz qiladi va xatolik bo’lsa u haqida ma’lumot beradi.
Code generator:
Parserdan kelgan “parse tree"ni oladi. “Bytecode"ga o’girgan xolda amallarni bajaradi.
Misol tariqasida ushbu so’rovni ko’rsak: SELECT name FROM users WHERE age > 21;
users
nomli table’ni ochadi.age > 21
bo’yicha filter qiladi.- Filter bo’lgan ma’lumotlardan
name
ni ajratib oladi. - Natijani qaytaradi.
Virtual Machine (VM)
O’z nomi bilan machine yaratib oladi “bytecode"ni qabul qilib, amalda bajaradi. Quyi darajadagi barcha narsa kirish/chiqish kabilarni o’z qamroviga oladi.
B-Tree
B-Tree (Balanced Tree) bu ma’lumot tuzilmasi bo’lib asosan table va index’larni saqlashda ishlatiladi. Balanced muvozanatda bo’lganligi tufayli qidiruv, ma’lumot qo’shish va o’chirishni O(log n)da bajarish imkonini beradi.
Pager
Diskdan o’qib va yozish kabilarni havfsiz o’tishiga javob beradi ya’nikim ACID. Oxirgi kirish/chiqish amallarini cache’da saqlab qoladi, transaction’larni amalga oshirish kabilar shu qatlamda bo’ladi. Sinxron ishlash kerakli amallarni ketma-ketligiga shu qism javobgardir.
OS interface
Operatsion tizim darajasidagi amallarga javob beradi, resurslarni boshqaruvchi qatlam. File ochish/yopish kabilarga, xotirani boshqarishga, tizim darajasidagi xatoliklarni aniqlashga, amallarni turli operatsion tizimlarda to’g’ri ishlashiga shu qatlam javob beradi.
Utilities
Kichik vazifalarni bajaradigan barcha funksiyalar, kengaytmalar shu yerda bo’ladi.
Test Code
O’z nomi bilan testlarni qamrab oladi bunda biz yozgan code to’g’ri ishlayotgani, to’g’ri amallarni bajarayotganini yoki yo’qligini bilishga yordam beradi.
Sqlite hozirda open source va uni code’larini bu yerda ko’rishingiz mumkin: https://sqlite.org/src/tree?name=src