Mobil inkişafda SQLite: bu nədir və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-03-11 Oxuma vaxtı: 10 dəq

SQLite — ayrıca server prosesi olmadan işləyən və bütün verilənlər bazasını cihazda bir faylda saxlayan quraşdırılmış relyasiyalı verilənlər bazasıdır. Sıfır konfiqurasiya, kitabxananın kiçik ölçüsü və SQL-in tam dəstəyi sayəsində, SQLite mobil tətbiqlərdə lokal verilənlərin saxlanması üçün standart halına gəldi. SQLite Consortium (2025) məlumatlarına görə, bu VTİS iOS və Android-dəki hər smartfon da daxil olmaqla, 4 milyarddan çox cihazda istifadə olunur.

Başlıca məqamlar

  • SQLite — sıfır konfiqurasiya və verilənlərin bir faylda saxlanması ilə quraşdırılmış relyasiyalı VTİS.
  • ACID əməliyyatları — enerji kəsilməsi və ya tətbiqin çökməsi zamanı belə verilənlərin bütövlüyünə zəmanət verir.
  • Verilənlərin tipləşdirilməsi — dinamik: SQLite cədvəl yaradılarkən sütun tipinin ciddi şəkildə göstərilməsini tələb etmir.
  • Room — SQLite ilə DAO və annotasiyalar vasitəsilə işi asanlaşdıran Android ORM kitabxanası.
  • CoreData iOS-da SQLite-i Persistent Store kimi istifadə edə bilər, lakin obyektlərin idarə edilməsi üçün əlavə qat əlavə edir.

SQLite nədir?

SQLite — ayrıca server olmadan relyasiyalı VTİS həyata keçirən C dilində kitabxanadır. O, birbaşa tətbiqin içinə yerləşdirilir, məlumatları cihazın fayl sistemindəki adi fayldan oxuyur və yazır. Kitabxananın ölçüsü təxminən 600 KB təşkil edir ki, bu da SQLite-i ən yüngül tam funksiyalı SQL verilənlər bazası edir.

SQLite SQL:1999 standartının böyük hissəsini, o cümlədən JOIN, alt sorğular, triggerlər, görünüşlər, indekslər və pəncərə funksiyalarını dəstəkləyir. Məhdudiyyətlər ALTER TABLE-a (məhdud dəstək) və tam RIGHT/FULL OUTER JOIN-ə aiddir. Buna baxmayaraq, mobil tətbiqlər üçün SQLite-in funksionallığı lokal saxlama hallarının 99%-də kifayətdir.

Stack Overflow (2025) tərtibatçı sorğusuna görə, SQLite quraşdırılmış həllər üçün ən populyar verilənlər bazasıdır və MySQL və PostgreSQL-dən sonra bütün VTİS-lər arasında populyarlıqda üçüncü yeri tutur. Mobil inkişafda SQLite hər tətbiqdə — birbaşa və ya örtüklər vasitəsilə istifadə olunur.

SQLite-in əsas xüsusiyyətləri

Zero-configuration — SQLite quraşdırma, icazələrin konfiqurasiyası, istifadəçilərin yaradılması və ya xidmətin işə salınmasını tələb etmir. Kitabxana layihəyə qoşulur və verilənlər bazası bir funksiyanı çağırmaqla yaradılır. Bu, serverin quraşdırılması, portların konfiqurasiyası və istifadəçilərin tənzimlənməsini tələb edən müştəri-server VTİS-ləri ilə müqayisədə yerləşdirməni köklü şəkildə asanlaşdırır.

SQLite verilənlər bazası faylı köçürülə, təhlil edilə, şəbəkə üzərində göndərilə və ya ehtiyat nüszədən bərpa edilə bilən adi platformalararası fayldır. Fayl formatı API səviyyəsində sabittir: 2004-cü ildə yaradılmış SQLite 3 faylları kitabxananın cari versiyası ilə açılır ki, bu da məlumatların uzunmüddətli uyğunluğuna zəmanət verir.

SQLite necə qurulub: arxitektura və saxlanma

SQLite-in arxitekturası səkkiz virtual maşından ibarətdir: Tokenizer, Parser, Code Generator, VM, B-Tree, Pager, OS Interface və Utilities. SQL sorğusu Tokenizer (tokenlərə bölmə), Parser (AST qurma), Code Generator (bayt koduna çevirmə) mərhələlərindən keçir və B-Tree və Pager vasitəsilə məlumat səhifələrini oxuyan virtual maşında icra olunur.

SQLite cədvəlləri və indeksləri saxlamaq üçün B-Tree istifadə edir. Hər cədvəl ayrı bir B-Tree kimi saxlanılır, burada yarpaq düymlər məlumat sətrlərini ehtiva edir. İndekslər də B-Tree kimi saxlanılır, lakin yarpaqlarda açarlarla. Pager fayldan səhifələrin (standart olaraq 4096 bayt) yaddaşa yüklənməsini idarə edir, jurnal və ya WAL vasitəsilə ACID əməliyyatlarını təmin edir.

Jurnallaşdırma rejimləri

WAL (Write-Ahead Logging) — mobil tətbiqlər üçün tövsiyə olunan rejim. Dəyişikliklər əvvəlcə ayrıca WAL faylına yazılır, sonra dövri olaraq əsas verilənlər bazasına köçürülür. WAL eyni vaxtda verilənlər bazasından oxumağa (köhnə məlumatlar) və ona yazmağa (WAL vasitəsilə) imkan verir ki, bu da çoxiplikli tətbiqlərin performansını artırır. Standart jurnal (rollback journal) yazma zamanı oxumanı bloklayır.

ParametrRollback JournalWAL (Write-Ahead Logging)
Yazma zamanı oxumaBloklanırİcazə verilir (köhnə məlumatları oxuyur)
Yazma performansıOrtaYüksək (ardıcıl WAL yazısı)
Disk istifadəsiAz (yalnız geri qaytarma jurnalı)Çox (WAL + əsas VTİS)
Nasazlıqdan bərpaSon yoxlama nöqtəsinə geri qayıtmaWAL-dan bərpa (məlumatlar itmir)
TövsiyəTek iplikli ssenarilər üçünTipik mobil tətbiqlər üçün

Rejimlər arasında keçid bir SQL sorğusu ilə həyata keçirilir: PRAGMA journal_mode=WAL. Fon sinxronizasiyası və eyni vaxtda məlumatları oxuyan UI ipliyi olan mobil tətbiqlər üçün WAL daha yaxşı performans və interfeysin bloklanmamasını təmin edir.

SQLite vs mobil inkişafda digər verilənlər bazaları

SQLite lokal verilənlərin saxlanması üçün yeganə seçim deyil, lakin ən universal olandır. Realm yaddaşdakı obyektlərə birbaşa çıxış üçün daha yüksək sürət təklif edir, lakin öz NoSQL formatından istifadə edir və daha böyük kitabxana ölçüsünə malikdir. iOS-da Core Data SQLite üzərində ORM qatıdır, obyekt qrafının idarə edilməsi və əməliyyatların ləğvini əlavə edir.

Tətbiqlərin əksəriyyəti üçün SQLite proqnozlaşdırıla bilən performansı, sıfır vendor lock-in və zamana qarşı sınaqdan keçirilmiş sabitliyi sayəsində optimal seçim olaraq qalır. Realm və Core Data mürəkkəb obyekt qrafı, reaktiv sorğular və ya cihazlar arası sinxronizasiya tələb edən layihələrdə əsaslandırılır.

XüsusiyyətSQLiteRealmCore Data
VTİS növüRelyasiyalı (SQL)NoSQL (obyekt yönümlü)ORM (SQLite üzərində)
Kitabxana ölçüsü~600 KB~4 MBApple SDK-ya daxildir
PerformansOrtaYüksək (yaddaşda obyektlər)Orta (ORM yükü)
PlatformalariOS, Android, Web, DesktopiOS, Android, Node.jsiOS, macOS
Vendor lock-inYox (açıq standart)Orta (öz formatı)Yüksək (yalnız Apple)

SQLite, Realm və Core Data arasında seçim platformadan, obyekt modeli tələblərindən və sinxronizasiya strategiyasından asılıdır. Platformalararası layihələr (KMP, Flutter) üçün SQLite məlumat modelində dəyişiklik olmadan bütün hədəf platformalarda işləyən yeganə universal seçim olaraq qalır.

Android-də SQLite: Room və SQLiteOpenHelper

Room — SQLite üzərində ORM qatı təmin edən Android Jetpack kitabxanasıdır. Room annotasiya olunmuş DAO interfeyslərindən avtomatik olaraq SQL sorğuları yaradır, sorğuların düzgünlüyünü kompilasiya mərhələsində yoxlayır və sxem dəyişikliyi zamanı verilənlər bazası miqrasiyalarını dəstəkləyir. Room Android-də SQLite ilə işləməyin tövsiyə olunan üsuludur.

SQLiteOpenHelper — ORM olmadan SQLite-i birbaşa idarə etmək üçün aşağı səviyyəli API-dir. Sinif verilənlər bazasının yaradılmasını, açılmasını və yenilənməsini idarə edir. SQLiteOpenHelper sadə SQL sorğuları olan və ya Room abstraksiyası olmadan SQL məntiqi üzərində tam nəzarət tələb edən layihələr üçün uyğundur.

Room üçün varlıq və DAO nümunəsi

Varlıq Room-da @Entity ilə, DAO isə @Dao ilə annotasiya olunur. Room annotasiya olunmuş metodları SQL sorğularına çevirir: @Insert INSERT yaradır, @Query — göstərilmiş SQL ilə SELECT. Miqrasiyalar köhnə və yeni sxem versiyasını göstərən Migration vasitəsilə əlavə edilir. Room SQL-i kompilasiya mərhələsində yoxlayır ki, bu da istehsalatda sintaksis səhvlərini aradan qaldırır.

kotlin
@Entity
data class User(
    @PrimaryKey val id: Long,
    val name: String,
    @ColumnInfo(name = "created_at")
    val createdAt: Long
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user ORDER BY name ASC")
    suspend fun getAllUsers(): List<User>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertUser(user: User)

    @Query("DELETE FROM user WHERE id = :id")
    suspend fun deleteUser(id: Long)
}

Room daxili RoomDatabase vasitəsilə SQLite-ə icra zamanı sorğuları ehtiva edən UserDao_Impl implementasiyasını avtomatik yaradır. Korutinlər (suspend) sayəsində DAO metodları UI-ni bloklamadan fon ipliyində asinxron şəkildə icra olunur. @Query-də Flow qaytaran tiplər cədvəl dəyişərkən nəticəni avtomatik yeniləyir.

iOS-da SQLite: FMDB və GRDB

FMDB — SQLite C API üzərində Objective-C örtüyü, tarixən iOS üçün ilk məşhur kitabxanadır. Sorğuları icra etmək və nəticələri əldə etmək üçün FMDatabase və FMResultSet obyektlərini təqdim edir. FMDB sadə və minimaldir, lakin Swift-ə xas konstruksiyaları — optionallar, Codable, async/await — dəstəkləmir.

GRDB — SQLite ilə işləmək üçün müasir Swift kitabxanasıdır. Type-safe API, Codable dəstəyi, Combine Publishers, async/await, miqrasiyalar və real vaxt rejimində dəyişikliklərin izlənməsini təmin edir. GRDB Swift Concurrency ilə tam inteqrasiya və daha yaxşı kod oxunaqlılığı sayəsində yeni Swift layihələri üçün üstünlük təşkil edir.

Swift-də GRDB nümunəsi

GRDB cədvəlləri FetchableRecordTableRecord protokollarına uyğun Record sinifləri vasitəsilə təyin edir. Sorğular xam SQL ilə deyil, Swift-də type-safe sintaksislə yazılır. GRDB hçemçinin sxemin versiyalaşdırılması və tətbiq versiyaları arasında miqrasiyalar üçün DatabaseMigrator-u dəstəkləyir.

swift
struct User: Codable, FetchableRecord, TableRecord {
    var id: Int64
    var name: String
    var createdAt: Date
}

let dbPool = try DatabasePool(path: dbPath)
var migrator = DatabaseMigrator()
migrator.registerMigration("v1") { db in
    try db.create(table: "user") { t in
        t.autoIncrementedPrimaryKey("id")
        t.column("name", .text).notNull()
        t.column("createdAt", .datetime).notNull()
    }
}

let users = try await dbPool.read { db in
    try User.order(Column("name")).fetchAll(db)
}

DatabasePool paralel oxuma üçün SQLite WAL rejimindən istifadə edir. Çoxlu oxucu eyni vaxtda verilənlər bazasına müraciət edə bilər, bir yazıçı isə WAL vasitəsilə məlumatları yeniləyir. GRDB əl ilə sinxronizasiya olmadan istənilən iplikdən bazaya thread-safe çıxışı təmin edərək əlaqələri və əməliyyatları avtomatik idarə edir.

SQLite performansının optimallaşdırılması

İndekslər — SQLite sorğularını sürətləndirməyin ən təsirli üsuludur. İndeks WHERE, JOIN və ORDER BY-də iştirak edən sütunlarda yaradılır. 100 000 qeydi olan cədvəl üçün indekslənmiş sütun üzrə axtarış saniyələr əvəzinə millisaniyələr çəkir. Lakin indekslər INSERT və UPDATE-i yavaşlatdır, ona görə də onların sayı yazma tezliyi ilə balanslaşdırılmalıdır.

Toplu yerləşdirmə (batch insert) bir əməliyyat çərçivəsində kütləvi məlumat yükləməsini köklü şəkildə sürətləndirir. 1000 qeydin tək-tək yerləşdirməsi təxminən 1 saniyə əlavə yük verir. Eyni 1000 qeydin bir əməliyyatda yerləşdirməsi — təxminən 5–10 millisaniyə. Fərq onunla izah olunur ki, hər ayrıca INSERT diskə sinxron yazma ilə yeni əməliyyat yaradır.

Performans PRAGMA-ları

PRAGMA — kitabxananın davranışını konfiqurasiya etmək üçün SQLite əmrləridir. Əsas optimallaşdırma PRAGMA-ları: PRAGMA synchronous=NORMAL (fsync tezliyini azaldır), PRAGMA cache_size=-8000 (8 MB keş ayırır), PRAGMA temp_store=MEMORY (müvəqqəti cədvəllər yaddaşda). Böyük həcmli məlumatları olan mobil tətbiqlər üçün bu PRAGMA-ların kombinasiyası sorğuları 2–3 dəfə sürətləndirir.

Digər vacib optimallaşdırma — SQL sorğularının öncədən kompilasiyası (prepared statements). Əgər sorğu dəfələrlə icra olunursa (məsələn, 10 000 sətrin yerləşdirməsi), SQL-in bir dəfə kompilasiyası və sonra statement-in istifadəsi CPU yükünü 30–50% azaldır. Room və GRDB prepared statements-ləri avtomatik keşləyir, lakin SQLite C API-dən birbaşa istifadə edərkən kompilasiya əl ilə aparılmalıdır.

kotlin
class UserRepository(private val db: RoomDatabase) {

    suspend fun insertBatch(users: List<User>) {
        db.withTransaction {
            users.chunked(500).forEach { batch ->
                batch.forEach { user ->
                    insertUser(user)
                }
            }
        }
    }
}

withTransaction ilə toplu yerləşdirmə bütün INSERT-lərin bir əməliyyat çərçivəsində icra olunmasına zəmanət verir. Alt toplulara bölmə (chunked) digər iplikləri uzun müddət bloklaya biləcək çox böyük bir əməliyyatın qarşısını alır. Fon sinxronizasiyası üçün 500 qeydlik alt toplu ölçüsü sürət və UI həssaslığının optimal balansını təmin edir.

Tez-tez verilən suallar

SQLite-dən bir neçə iplikdə istifadə etmək olarmı?

Bəli, SQLite WAL rejimində çoxiplikli çıxışı dəstəkləyir. Bir neçə iplik eyni vaxtda məlumatları oxuya bilər, lakin yalnız biri yaza bilər. Room və GRDB sinxronizasiyanı avtomatik idarə edir. Rollback journal rejimində (standart) verilənlər bazası hər yazma zamanı tamamilə bloklanır.

Mobil cihazda SQLite verilənlər bazasının maksimum ölçüsə nədir?

SQLite məhdudiyyəti — 281 TB (nəzəri maksimum). Praktikada verilənlər bazasının ölçüsü cihazın mövcud yaddaşı ilə məhdudlaşır. Mobil tətbiqlər üçün rahat ölçü 1–2 GB-a qədərdir. 2 GB-dan böyük verilənlər bazaları ehtiyat nüszəni, App Store vasitəsilə yeniləməni yavaşlatır və RAM istehlakını artırır.

SQLite-də məlumatlar təhlükəsizdirmi?

SQLite standart olaraq məlumatları şifrələmir — fayla çıxışı olan istənilən proses onları oxuya bilər. Şifrələmə üçün SQLCipher (AES-256 ilə genişləndirmə), EncryptedDatabase ilə Room (Android) və ya iOS-da Encrypted Core Data istifadə edin. Şifrələmə məlumatların oxunmasına və yazılmasına 5–15% əlavə yük gətirir.

SQLite MySQL-dən nə ilə fərqlənir?

SQLite server prosesi tələb etməyən quraşdırılmış (embedded) kitabxanadır. MySQL ayrıca serveri, istifadəçiləri, giriş hüquqları və şəbəkə protokolu olan müştəri-server VTİS-dir. SQLite verilənlər bazasını bir faylda saxlayır, MySQL — server tərəfindən idarə olunan bir neçə faylda. SQLite daha sadə və yüngüldür, MySQL daha güclü və miqyaslana biləndir.

Məlumat itkisi olmadan SQLite sxemini necə yeniləmək olar?

Miqrasiya üçün SQLite-də ALTER TABLE (sütun əlavə etmə) və ya məlumatları köçürmə və köhnəni silməklə yeni cədvəl yaratma istifadə edin. Room bu prosesi Migration sinifləri vasitəsilə avtomatlaşdırır: startVersion, endVersion və sxemi dəyişdirmək üçün SQL sorğularını qeyd edin. GRDB və FMDB oxşar DatabaseMigrator təmin edir.

Nəticə

  • SQLite — iOS və Android-də hər mobil tətbiqdə lokal məlumat saxlama üçün istifadə olunan sıfır konfiqurasiyalı quraşdırılmış relyasiyalı VTİS.
  • ACID əməliyyatları və WAL rejimi məlumatların bütövlüyünü və tətbiqin bir neçə ipliyindən paralel çıxışı təmin edir.
  • Room (Android) və GRDB (iOS) — type-safe API və avtomatik miqrasiyalar vasitəsilə baza ilə işi asanlaşdıran müasir SQLite örtükləri.
  • SQLite-in B-Tree arxitekturası indekslər üzrə səmərəli axtarış, toplu əməliyyatlar və prepared statements isə yüksək yazma performansı təmin edir.
  • SQLite universallıq (bütün platformalar), kitabxana ölçüsü və vendor lock-in olmaması baxımından Realm və Core Data-nı üstələyir.
  • Indekslər, WAL rejimi və PRAGMA parametrləri vasitəsilə optimallaşdırma tipik mobil yüklərdə sorğuları 2–3 dəfə sürətləndirir.
  • Tövsiyə — Android-də Room və iOS-da GRDB vasitəsilə SQLite-i mobil tətbiqin lokal məlumatları üçün əsas anbar kimi istifadə edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun