İçeriğe geç
edumintsBlog
Yazılım3 dk okuma

db-branch ile ZFS Üzerinde Saniyeler İçinde Veritabanı Dalı

Kaynak: Hacker News

Paylaş
YazılımEdumints Blog
İçindekiler 3 başlık

Kod yazarken yeni özellik denemek için git branch açmak saniyeler sürer. Aynı rahatlığı gigabaytlarca büyüklükteki MySQL veya PostgreSQL veritabanında aradığında işler genelde sarpa sarar. Veriyi dışa aktarmak, yeni sunucu ayağa kaldırmak ve kopyalama işleminin bitmesini beklemek saatler alabilir. Sıfırdan geliştirilen bağımsız ve açık kaynaklı db-branch projesi, bu darboğazı ZFS dosya sisteminin kopyalama mekanizmasıyla (copy-on-write) aşmayı hedefliyor. Apache-2.0 lisansıyla sunulan araç, kendi sunucularında barındırabileceğin anlık veritabanı dalları oluşturuyor.

Kopyalamadan Çoğaltma Mimarisi#

Geleneksel yöntemlerde test veritabanı hazırlarken tüm tablolar diskte baştan sona yeniden yazılır. db-branch ise ZFS klonlarını temel alarak veriyi fiziksel olarak kopyalamadan saniyeler içinde yeni dal (branch) üretir. Sanal makineler arasında kümelenen bu yapı, bağlantı yönlendirmesini ProxySQL üzerinden gerçekleştirir. Şu an beta aşamasında olan projenin komut satırı detayları veya API yapısı 1.0 sürümüne kadar değişebilir. Ancak bugünkü haliyle bile doğrudan kullanılabiliyor.

Oluşturulan dallar başlangıçta ana veritabanıyla aynı veri bloklarını paylaşır. Sadece yeni dal üzerinde yapılan değişiklikler diske ayrıca yazılır. Böylece devasa boyuttaki veritabanlarını bile fazladan disk alanı harcamadan çoğaltabilirsin.

AI Ajanları ve CI Süreçlerinde Özgürlük#

Veritabanı şemasında değişiklik (migration) denerken veya otonom AI ajanlarına veritabanı erişimi verirken en büyük korku mevcut veriyi bozmaktır. Yanlış kurgulanan sorgular tüm geliştirme ortamını kilitleyebilir. Her pull request (PR) veya AI ajanı görevine izole veritabanı kopyası vermek bu riski ortadan kaldırır.

Ajanı veritabanına salıp ne yapacağını özgürce izleyebilirsin. Tablolar silinse veya veriler bozulsa bile ana veritabanı bu durumdan etkilenmez. İşin bittiğinde açtığın dalı sıfırlayabilir, geçmişteki herhangi bir noktaya geri döndürebilir ya da tamamen çöpe atabilirsin. CI boru hatlarında her test koşumu birbirini beklemeden izole veritabanı üzerinde çalışır.

Kendi Bilgisayarında İki Dakikada Deneme#

Aracı hiçbir şey kurmadan incelemek istersen tarayıcı içinde çalışan canlı konsol demosunu kullanabilirsin. Gerçek kurulum deneyimi için Linux ve ZFS gerektiğinden, Mac veya Windows makinelerde Multipass ile hızlıca Ubuntu 24.04 sanal makinesi ayağa kaldırabilirsin.

Aşağıdaki komut 4 GB bellekli ve 30 GB diskli sanal makineyi oluşturur, dosya tabanlı ZFS havuzunu hazırlar ve içine shop adında küçük bir örnek MySQL 8.4 veritabanı yükler:

multipass launch 24.04 --name db-branch-eval --memory 4G --disk 30G --timeout 900 \
  --cloud-init https://raw.githubusercontent.com/db-branch/db-branch/main/scripts/eval-cloud-init.yaml
multipass exec db-branch-eval -- cloud-init status --wait
multipass exec db-branch-eval -- cat /etc/motd
multipass shell db-branch-eval

Windows (PowerShell veya cmd) kullanıyorsan ilk komuttaki ters eğik çizgiyi (\) kaldırıp tüm satırı tek seferde çalıştırmalısın. Apple Silicon gibi arm64 mimarili cihazlarda Oracle minimal MySQL paketi sunmadığı için yaklaşık 800 MB indirme yapılır; Intel makinelerde bu boyut 80 MB civarındadır. Komuttaki --timeout 900 parametresi yavaş bağlantılarda işlemin yarıda kesilmesini önler.

Kurulum yaklaşık iki dakikada tamamlandığında sanal makine kabuğuna geçip ilk dalını şu komutla açabilirsin:

sudo db-branch branch create try --base shop --ttl 1h --record

Buradaki parametreler ve deneme ortamının özellikleri işini oldukça kolaylaştırır:

  • --base shop: Dalın hangi temel veritabanından üretileceğini belirler.
  • --ttl 1h: Açılan dalın bir saat sonra otomatik silinmesini sağlar.
  • --record: Dal üzerindeki işlemleri kaydederek istediğin ana geri dönmene olanak tanır.
  • Yönetim konsolu: İlk girişte admin kullanıcı adı ve admin parolası kullanılır, ardından sistem yeni parola belirlemeni ister.
  • Modüller: Deneme sürümünde geçmiş (history) modülü açık gelir, ücretli modüller ise anahtar gerektirmeden 30 gün boyunca çalışır.

Dosya tabanlı ZFS havuzu normal disklere göre daha yavaş çalıştığından gerçek veriler için önerilmez. Kurulum sırasında sorun çıkarsa /etc/motd çıktısına bakabilir, detayları görmek için sanal makinede sudo tail -n 30 /var/log/cloud-init-output.log komutunu çalıştırabilirsin. Denemen bittiğinde multipass delete --purge db-branch-eval komutuyla sanal makineyi kalıcı olarak silebilirsin.

Kaynak ve atıf

Bu yazı, Hacker News üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:

  • github.com/db-branch/db-branch