5 puan yazan GN⁺ 2023-12-16 | 1 yorum | WhatsApp'ta paylaş

bashdb Temelleri

  • En basit veritabanı programı olan bashdb, iki bash fonksiyonundan oluşur.
  • db_set fonksiyonu verileri dosyaya ekler, db_get fonksiyonu ise verileri sorgular.
  • bashdb'nin sorunları arasında dayanıklılık, atomiklik, yalıtım ve performans yer alır.

bashdb'yi ACID hale getirmek

  • ACID, veritabanı işlemlerinin atomiklik, tutarlılık, yalıtım ve dayanıklılık özelliklerini ifade eder.
  • bashdb'nin dayanıklılığını iyileştirmek için db_set içine sync komutu eklenir.
  • Yalıtım için flock programı kullanılarak dosya kilitleme eklenir.

Dayanıklılık

  • fsync ve fdatasync, yazma tamponunu diske boşaltan sistem çağrılarıdır.
  • sync komutu tüm "kirli" sayfaları diske boşaltır; -d bayrağı ise fdatasync çağırır.

Yalıtım

  • flock, bashdb'ye çok süreçli yalıtım sağlamak için kullanılır.
  • flock, dosya kilitleme için kullanılan bir Linux programıdır; -s bayrağıyla eşzamanlı okumaya izin verir.

Kötü haber

  • bashdb ile atomikliği garanti etmenin basit bir yolu bulunamaz.
  • Performansı artırmak için O(n) algoritmasının iyileştirilmesi gerekir.

Depolama motoru

  • Depolama motorunun amacı, kalıcı depolamaya veri okuyup yazmak için bir soyutlama sağlamaktır.
  • Depolama motoru tasarımı, disk G/Ç'sini ve disk seek işlemlerini en aza indirmeyi hedefler.

Değiştirilebilir B-ağacı

  • B-ağacı, disk G/Ç'sini ve seek işlemlerini en aza indiren, BST'nin uzamsal yerelliğe sahip bir türevidir.
  • B-ağacı, düğümlerin daha fazla çocuğa sahip olmasına izin veren genelleştirilmiş bir BST'dir.

Değiştirilemez LSM ağacı

  • LSM ağacı, yazma ağırlıklı iş yükleri için avantajlı olan, sıralı şekilde yazılan değiştirilemez bir veri yapısıdır.
  • LSM ağacı verileri bellekte tamponlar ve belirli bir kapasiteye ulaştığında sıralanmış SSTable olarak diske boşaltır.

Bloom filtresi

  • Bloom filtresi, bir öğenin kümede bulunmadığını verimli şekilde kontrol etmeyi sağlayan olasılıksal bir veri yapısıdır.
  • Bloom filtresi hash fonksiyonlarıyla çalışır ve alan karmaşıklığı O(log n)'dir.

Write Ahead Log

  • WAL, tüm işlem operasyonlarını kaydeden özel bir dosyadır; veritabanı süreci başladığında durumu yeniden oluşturur.

Yalıtım

  • Yalıtımı sağlamak için kötümser kilitleme, iyimser kilitleme veya MVCC kullanılabilir.
  • ANSI/ISO standardı SQL 92, çeşitli okuma yalıtım seviyeleri tanımlar.

Dağıtık sistemler

  • Dağıtık sistemler karmaşıklık ekler; erişilebilirlik ve yatay ölçekleme için veriler birden fazla makineye dağıtılabilir.
  • CAP teoremine göre bir sistem, tutarlılık, erişilebilirlik ve bölünme toleransından yalnızca ikisini garanti edebilir.

Tutarlı hashleme

  • Tutarlı hashleme, düğüm ekleme veya çıkarma sırasında taşınması gereken öğe miktarını azaltan bir veri bölümleme yöntemidir.

GN⁺ görüşü:

  • Veritabanlarının temel sorunlarını ve ACID özelliklerini anlamak, veritabanı mühendisliğinin özüdür.
  • bashdb örneği, gerçek veritabanı sistemlerinde ortaya çıkan sorunları anlamaya yardımcı olur.
  • Depolama motorları ve dağıtık sistem tasarımı, veritabanının performansını ve güvenilirliğini belirleyen önemli unsurlardır.

1 yorum

 
GN⁺ 2023-12-16
Hacker News görüşü
  • Birinci yorum özeti:

    • LSM tabanlı veritabanlarının özelliklerinden biri, silinmiş kayıtların veya tombstone'ların uzun süre kalabilmesidir.
    • Tombstone'lar yalnızca son seviyede atlanmalıdır; tüm seviyelerde atlanmamalıdır.
    • Aksi halde üst seviyelerdeki tombstone'lar kaldırılır ve alt seviyelerdeki öğeler yeniden görünebilir.
    • RocksDB gibi veritabanları bu sorunu optimizasyonlarla çözmeye çalışır.
  • İkinci yorum özeti:

    • Dağıtık sistemleri öğrenmekten kaçınmak riskli olabilir.
    • Aslında önemsiz olmayan tüm üretim sistemleri dağıtık sistemdir.
    • Veritabanı bir replikasyon kümesiyse, bu bir dağıtık sistemdir.
    • Dağıtık sistemleri öğrenmek istiyorsanız jepsen.io ve raft.github.io kaynaklarına bakın.
  • Üçüncü yorum özeti:

    • Tutarlılık konusunda veritabanı tutarlılığı ve uygulama tutarlılığı diye iki kavram vardır.
    • Tek bir tabloda ACID'i (atomiklik, tutarlılık, izolasyon, dayanıklılık) sağlayabilirsiniz, ancak birden fazla tabloya yayılan yazmalarda başarısız olabilirsiniz.
    • Birden fazla tabloyu aynı anda güncelleyen işlemlerle uğraşırken, tüm tablolar ya aynı anda güncellenmeli ya da hiçbiri güncellenmemelidir.
  • Dördüncü yorum özeti:

    • Bu yazı, veritabanı inşasıyla ilgili çeşitli kavramlara dair harika bir genel bakış sunuyor.
    • SIMD ile tek bir makinede performans artırmaktan konsensüs algoritmalarına kadar uzanan konuları ele alıyor.
    • Veritabanı güvenilirliği ve dağıtık sistemlerde uygulanan biçimsel yöntemlere de değiniliyor.
    • Amazon S3 ekibinin TLA+ kullanarak modelleme yapma biçimini anlatan ilginç bir makale var.
  • Beşinci yorum özeti:

    • Birçok kişi veritabanlarını öğrenmek için SQL öğreniyor, ancak B-tree'leri anlamak RDBMS'lerin güçlü ve zayıf yönlerini daha iyi kavramayı sağlar.
    • İnsanlar veritabanını hızlandırmak için indeks eklemeye çalışıyor, ama bu aslında çoğu zaman sadece problemi gizliyor.
    • Bazı problemler B-tree'ler için uygundur, ancak çoğu problem değildir.
    • SQL, uzaktaki bir B-tree sistemi için yalnızca bir sorgu arayüzüdür.
  • Altıncı yorum özeti:

    • Birçok geliştirici bir noktada kendi küçük veritabanını yapmayı dener.
    • Bu süreç sayesinde neyin işe yaramadığını çok şey öğrenebilirsiniz.
    • Kendi veritabanınızı yapmak, mevcut çözümlere duyulan saygıyı artırmaya yardımcı olur.
    • Veriyi diskten hızlı ve güvenilir şekilde taşımak zor bir iştir.
  • Yedinci yorum özeti:

    • Bash sürümünde atomiklik, dosyayı geçici bir dosyaya kopyalayıp ardından düzenleyerek ve sync; mv; sync kullanarak sağlanabilir.
  • Sekizinci yorum özeti:

    • Belge API'si MongoDB'ye, leadersız replikasyon Cassandra'ya ve core-per-thread mimarisi ScyllaDB'ye benzeyen çok hoş bir tasarım.
    • Tüm bunlar Rust ile uygulanmış.
  • Dokuzuncu yorum özeti:

    • 'Database Internals' adlı kitap şaşırtıcı derecede iyidir ve iç yapıya derinlemesine bir inceleme sunar.
    • Buna benzer başka kitaplar olup olmadığı soruluyor.
  • Onuncu yorum özeti:

    • 'Database Design and Implementation' adlı kitap da, Java ile yazılmış çok sayıda örnekle birlikte, son derece iyi bir okuma.
    • Gerçek araştırma için Andy (Pavlo), Viktor Leis, Thorsten Grust ve Thomas Neumann gibi isimlerin çalışmaları tavsiye ediliyor.