Rust ile SQL Veritabanı Yönetimi (Diesel ve SQLx)

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Top Poster Of Month
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Rust dünyasında veritabanı işlemleri söz konusu olduğunda, topluluk iki ana kamp arasında bölünmüştür: Diesel ve SQLx. Her iki araç da Rust’ın güvenlik vaatlerini veritabanı seviyesine taşır, ancak bunu yapış yolları birbirinden tamamen farklıdır.
Bu rehberde, projeniz için hangi kütüphanenin daha uygun olduğunu anlamanıza yardımcı olacak detaylı bir inceleme yapacağız.

1. Diesel: Tip Güvenliğinin Zirvesi (ORM)​

Diesel, Rust ekosisteminin en eski ve en olgun ORM (Object-Relational Mapper) kütüphanesidir. Diesel'in felsefesi şudur: "Eğer kod derleniyorsa, sorgu doğrudur."
Öne Çıkan Özellikleri:
  • Compile-time Check: SQL sorgularınız derleme aşamasında kontrol edilir. Geçersiz bir sütun adına erişmeye çalışırsanız kodunuz derlenmez.
  • Sıfır Maliyetli Soyutlama: SQL yazmak yerine Rust fonksiyonları kullanırsınız, ancak bu performans kaybına yol açmaz.
  • Senkron Yapı: Diesel geleneksel olarak senkron çalışır (ancak diesel-async ile asenkron destek eklenmiştir).
Kod:
 // Diesel ile tip güvenli bir sorgu örneği let sonuclar = kullanicilar .filter(aktif.eq(true)) .limit(5) .load::<Kullanici>(&mut baglanti)?;

2. SQLx: Saf SQL ve Asenkron Güç​

SQLx bir ORM değildir; bir SQL istemcisidir. Size SQL yazma özgürlüğü tanırken, Rust'ın tip güvenliğinden ödün vermez. En büyük farkı, tamamen asenkron olması ve çalışma zamanında (runtime) bir veritabanına bağlanarak SQL sorgularınızı doğrulamasıdır.
Öne Çıkan Özellikleri:
  • Saf SQL: Karmaşık DSL yapılarını öğrenmek yerine bildiğiniz SQL'i yazarsınız.
  • Compile-time Verification: SQLx, derleme sırasında veritabanınıza bağlanır ve yazdığınız SQL sorgusunun veritabanı şemasıyla uyumlu olup olmadığını kontrol eder.
  • Tamamen Asenkron: tokio veya async-std ile mükemmel uyum sağlar.
Kod:
 // SQLx ile derleme zamanında doğrulanan SQL sorgusu let kullanici = sqlx::query_as!( Kullanici, "SELECT id, ad FROM kullanicilar WHERE id = $1", 1 ) .fetch_one(&havuz) .await?;

3. Diesel vs SQLx: Hangisini Seçmelisiniz?​

Doğru kararı vermek için projenizin önceliklerini belirlemeniz gerekir:
ÖzellikDieselSQLx
TürTam ORMSQL İstemcisi
Sorgu YazımıRust DSL (Fonksiyonel)Saf SQL
Asenkron DestekEklenti ile (diesel-async)Yerleşik (Native)
Hata KontrolüDerleme anında (Statik)Derleme anında (DB bağlantısı ile)
KurulumDiesel CLI ve Şema yönetimiDaha basit başlangıç

Neden Diesel Seçilmeli?​

  • Veritabanı şemanızla Rust modellerinizin her zaman senkronize kalmasını istiyorsanız.
  • SQL yazmaktan hoşlanmıyor ve Rust'ın tip sisteminin avantajlarını sonuna kadar kullanmak istiyorsanız.
  • Büyük ve karmaşık kurumsal projelerde şema yönetimini (migrations) merkezi bir sistemle yönetmek istiyorsanız.

Neden SQLx Seçilmeli?​

  • SQL bilginize güveniyor ve sorgularınız üzerinde tam kontrol istiyorsanız.
  • Projeniz baştan sona asenkron (async/await) mimari üzerine kuruluyorsa.
  • Veritabanı şemasına müdahale edemediğiniz (legacy) veya çok karmaşık Join işlemleri olan bir projedeyseniz.

4. Migration (Göç) Yönetimi​

Her iki araç da veritabanı şemanızı versiyonlamak için çözümler sunar:

  • Diesel: Kendi CLI aracı (diesel migration run) ile .sql dosyalarını yönetir.
  • SQLx: sqlx-cli aracını kullanır veya kod içerisinde sqlx::migrate!().run(&amp;pool).await? komutuyla uygulama başlarken otomatik göç sağlar.

Özet​

Eğer "Ben Rust yazmak istiyorum, veritabanı detaylarıyla uğraşmayayım" diyorsanız Diesel sizin için doğru limandır. Ancak "Ben SQL'imi kendim yazarım, yeter ki Rust bana tip güvenliği ve asenkron hız versin" diyorsanız SQLx en iyi tercih olacaktır.
 
Geri
Üst