LMDB 1.0: Sunucusuz ve yazma öncesi günlüğü olmayan veritabanı

Ücretsiz gömülü veritabanı LMDB (Lightning Memory-Mapped Database) sürüm 1.0'a ulaştı. İlk büyük sürümle birlikte geliştiriciler, kitaplığın API'sini ve davranışını yeniden belgeliyor ve güncellenmiş belgeler sağlıyor. Mevcut uygulamalar için 0.9 serisinden ayrı bir geçiş kılavuzu bulunmaktadır.

Reklamdan sonra devamını okuyun

LMDB, yerel veri depolamaya yönelik uygulamaya gömülü bir anahtar/değer veritabanı kitaplığıdır. Dizin hizmetleri, önbellekler veya meta veriler için ayrı bir sunucu işlemine gerek duymadan, işlem güvenli bir veritabanına ihtiyaç duyan geliştiricilere yöneliktir. Klasik veritabanı sistemlerinden farklı olarak LMDB, verileri kendi arabellek önbelleğine yüklemez, ancak tüm veritabanını bellek eşlemeyi kullanarak sürecin sanal adres alanına eşler. Okuma erişimi, ek bellek ayırmaları veya kopyalama işlemleri olmaksızın, doğrudan eşlenen bellek alanlarına gerçekleşir.

LMDB'nin temel prensibi sürüm 1.0 ile değişmeden kalmıştır. Kütüphane, veri yapısı olarak bir B ağacı kullanır ve önbelleğe almayı tamamen işletim sistemine bırakır. Veri kayıtları doğrudan bellek görüntüsünden okunduğu için ara adımlar malloc() veya memcpy() Verileri okurken. Bu, yönetim yükünü azaltır ve özellikle okuma yoğunluklu iş yüklerinde performansı artırabilir. Bunun temeli, dosya içeriklerinin sanal bellekte şeffaf bir şekilde görüntülendiği işletim sisteminin bellek eşleme işlevidir.

İşlem modeli de aynı kalıyor. LMDB, ACID özellikleri sunar ve Çok Sürümlü Eşzamanlılık Kontrolüne (MVCC) dayanır. Yeni veriler, yazma sırasında kopyalama kullanılarak yazılır, böylece mevcut sayfaların üzerine hiçbir zaman yazılmaz. Bu, okuyucunun her zaman tutarlı bir veri tabanı görmesi, yazma süreçlerinin ise paralel olarak hazırlanabileceği anlamına gelir. Tipik bir örnek, bir yönetim aracı değişiklikleri yazarken sürekli olarak konfigürasyon verilerini okuyan bir hizmettir: okuyucular kilitlemeden çalışmaya devam eder ve yazma işlemi tarafından engellenmez.

LMDB'nin eşzamanlılık modeli diğer birçok veritabanından farklıdır. Herhangi bir sayıda işlem veya iş parçacığı aynı anda okuyabilir ancak yazma işlemleri tamamen serileştirilir. Herhangi bir zamanda yalnızca bir yazma işlemi etkin olabilir. Bu, sistemin rakip yazarlar arasındaki çıkmazları ortadan kaldırdığı anlamına gelir. Okuyucular yazarları engellemez ve okuyucuların devam eden yazma işlemlerini beklemesi gerekmez.

Geliştiriciler ayrıca kasıtlı olarak yazma öncesi günlüğünden veya yalnızca ekleme protokolünden kaçınırlar. LMDB, günlük dosyalarını düzenli olarak birleştirmek veya veritabanlarını sıkıştırmak yerine, veritabanının kendi içindeki boş sayfaları tutar ve bunları daha sonraki yazma işlemleri için yeniden kullanır. Bu, bakım gerektirmeyen günlük tabanlı işlemlerde olabileceği gibi, veritabanının normal çalışma sırasında süresiz olarak büyümediği anlamına gelir.

Reklamdan sonra devamını okuyun

GitHub'daki sürüm notları ve belgeler bazı sınırlamalara işaret ediyor: Uzun süren okuma işlemleri, halihazırda yayınlanmış sayfaların yeniden kullanılmasını engelleyebilir. Bu, veritabanı dosyasının gereksiz yere büyümesine neden olabilir. Geliştiriciler bu nedenle uzun süren işlemlerden kaçınmalı ve iptal edilen işlemleri, artık okuyucu girişleri açısından düzenli olarak kontrol etmelidir. Bu, diğer şeylerin yanı sıra, işlev mdb_reader_check aynı zamanda alet mdb_stat mevcut.

Ağ dosya sistemlerinde kullanılması da önerilmez. LMDB, işletim sisteminin bellek eşlemesine ve dosya kilitlerine dayandığından, burada senkronizasyon sorunları ortaya çıkabilir. Belgelere göre, aynı veritabanının bir süreç içinde birden çok kez açılması da sorunlu olarak kabul ediliyor.


(fo)


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir