SQLite, modern uygulamaların veri yönetimi ihtiyaçlarını karşılamak için yaygın olarak kullanılan açık kaynaklı, gömülü bir ilişkisel veri tabanı yönetim sistemidir. 2000 yılında D. Richard Hipp tarafından geliştirilen SQLite, diğer veri tabanı sistemlerinden farklı olarak, sunucu gerektirmeyen bir yapı sunar. Veri tabanı, uygulamanın bir parçası olarak çalışır ve dosya tabanlı depolama kullanır. Bu sayede, düşük kaynak tüketimi, kolay entegrasyon ve yüksek performans gibi avantajlar sağlar. Bu makalede, SQLite’ın temel özellikleri, mimarisi, kullanım alanları ve avantajları detaylı olarak ele alınacaktır.
SQLite Nedir?
SQLite, bir istemci-sunucu modeline ihtiyaç duymadan çalışan, C programlama dili ile yazılmış, açık kaynaklı ve gömülü bir ilişkisel veri tabanı yönetim sistemidir. Diğer veri tabanı yönetim sistemlerinden farklı olarak, SQLite sunucu tabanlı değildir; bu nedenle veri tabanı işlemleri, doğrudan bir uygulamanın içine yerleştirilebilir. SQLite’ın veri tabanı dosyaları, tek bir dosya içinde saklanır ve bu dosya, bir uygulamanın yerel dosya sistemi üzerinde bulunur.
SQLite, çeşitli veri türlerini destekleyen esnek bir veritabanı sistemidir. Ancak, diğer ilişkisel veritabanı sistemlerinden farklı olarak, SQLite sıkı bir veri türü zorlaması yapmaz ve dinamik yazma türü (dynamic typing) kullanır. Bu, bir sütunun belirli bir veri türüne sahip olmasına rağmen, o sütuna farklı türde veri yazılabileceği anlamına gelir. SQLite’da kullanılan temel veri türleri ve bunların detayları aşağıda açıklanmıştır:
NULL
- Açıklama: Hiçbir değeri olmayan veriyi temsil eder.
- Örnek:
NULL
INTEGER
- Açıklama: İşaretsiz tam sayılar. Bu tür veriler 1, 2, 3, 4, 6 veya 8 bayt olarak saklanır.
- Örnek:
42
REAL
- Açıklama: Ondalık nokta içeren kayan nokta sayıları. IEEE 754 formatında saklanır.
- Örnek:
3.14
TEXT
- Açıklama: UTF-8, UTF-16BE veya UTF-16LE şifrelemesi ile saklanan metin dizeleri.
- Örnek:
"Merhaba Dünya"
BLOB (Binary Large Object)
- Açıklama: Tam olarak girdiği gibi saklanan ikili veri. Hiçbir değişiklik veya dönüştürme yapılmaz.
- Örnek:
x'68656c6c6f'
(hexadecimal formatında “hello”)
Veri Türü Bağlantıları (Type Affinity)
SQLite, bir sütunun belirli bir veri türüyle ilişkili olmasını sağlayan bir tür bağlama (type affinity) sistemi kullanır. Bu sistem beş ana kategoride sınıflandırılır:
- TEXT: Sütundaki veriler genellikle metin olarak değerlendirilir. Örnek:
VARCHAR
,CHAR
,CLOB
- NUMERIC: Sütundaki veriler sayısal olarak değerlendirilir. INTEGER, REAL ve NUMERIC türlerini kapsar. Örnek:
NUMERIC
,DECIMAL
,BOOLEAN
,DATE
,DATETIME
- INTEGER: Sütundaki veriler tam sayı olarak değerlendirilir. Örnek:
INT
,INTEGER
- REAL: Sütundaki veriler kayan nokta sayıları olarak değerlendirilir. Örnek:
REAL
,DOUBLE
,FLOAT
- NONE: Sütunun belirli bir tür bağı yoktur, veri tipi zorlaması yapılmaz. Örnek:
BLOB
Örnek Tablo Tanımları
Bir SQLite tablosunun nasıl tanımlanabileceğine dair örnekler:
//sqlCREATE TABLE ornek_tablo (
id INTEGER PRIMARY KEY,
isim TEXT,
yas INTEGER,
maas REAL,
ozgecmis BLOB
);
Bu örnekte:
id
: INTEGER türünde ve birincil anahtar.isim
: TEXT türünde.yas
: INTEGER türünde.maas
: REAL türünde.ozgecmis
: BLOB türünde.
SQLite’ın esnek veri türü yapısı, veri tabanının geniş bir uygulama yelpazesinde kullanılabilmesini sağlar ve geliştiricilere büyük bir özgürlük sunar. Bu yapı sayesinde SQLite, birçok farklı veri türünü etkili bir şekilde işleyebilir.
Temel Özellikleri
- Gömülü Sistem: SQLite, uygulamanın bir parçası olarak çalışır, bu da onun hafif ve hızlı olmasını sağlar.
- Kolay Kurulum: Sunucu kurulumu gerektirmez, bu da entegrasyon sürecini basitleştirir.
- Platform Bağımsızlığı: Windows, MacOS, Linux gibi çeşitli işletim sistemlerinde çalışabilir.
- Küçük Boyut: Hafif yapısı sayesinde, düşük kaynak tüketimi ve yüksek performans sağlar.
- ACID Uyumluluğu: Atomiklik, tutarlılık, izolasyon ve dayanıklılık (ACID) özelliklerini destekler, bu da güvenli ve güvenilir veri işlemlerini garanti eder.
Kullanım Alanları
SQLite, mobil cihazlardan web tarayıcılarına kadar geniş bir yelpazede kullanılmakta olup, özellikle küçük ve orta ölçekli veritabanı ihtiyaçları için ideal bir çözümdür.
- Mobil Uygulamalar: Android ve iOS uygulamalarında veri depolama için yaygın olarak kullanılır.
- Web Tarayıcıları: Firefox, Chrome gibi web tarayıcılarında yerel veri depolama mekanizması olarak kullanılır.
- Gömülü Sistemler: Akıllı ev cihazları, IoT cihazları gibi gömülü sistemlerde veri yönetimi için idealdir.
- Masaüstü Uygulamaları: Küçük ve orta ölçekli veri depolama gereksinimleri olan masaüstü uygulamalarında tercih edilir.
SQLite, basitliği, taşınabilirliği ve güçlü veri yönetim özellikleri ile birçok uygulama geliştiricisi için ideal bir çözüm sunar. Veri tabanı ihtiyaçları küçük veya orta ölçekli olan projelerde, SQLite’ın sunduğu performans ve kullanım kolaylığı büyük avantajlar sağlar.
SQLite Türleri
SQLite, bir ilişkisel veri tabanı yönetim sistemi olarak farklı türde veri tabanı dosyaları ve yapılandırmaları destekler. Bu türler, verilerin nasıl saklandığı ve erişildiği ile ilgilidir. İşte SQLite’ın desteklediği başlıca türler:
1. Disk Tabanlı Veri Tabanı (Persistent Database)
Disk tabanlı veri tabanları, verilerin bir dosya sisteminde saklandığı ve kalıcı olduğu veri tabanı türleridir. Bu tür, uygulamaların verileri uzun süreli olarak saklamasını sağlar.
Örnek Kullanım:
//sql
sqlite3 mydatabase.db
Bu komut, mydatabase.db
adlı bir veri tabanı dosyası oluşturur ve SQLite komut satırında bu veri tabanıyla çalışmanızı sağlar.
2. Bellek İçi Veri Tabanı (In-Memory Database)
Bellek içi veri tabanları, verilerin RAM’de saklandığı ve geçici olduğu veri tabanı türleridir. Bu tür veri tabanları, hızlı veri erişimi gerektiren ancak verilerin kalıcı olmasının gerekmediği senaryolar için idealdir.
Örnek Kullanım:
//sql
sqlite3 :memory:
Bu komut, yalnızca mevcut oturum boyunca geçerli olan ve RAM’de saklanan geçici bir veri tabanı oluşturur.
3. Geçici Veri Tabanı (Temporary Database)
Geçici veri tabanları, disk tabanlı ancak yalnızca mevcut oturum süresince geçerli olan veri tabanlarıdır. Oturum sona erdiğinde, bu veri tabanları ve içerikleri silinir.
Örnek Kullanım:
//sql
CREATE TEMP TABLE temp_table (id INTEGER, name TEXT);
Bu komut, oturum süresince geçerli olacak geçici bir tablo oluşturur.
4. Bağlı Veri Tabanları (Attached Databases)
SQLite, aynı anda birden fazla veri tabanı dosyasıyla çalışabilmenizi sağlar. Bu, özellikle büyük veri tabanlarını modüler hale getirmek veya farklı veri tabanları arasında veri paylaşımı yapmak için kullanışlıdır.
Örnek Kullanım:
//sql
ATTACH 'another.db' AS another; SELECT * FROM another.some_table;
Bu komut, another.db
adlı bir veri tabanı dosyasını mevcut oturuma ekler ve another
takma adı ile erişim sağlar.
5. Şema Tabanlı Veri Tabanları (Schema-Based Databases)
SQLite, veri tabanı şemaları oluşturmanıza ve yönetmenize izin verir. Bu şemalar, veri tabanının yapısını ve düzenini tanımlayan yapısal elementlerdir.
Örnek Kullanım:
//sql
CREATE SCHEMA myschema; CREATE TABLE myschema.mytable (id INTEGER, name TEXT);
Bu komutlar, myschema
adlı bir şema oluşturur ve bu şema içinde bir tablo tanımlar.
SQLite Veri Tabanı Türlerini Kullanma Örnekleri
Disk Tabanlı Veri Tabanı Kullanımı:
//sh
sqlite3 mydatabase.db
Bellek İçi Veri Tabanı Kullanımı:
//sh
sqlite3 :memory:
Geçici Veri Tabanı ve Tablolar:
//sql
CREATE TEMP TABLE temp_table (id INTEGER, name TEXT);
Bağlı Veri Tabanları Kullanımı:
//sql
ATTACH 'another.db' AS another;
Bu saydığımız veri tabanı türleri, SQLite’ın esnekliğini ve çeşitli uygulama senaryolarında kullanımını artırır. Disk tabanlı ve bellek içi veri tabanları gibi farklı depolama yöntemleri sayesinde, SQLite hemen her türlü uygulama gereksinimini karşılayabilecek bir veri tabanı yönetim sistemi sunar.