23 puan yazan GN⁺ 2024-12-31 | 7 yorum | WhatsApp'ta paylaş
  • SQLite en yaygın şekilde dağıtılan ve kullanılan veritabanıdır

    • Kullanımda olan 1 trilyondan fazla SQLite veritabanı vardır ve bunun bakımını üç kişi yapar
    • Dış katkılara izin verilmez
  • SQLite, diğer tüm veritabanı motorlarının toplamından daha fazla kullanılır

    • Milyarlarca SQLite kopyası vardır ve her yerdedir
  • SQLite, en yaygın dağıtılan yazılım modüllerinden biridir

  • Hwaci, SQLite'ı geliştiren şirkettir ve müziğe de ilgi duyar

  • SQLite'ın başlangıcı bir ABD savaş gemisine dayanır

    • D. Richard Hipp (DRH), USS Oscar Austin adlı bir deniz kuvvetleri destroyeri için yazılım geliştiriyordu
    • Sunucu her çöktüğünde mevcut yazılımın çalışmayı durdurması sorunu vardı
    • DRH, sunucu olmadan da çalışabilecek bir veritabanı tasarladı
  • SQLite hukuki anlamda açık kaynak değildir

    • Açık kaynak, belirli bir tanım ve OSI tarafından onaylanmış bir lisans gerektirir
    • Bunun yerine SQLite public domain kapsamındadır ve açık kaynak lisanslarından daha az kısıtlamaya sahiptir
  • Dış katkılara izin verilmez

    • Yalnızca davet edilen kişiler katkıda bulunabilir ve katkıların public domain'e adanması gerekir
  • SQLite'ın test kodu

    • SQLite'ta her bir satır kod için 600 satırdan fazla test kodu vardır
    • Testler, kütüphanedeki tüm dalları %100 kapsar
  • SQLite testlerinin bir kısmı özeldir

    • TH3 adlı test paketi özeldir ve erişmek için SQLite Consortium'a katılmak gerekir
  • SQLite'ın iş modeli

    • Ücretli destek, bakım hizmetleri, konsorsiyum üyeliği ve ticari genişletmeler üzerinden gelir elde edilir
  • SQLite, davranış kuralları yerine bir etik kuralları metnine sahiptir

  • SQLite çok hızlıdır; bazı kullanım senaryolarında dosya sisteminden %35 daha hızlıdır

  • SQLite tek yazarlı bir modele sahiptir

    • Aynı anda birden fazla yazara izin vermez
  • Diğer veritabanlarından farkları

    • Varsayılan olarak rollback journal modunu kullanır ve foreign key'ler devre dışıdır
    • Zayıf tipleme kullanır; güçlü tipleme ise isteğe bağlıdır
  • SQLite'ın tipsiz olması rahatsız edici olabilir

    • Tip kısıtı olmadan veri eklenebilir
  • SQLite uyumluluğa çok büyük önem verir

    • Tüm SQLite 3 sürümleri, ilk sürümlerin veritabanı dosyalarını okuyup yazabilir
  • SQLite'ın yazarı DRH, mevcut sürüm kontrol sistemlerinin uygun olmadığına karar vererek Fossil'i geliştirdi

  • DRH, uçakta TAOCP kitabındaki algoritmalara dayanarak B-Tree kodladı

  • SQLite'ın telaffuzu için "Ess-Cue-El-Lite" önerilir, ancak resmî bir kılavuz yoktur

7 yorum

 
dalinaum 2024-12-31

SQLite sanıldığı kadar hızlı bir veritabanı değildir. Artık desteği sonlandırılmış olan MongoDB Realm çok daha hızlıdır. Görünüşe göre hız, insanlar için o kadar da önemli bir seçim ölçütü değildi.

 
dalinaum 2025-01-01

Realm’in neden hızlı olduğu sorulmuş ve bunun gerekçesi istenmişti; sanırım MongoDB desteği sonlandırırken yazıyı silmiş.

Bu yüzden, bir zamanlar bu işte çalışmış biri olarak aklımda kalan teknik nedenleri açıklamak istiyorum. En büyük avantajın, Realm’in SQLite’a kıyasla daha az bellek kullanması ve önbellek isabet oranının daha yüksek olması olduğunu düşünüyorum.

Realm, temelde kullanılan boyuta göre bellekte tutulacak kapasiteyi seçer. Bu yüzden kullanıcı büyük boyutlu veri türleri seçse bile, çoğu zaman birkaç bitlik küçük boyutlarla serileştirme yapar. Kullanıcı gerçekten daha büyük veriler kullandığında dönüştürme yapar.

Realm, aynı veri türlerini gruplayıp bitişik olarak saklar. Kullanıcılar çoğu zaman bir tablodaki tüm verilere erişmez, verilerin yalnızca bir kısmına art arda erişir. Yukarıda bahsettiğim küçük boyutlu kodlama sayesinde, önbellekte tek seferde bulunabilecek veri miktarı da çok daha fazla olur.

Realm, POJO nesnelerine hydrate uygulamaz; bunun yerine veriyi gerektiğinde getter ve setter üzerinden iletir. Bunun için Java tarafında bytecode seviyesinde işlem yapar. Protobuf benzeri veri türlerinin o dönemde Meta’nın Facebook uygulama istemcisinde kullanılmasının nedeni de bu hydrate sürecinin performans açısından büyük bir dezavantaj olması ve yalnızca gerekli verilere erişmenin avantaj sağlamasıydı.

Realm, SQLite’a kıyasla çoğu senaryoda çok daha hızlıydı, ancak bunun pazarda belirleyici ana etken olmadığını düşünüyorum.

Hatırladığım kadarıyla Realm’in en büyük rakibi, Facebook’un yaptığı Parse’tı. Sonrasında rakip Google’ın Firebase’i oldu. Bu ikisi yerel mobil veritabanı değil, uzaktaki verilere kolayca kayıt yapmayı sağlayan servisler. Realm’in rakibinin nasıl bu ikisi olabildiği düşünülebilir, ama gerçek kullanıcı için veriyi herhangi bir yere kaydetmek yeterliydi ve hız çok da önemli değildi sanırım.

Daha sonra Ericsson yatırım yapınca Realm’in kapsamı daraldı. Ericsson, Realm’in iOS’ta belli bir payı varken daha fazla özellik geliştirilmesini anlamlı bulmuyordu. Bunun yerine senkronizasyon çözümü olarak değerini daha fazla kabul etti. Ardından Realm, MongoDB ile birleşti.

 
aer0700 2024-12-31

SQLite'i seçmemin nedeninin büyük kısmı sanırım onunla uğraşmanın kolay olmasıydı.

 
dalinaum 2025-01-01

Bunun da önemli nedenlerden biri olduğunu düşünüyorum. Realm, thread-local tabanlı bir kullanım sunuyordu, otomatik güncellemeler sağlıyordu ve başka bir thread'de yeniden sorgulandığında aynı veriyi çok düşük bir maliyetle ilettiğini söylüyordu; ayrıca verilerin başka bir thread'e aktarılmamasını tavsiye ediyordu, ancak bunları açıklamak pek kolay değildi.

 
sanggi 2024-12-31

Görünüşe göre sqlite gerçekten çok çeşitli yerlerde kullanılıyor!

 
GN⁺ 2024-12-31
Hacker News görüşü
  • OSI'nin açık kaynağın ölçütü olmadığı yönünde bir görüş var. OSI'nin Açık Kaynak Tanımı faydalı olsa da eleştirilere ve tartışmalara açık. SQLite'in hukuken açık kaynak olmadığını söylemek yanlış bir iddia

    • OSI onayına dayanmak arzu edilir değil. OSI tarafından onaylanan lisanslar listesi yalnızca pratik ve politik bir tarihi yansıtıyor
    • SQLite'in açık kaynak olup olmadığı konusunda tartışma var. Kamu malına adama bir lisans olmadığı için OSD'yi karşılamıyor ama daha da açık
  • Blog, popüler bir konu hakkında yeniden ısıtılmış eski noktaları kullanarak görüntülenme ve etkileşim toplamaya çalışıyor gibi görünüyor

    • Blogun önceki gönderileri teknik derinlikten yoksun ve abartılı içeriklerle dolu
  • SQLite'in bir davranış kuralları (CoC) değil, bir etik kuralları (CoE) var. CoC, dış katkı yapanların davranışını kontrol etmek için kullanılan bir araçken CoE, SQLite geliştiricilerinin başkalarına karşı amaçladığı davranışı beyan ediyor

  • SQLite'in telaffuzu konusunda kafa karışıklığı var. "Ess-Cue-El-Lite" diye telaffuz edildiği söylense de "S-Q-L-ite" diyenler de var

  • SQLite isteğe bağlı olarak strict tabloları destekliyor. CREATE TABLE name (stuff TEXT) STRICT kullanılarak tip zorlaması yapılabiliyor

  • SQLite yalnızca bir SQL veritabanı değil, aynı zamanda bir NoSQL veritabanı olarak da kullanılabiliyor. Veriyi JSON sütunlarıyla saklama yaklaşımı faydalı

  • Richard Hipp ile birlikte proje yürütme deneyimi yaşayanlar var. Kendisi destek sözleşmeleri üzerinden istikrarlı gelir elde ediyor

  • SQLite'in bir sürümünde yapılan çok sayıda mikro optimizasyon sayesinde performans %50 arttı

  • SQLite hızlı prototipleme ve log dökümleri için kullanılıyor, ancak çoklu yazıcı istendiğinde zorlayıcı olabiliyor. Bu, SQLite'ten uzaklaşmanın başlıca nedenlerinden biri

  • SQLite tek yazarlı bir modele sahip. Redis de tek iş parçacıklı bir modele sahip

  • SQLite hakkındaki ilginç gerçeklerden biri, kullanıcılar geliştiriciyi gecenin bir yarısı aramaya başlayınca varsayılan önekin sqlite_ yerine etilqs_ olarak değiştirilmek zorunda kalınması