Menu

SQLite Nedir? Gömülü SQL Veritabanı Rehberi

SQLite, uygulamanızın içinde çalışan, sunucu gerektirmeyen, tek dosyaya sığan bir SQL veritabanıdır. Ne işe yaradığını, klasik veritabanlarından farkını ve hangi senaryolarda parladığını anlatıyoruz.

Bu sayfada çalıştırılabilir editörler var — düzenle, çalıştır ve sonucu anında gör.

SQLite, Programınızın İçinde Çalışan Bir Veritabanıdır

Adını duyduğunuz veritabanlarının çoğu — MySQL, Postgres, SQL Server — ayrı bir program olarak çalışır. Bir sunucu başlatırsınız, belirli bir portu dinler ve uygulamanız sorularını sormak için ağ üzerinden ona bağlanır. SQLite bu modeli tamamen bir kenara atar.

SQLite bir kütüphanedir. Programınıza dahil edersiniz ve size diskte tek bir dosyada yaşayan bir SQL veritabanı sunar. Sunucu yok, port yok, daemon yok, pg_ctl start da yok. Uygulamanız bir dosya açar ve o dosya veritabanının ta kendisidir.

sqlite3 mydata.db

Bu komut, mydata.db adında bir dosya açar (yoksa oluşturur) ve karşınıza bir SQL satırı getirir. Yaptığınız her şey — tablolar, satırlar, indeksler — hep o tek dosyada saklanır. Dosyayı başka bir makineye kopyalayın, veritabanı da onunla birlikte gider. Silerseniz, veritabanı da uçar.

SQL Tarafına Hızlı Bir Bakış

SQL'in kendisi başka yerlerde gördüğünüzden farksız. Daha önce başka bir veritabanıyla çalıştıysanız, neredeyse her şey size tanıdık gelecek:

Standart SQL — CREATE TABLE, INSERT, SELECT, ORDER BY. SQLite, günlük hayatta gerçekten kullandığınız SQL standardı parçalarını destekler; üstüne CTE'ler, pencere fonksiyonları ve JSON fonksiyonları gibi modern kolaylıkları da getirir. Postgres veya MySQL'den farkları çoğunlukla veri tipleri ve birkaç sözdizimi tuhaflığıyla sınırlı; bunlara ileride değineceğiz.

"Gömülü" ve "Sunucusuz" Aslında Ne Demek?

SQLite denince sürekli karşımıza çıkan iki kavram var. Bunları baştan netleştirmekte fayda var.

Gömülü veritabanı, SQLite'ın uygulamanızla aynı süreç içinde çalışması demek. Ayrı bir veritabanı süreci yok. Python betiğiniz sqlite3.connect("data.db") çağırdığında, SQL motoru Python sürecinizin içinde çalışıyor ve dosyayı doğrudan okuyup yazıyor.

Sunucusuz, kurulacak, yapılandırılacak, çalıştırılacak, güvenliği sağlanacak ya da yedeklenecek bir sunucu olmaması demek. Bir veritabanını kullanmaya başlamak için gereken adımları karşılaştıralım:

  • Postgres: Postgres'i kurun, servisi başlatın, bir kullanıcı oluşturun, bir veritabanı oluşturun, pg_hba.conf dosyasını yapılandırın, TCP üzerinden bağlanın.
  • SQLite: bir dosyayı açın.

Tüm fark bu kadar. Daha az güç, çok daha az tören.

Veritabanının Tamamı Tek Bir Dosya

İnsanları en çok şaşırtan kısım burası. Dosya formatı belgelenmiş ve kararlı durumda — bir .db (ya da .sqlite veya .sqlite3, uzantı yalnızca bir gelenek) dosyası ki şunları yapabilirsiniz:

  • Bir iş arkadaşınıza e-posta ile gönderebilirsiniz.
  • Git'e commit'leyebilirsiniz (en azından küçük olanları).
  • cp ile kopyalayıp anında yedek alabilirsiniz.
  • Herhangi bir işletim sisteminde, herhangi bir SQLite aracıyla açabilirsiniz.
ls -lh mydata.db
# -rw-r--r--  1 you  staff   28K  Apr 23 14:02 mydata.db

Tek bir dosya; tablolarınızı, indekslerinizi, şemanızı ve verilerinizi bir arada tutuyor. Diskteki SQLite veritabanları Windows, macOS, Linux, iOS ve Android'de bayt bayt aynıdır. Format o kadar istikrarlı ki, ABD Kongre Kütüphanesi uzun vadeli veri saklama için bunu öneriyor.

SQLite'ı Zaten Nerelerde Kullanıyorsunuz

Şu an bu yazıyı okuduğunuz cihazda büyük ihtimalle yüzlerce SQLite veritabanı var. Şunların arkasında SQLite çalışıyor:

  • iOS ve Android sistem depolaması ve her iki platformdaki birçok uygulama.
  • Firefox, Chrome ve Safari (geçmiş, yer imleri, çerezler).
  • macOS (Mail, Fotoğraflar, Dock).
  • Yerel depolama gerektiren Linux masaüstü uygulamalarının çoğu.
  • Skype, WhatsApp, Signal — sohbet geçmişi.
  • Adobe Lightroom katalogları, Dropbox meta verileri, Steam kütüphaneleri.

SQLite, dünyada en yaygın kullanılan veritabanı motoru olarak anılıyor — ki bu büyük olasılıkla doğru. Sebebi basit: bir uygulama yapılandırılmış yerel depolamaya ihtiyaç duyduğunda, SQLite en kestirme yol oluyor.

SQLite Ne Değildir

SQLite bir istemci-sunucu veritabanı değildir. Farklı makinelerdeki iki program aynı SQLite veritabanına ağ üzerinden bağlanamaz — zaten bağlanılacak bir ağ katmanı yok. Bunu istiyorsanız size Postgres veya MySQL lazım.

Yüksek yazma eşzamanlılığı için tasarlanmamıştır. SQLite dosya seviyesinde kilitleme kullanır (WAL modunda bazı akıllı iyileştirmelerle birlikte); yani birçok okuyucu paralel çalışabilir ama tek seferde yalnızca bir yazıcı commit edebilir. Tek kullanıcılı bir uygulama veya düşük trafikli bir site için bu hiç sorun değil. Saniyede binlerce yazma alan çok kiracılı bir SaaS için ise yanlış araç.

Kullanıcı veya yetki yönetimi yapmaz. Veritabanına erişim, dosyaya erişim demektir — dosyayı okuyabilen veriyi de okuyabilir. Kendi veritabanı dosyasına sahip olan bir uygulama için bu sorun değil. Ortak çok kiracılı bir kurulum için ise uygun değil.

Neden SQLite Tercih Edilir

Takas basit: muhtemelen hiç ihtiyaç duymayacağınız bir ölçeklenme alanını basitliğe değişiyorsunuz:

  • Sıfır kurulum. Çalıştırılacak bir servis yok. Dev ve prod arasında sürüm uyumsuzluğu yok. "Veritabanı çöktü" diye bir şey yok, çünkü ortada bir veritabanı sunucusu yok.
  • Hızlı. Çoğu iş yükünde, özellikle okuma ağırlıklı olanlarda, SQLite ağ üzerinden çalışan veritabanlarından daha hızlıdır — her sorguda soket gidiş-dönüşü yok.
  • Güvenilir. Takıntılı denecek kadar test edilir. SQLite projesinin test kodu, kaynak kodundan kat kat fazladır ve format 2004'ten bu yana değişmedi.
  • Kamu malı. Ticari dahil her türlü kullanıma açık ve ücretsiz. Okumanız gereken bir lisans yok.
  • Taşınabilir. Tek dosya, her platform.

Yerel uygulamalar, prototipler, gömülü cihazlar, CLI araçları, test paketleri, veri analizi scriptleri ve küçük-orta ölçekli web siteleri için SQLite çoğu zaman doğru varsayılandır — "gerçek" bir veritabanına geçmeden önceki bir basamak değildir.

Sırada: SQLite vs MySQL

Doğal olarak akla gelen bir sonraki soru, SQLite'ın muhtemelen daha sık duyduğunuz veritabanı sunucularıyla nasıl kıyaslandığı. MySQL ile başlayacağız — hangisi nerede öne çıkıyor ve önünüzdeki proje için hangisinin uygun olduğunu nasıl anlarsınız.

Sıkça Sorulan Sorular

SQLite nedir?

SQLite, ayrı bir sunucu olarak değil; doğrudan uygulamanızın içinde bir kütüphane olarak çalışan bir SQL veritabanı motorudur. Tablolar, indeksler, şema, veriler — hepsi diskte tek bir dosyada durur. Sıradan SQL cümleleriyle, C kütüphanesi (ya da kullandığınız dilin binding'i) üzerinden konuşursunuz.

SQLite ne işe yarar?

Sunucu kurmadan gerçek bir SQL veritabanına ihtiyaç duyduğunuz her yerde: mobil uygulamalar (hem iOS hem Android dahili olarak SQLite ile geliyor), masaüstü uygulamaları, tarayıcılar, gömülü cihazlar, küçük web siteleri, yerel önbellekler, test ortamları ve analiz scriptleri. Veriniz tek bir makineye sığıyorsa ve aynı anda yalnızca tek bir süreç yazıyorsa, SQLite genelde biçilmiş kaftandır.

SQLite gerçek bir veritabanı mı?

Evet. Transaction'ları, ACID garantilerini, foreign key'leri, JOIN'leri, alt sorguları, window fonksiyonlarını, CTE'leri, trigger'ları, view'leri ve JSON desteğini içerir. Sunucu tabanlı veritabanlarındaki ağ erişimi, çoklu yazıcı eşzamanlılığı veya kullanıcı hesapları gibi şeyler yoktur — çünkü SQLite'ın işi bu değil. Tek süreçli bir uygulama için Postgres kadar 'gerçek' bir veritabanıdır.

SQLite ücretsiz mi?

Evet. SQLite kamu malıdır (public domain), yani açık kaynaktan bile daha serbest bir lisansa sahiptir. Ticari ürünlerinizde kullanabilir, kaynak kodunu değiştirebilir ve hiçbir atıf veya lisans ücreti ödemeden dağıtabilirsiniz. Dünyada en yaygın kullanılan yazılımlardan biri olmasının sebebi de tam olarak bu.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA