3 puan yazan GN⁺ 2024-11-16 | 1 yorum | WhatsApp'ta paylaş

SQLite İndeks Görselleştirmesi: Yapı

  • İndekslerin önemi: SQLite; tarayıcılarda, mobil uygulamalarda ve işletim sistemlerinde yaygın olarak kullanılan bir VTYS'dir ve indeks yapısını anlamakla diskte ve bellekte nasıl saklandığını incelemek için uygundur.

Düğüm ve sayfa yapısı

  • B-ağacı yapısı: SQLite'ın indeksleri B-ağacı yapısında saklanır ve her düğüm birden fazla çocuğa sahiptir.
  • Sayfalar ve hücreler: Sayfalar hücre verilerini saklar ve sağdaki çocuk sayfaya bir bağlantı içerir. Hücreler ise indeks verisi, rowId ve soldaki çocuk sayfaya bağlantı içerir.

SQLite kaynak kodu analizi

  • Kod örneği: İndeks analizi için bir fonksiyon yazılıyor. Örneğin sqlite3DebugBtreeIndexDump fonksiyonu, seçilen indeksin içeriğini okuyup yazdırır.
  • Docker kullanımı: Docker kullanılarak indeks dökümü test edilebilir.

İndeks görselleştirme

  • Görselleştirme aracı: İndeks yapısını görselleştirmek için d3-org-tree kütüphanesi kullanılmak istendi, ancak yapıyı metinle göstermek daha basittir.
  • PHP ImageMagick: PHP'nin ImageMagick eklentisi kullanılarak tasarım ve aralığı kontrol edilebilen görseller üretilir.

Çeşitli indeks örnekleri

  • Temel indeks: 1 kayıttan oluşan basit bir indeks.
  • Farklı kayıt sayıları: 1.000 ve 1.000.000 kayıt içeren indeksler.
  • Sıralama yönü karşılaştırması: ASC ve DESC sıralama yönlerine sahip indekslerin karşılaştırılması.
  • İfade tabanlı veri: İfadeler kullanılarak indeks oluşturulması.
  • NULL değerleri içeren benzersiz indeks: SQLite, NULL değerleri olan benzersiz indeksleri destekler.
  • Kısmi indeks: NULL değerler filtrelenerek indeks oluşturulması.
  • Çok sütunlu indeks: Birden fazla sütun içeren indeks oluşturulması.

İndeks optimizasyonu

  • VACUUM ve REINDEX: Mevcut indeksleri optimize etmek için kullanılan komutlar.
  • Metin verisi: Kısa dizeler doğrudan indeks hücresinde saklanırken, uzun metinler ayrı olarak saklanır.
  • Kayan noktalı veri: Kayan noktalı veri içeren indeks oluşturulması.

Sonuç

  • İndeks yapısını anlama: SQLite'ın indeks yapısı ile B-ağacında verinin nasıl saklandığı ve erişildiği anlaşılır.
  • Görselleştirmenin önemi: Görselleştirme sayesinde farklı indeksler analiz edilip karşılaştırılabildi.
  • Gelecek planları: İndeks tabanlı arama görselleştirmesi ve ilginç SQL sorgularını inceleme planlanıyor.

1 yorum

 
GN⁺ 2024-11-16
Hacker News görüşleri
  • SQLite tablosundaki her satır varsayılan olarak benzersiz bir rowId'ye sahiptir; bu da açıkça tanımlanmadığında birincil anahtar gibi çalışır

    • Hatta gerçek bir birincil anahtar olsa bile rowId kullanılır
    • WITHOUT ROWID tablolarının birincil anahtar indeksini görselleştirmek iyi olurdu
    • İki indeks benzer görünebilir, ancak daha az sayfaya sahip ikinci indeks daha hızlı olabilir
    • Düğüm sayısının az olması mutlaka "daha hızlı" olduğu anlamına gelmez
    • En önemli şey ağacın yüksekliğidir
    • İkinci en önemli şey, indekste değer bulunduğunda ne olduğudur
    • Kalan kısmın ayrı bir tablodan (rowid) yüklenmesi gerekip gerekmediği ya da verinin zaten orada olup olmadığı (ROWID olmadan), özellikle aralık sorgularında önemlidir
  • Veritabanı yönetim sistemlerinin (DBMS) diskte ve bellekte indeksleri nasıl saklayıp geri getirdiğini görmek istedim

    • Deney konusu olarak SQLite'ı seçtim
    • SQLite'ın her şeyi ele alış biçiminde bazı küçük tuhaflıklar var
    • Özellikle de sorgu işleme tarafında
    • SQLite, performanstan çok sadeliği tercih etme eğiliminde olduğu için diğer veritabanlarından farklı şekilde uygulanır
    • SQLite diğer veritabanlarıyla rekabet etmez
    • JSON ve XML dosyalarıyla ve kalıcı depolama için rekabet eder
    • Bu da SQLite'ın herhangi bir şeyi uygulama biçiminin, gerçek veritabanlarının nasıl çalıştığı hakkında neredeyse hiçbir şey söylemediği anlamına gelir
  • Site çok kolay okunuyor, bu yüzden okumak istiyorum

  • "indexes", hem "to index" fiilinin üçüncü tekil şahıs geniş zaman biçimi hem de "index" isminin çoğul hali olarak kullanılır

    • Buna karşılık "indices", özellikle matematik ve bilim alanlarında sık kullanılan geleneksel çoğul biçimdir
    • Genel İngilizcede "indexes" yaygındır, ancak teknik alanlarda dilsel doğruluğu korumak için "indices" tercih edilir
    • "indices" kullanımı, indeksleme işlemi ile indekslerin çoğulunu ayırarak daha fazla açıklık sağlar
  • PostgreSQL'in aynı işi nasıl yaptığını görüp karşılaştırmak ve notlar eklemek iyi olabilir

  • yEd için tgf üretmek, daha az emekle daha fazla düzen seçeneği elde etmeyi sağlayabilir