Ana içeriğe geç

Yan yana

SQLitevsPostgreSQL

SQLite ile PostgreSQL arasındaki fark nedir?

Güncellendi 3 dk okuma8 fark

Kısaca

SQLite, uygulamanın içinde çalışıp her şeyi tek dosyada tutan bir kütüphanedir; PostgreSQL ise istemcilerin ağ üzerinden bağlandığı bir veritabanı sunucusudur.

SQLite

SQLite, uygulamanızın içinde çalışan ve bütün bir veritabanını tek bir dosyada saklayan küçük bir SQL veritabanı motorudur; yönetilecek ayrı sunucu yoktur.

SQLite sayfasını oku

PostgreSQL

PostgreSQL, güvenilirliği, standartlara sıkı uyumu ve eklentileriyle bilinen ücretsiz, açık kaynaklı ilişkisel veritabanıdır; web uygulamalarında yaygındır.

PostgreSQL sayfasını oku

SQLite ve PostgreSQL karşılaştırması

ÖzellikSQLitePostgreSQL
MimariUygulamanızın içinde bir kütüphaneİstemcilerin bağlandığı ayrı bir sunucu
DepolamaDiskte tek bir sıradan dosyaSunucunun yönettiği bir veri dizini
KurulumYok: bir dosya açın ve başlayınKurun, yapılandırın, ardından kullanıcıları ve veritabanlarını oluşturun
Eşzamanlı yazmaAynı anda tek yazar; WAL modunda okuyucular çalışmayı sürdürürMVCC ve satır düzeyinde kilitler sayesinde aynı anda pek çok yazar
TiplerVarsayılan olarak esnek; STRICT tablolar tipleri uygularKatı tipler; ayrıca diziler, jsonb, aralıklar ve özel tipler
Erişim denetimiYalnızca dosya izinleriRoller, yetkiler ve satır düzeyinde güvenlik
ÖlçeklemeTek makine; replikasyon ek araçlarlaYerleşik replikasyon, okuma replikaları ve bölümleme (partitioning)
En uygun olduğu yerTelefonlar, masaüstü uygulamaları, gömülü sistemler, testler ve küçük sitelerWeb backend'leri ve pek çok kullanıcının paylaştığı sistemler

Fark, açıklamalı

SQLite gömülü bir veritabanıdır: programınıza bağlanan küçük bir kütüphanedir ve bütün tabloları ve indeksleri barındıran tek bir sıradan dosyayı okuyup yazar. PostgreSQL ise istemci-sunucu mimarisinde bir veritabanıdır: veriler ayrı bir sunucu sürecine aittir, uygulamalar da ona ağ üzerinden bir kullanıcı adı ve parolayla bağlanır. İkisi de ilişkiseldir, SQL konuşur ve ACID transaction'ları destekler.

Fark, her birinin nerede çalışmak üzere tasarlandığından gelir. SQLite'ta kurulacak ya da yapılandırılacak hiçbir şey yoktur; bu yüzden telefonlara, masaüstü uygulamalarına, tarayıcılara, testlere ve küçük web sitelerine uyar, ama aynı anda yalnızca tek bir yazara izin verir ve kendine ait kullanıcı hesapları ya da ağ erişimi yoktur. PostgreSQL ise aynı anda pek çok kullanıcı için yapılmıştır: MVCC okuyucuların ve yazarların eşzamanlı çalışmasını sağlar, roller kimin neyi yapabileceğini denetler, replikasyon da yükü sunuculara dağıtır.

SQL'leri de farklıdır. SQLite esnek tipleme kullanır; bu yüzden tablo STRICT olarak tanımlanmadıkça INTEGER olarak tanımlanmış bir sütun varsayılan olarak metin de tutabilir, ALTER TABLE desteği de sınırlıdır. PostgreSQL tipleri katı biçimde uygular ve sunucu tarafında çok daha fazlasını sunar: diziler, aralıklar (range) ve özel tipler, pek çok indeks türü, stored procedure'ler, ayrıntılı yetkiler ve PostGIS ile pgvector gibi eklentiler.

Sık yapılan bir yanlış, SQLite'ın yalnızca prototipler için olduğunu düşünmektir. Son derece iyi test edilmiştir; milyarlarca cihazda ve orta düzeyde trafik alan pek çok web sitesinde üretimde çalışır. Asıl sorular eşzamanlılık ve dağıtımdır: çoğunlukla okuma yapılan tek bir makine SQLite'tan yanadır; aynı anda yazan pek çok istemci ya da aynı veriyi paylaşan birkaç uygulama sunucusu ise PostgreSQL'den yana. Pek çok ürün ikisini birlikte kullanır: mobil ya da masaüstü uygulamanın içinde SQLite, onun senkronize olduğu sunucuda PostgreSQL.

Hangisini kullanmalısınız?

SQLite şu durumlarda doğru seçim:

  • Veritabanı telefon, masaüstü uygulaması ya da gömülü sistem gibi tek bir cihazda yaşıyor.
  • Sıfır kurulum istiyorsunuz: kurulacak, güvenliği sağlanacak ya da ayakta tutulacak bir sunucu yok.
  • Trafik çoğunlukla okumadan oluşuyor, yazma sayısı ise makul düzeyde.
  • Bütün veritabanını kopyalayabileceğiniz, yedekleyebileceğiniz ya da uygulamayla birlikte dağıtabileceğiniz tek bir dosyada istiyorsunuz.

PostgreSQL şu durumlarda doğru seçim:

  • Pek çok kullanıcı ya da birkaç uygulama sunucusu aynı anda yazıyor.
  • Kullanıcı hesaplarına, yetkilere ya da ağ üzerinden erişime ihtiyacınız var.
  • Gelişmiş tipler, PostGIS gibi eklentiler ya da yerleşik replikasyon istiyorsunuz.

Bir veritabanı açmak ve sorgu çalıştırmak (Python)

SQLitepython
# SQLite: the database is a file; the library reads it directly
import sqlite3

con = sqlite3.connect("shop.db")  # creates the file if needed
rows = con.execute(
    "SELECT name, price FROM products WHERE price < ?", (50,)
).fetchall()
PostgreSQLpython
# PostgreSQL: connect over the network to a running server
import psycopg

with psycopg.connect("postgresql://shop:secret@db.example.com:5432/shop") as con:
    rows = con.execute(
        "SELECT name, price FROM products WHERE price < %s", (50,)
    ).fetchall()

Sık sorulan sorular

SQLite, PostgreSQL'in yerini tutabilir mi?

Tek sunucuda çalışan ve orta düzeyde trafik alan bir uygulamada çoğu zaman evet; üstelik işletmeyi de basitleştirir. Pek çok süreç aynı anda yazdığında ya da birkaç sunucunun aynı veriye ihtiyacı olduğunda PostgreSQL daha güvenli seçimdir.

SQLite, PostgreSQL'den daha mı hızlı?

Tek makinedeki basit sorgularda çoğu zaman daha hızlıdır, çünkü arada bir ağ gidiş-dönüşü ya da sunucu süreci yoktur. Yoğun eşzamanlı yazmalarda ya da karmaşık analitik sorgularda ise genellikle PostgreSQL öne geçer.

SQLite'tan PostgreSQL'e geçmek zor mu?

Genellikle değil, çünkü ikisi de SQL konuşur; ama farklılaşan tipler, tarihler ve fonksiyonlar üzerinde biraz çalışmayı bekleyin. pgloader gibi araçlar veriyi kopyalayabilir, bir ORM de farkların çoğunu gizler.

Daha fazla

Ayarlar