Yüksek performanslı yerleşik DBMS libmdbx 0.10.4 ve libfpta 0.3.9'un sürümü

Libmdbx 0.10.4 (MDBX) kitaplığı, yüksek performanslı kompakt gömülü anahtar/değer veritabanının ve ikincil ve bileşik dizinlerle verilerin tablo halinde gösterimini uygulayan ilişkili libfpta 0.3.9 (FPTA) kitaplığının uygulanmasıyla piyasaya sürüldü. MDBX'in üstünde. Her iki kütüphane de OSI onaylı lisanslar altında dağıtılmaktadır. Mevcut tüm işletim sistemleri ve mimarilerin yanı sıra Rus Elbrus 2000 de desteklenmektedir.

Tarihsel olarak libmdbx, LMDB DBMS'nin derinlemesine yeniden işlenmesidir ve güvenilirlik, özellik seti ve performans açısından atalarından üstündür. LMDB ile karşılaştırıldığında libmdbx, kod kalitesine, API kararlılığına, testlere ve otomatik kontrollere büyük önem verir. Bazı kurtarma yetenekleriyle birlikte veritabanı yapısının bütünlüğünü kontrol etmeye yönelik bir yardımcı program sağlanır.

Teknoloji açısından libmdbx, ACID, güçlü değişiklik serileştirmesi ve CPU çekirdekleri arasında doğrusal ölçeklendirmeyle engellenmeyen okumalar sunar. Otomatik sıkıştırma, otomatik veritabanı boyutu yönetimi ve aralık sorgusu tahmini desteklenir. 2016 yılından bu yana Positive Technologies tarafından projelere fon sağlanmakta ve 2017 yılından bu yana ürünlerinde kullanılmaktadır.

libmdbx, Rust, Haskell, Python, NodeJS, Ruby, Go ve Nim için meraklıların desteklediği dil bağlamalarının yanı sıra bir C++ API'si sunar. Libfpta için yalnızca API açıklaması, C/C++ başlık dosyası biçiminde kamuya açıktır.

9 Mayıs'taki önceki haberden bu yana eklenen önemli yenilikler, iyileştirmeler ve düzeltmeler:

  • Tekrarlanabilir yapılara olanak tanır.
  • Çok nadir durumlarda bir işlemin gerçekleştirilmesi sırasında döngü/donmanın meydana gelmesine neden olan bir hata düzeltildi. Sorun, Positive Technologies uzmanları tarafından kendi ürünlerinin dahili testleri sırasında tespit edildi.
  • Testler iyileştirildi ve test senaryoları, sayfa ağacının ulaşılabilir tüm izomorfik olmayan durumlarını ve veritabanı içindeki GC içeriklerini kontrol edecek şekilde genişletildi.
  • C++ API'sinde fazladan bir "no Except" düzeltildi, "cursor::erase()" yöntemi için ek aşırı yükler eklendi, arabelleklerin uygulanmasında hizalamayı sağlamak için "std::string" kullanımından kaçınıldı (CLANG libstdc++ ile ilgilidir).
  • Büyük işlemlerde verileri değiştirirken nadir görülen beklenmeyen bir MDBX_PROBLEM hatasıyla ortaya çıkan, kirli sayfa boşaltma algoritmasındaki bir gerileme (değişen veritabanı sayfalarının seçici olarak çıkarılması) ortadan kaldırıldı.
  • Veritabanına kasıtlı zarar verilmesi durumunda stabiliteyi sağlamak için bir dizi kontrolün eklenmesiyle bir aşamalı test gerçekleştirildi.
  • UnDefinitionBehaviorSanitizer ve Coverity Scan sorunlarıyla ilgili küçük uyarılar düzeltildi.
  • Kütüphanenin eski sürümleri tarafından oluşturulan veritabanı görüntülerinin içindeki iç içe sayfalarda eski ve artık kullanılmayan dahili işaret “P_DIRTY”nin kontrol edilmesi düzeltildi.
  • CMake komut dosyalarında, LTO (bağlantı süresi optimizasyonu) için gereken derleyici bileşenlerinin aranması iyileştirildi.
  • Maksimum eşzamanlı okuyucu sayısı 32767'ye çıkarıldı.
  • Valgrind ve AdresSanitizer kullanıldığında performans iyileştirildi.
  • Windows'ta, MDBX_NOTLS modunda çalışırken (iş parçacığı yerel depolaması kullanılmadan) SRW kilidinin yinelemeli kullanımı ortadan kaldırıldı, sistem zamanı değiştiyse önyükleme kimliği oluşturma düzeltildi, WSL1 ve WSL2 algılaması iyileştirildi ve DrvFS aracılığıyla monte edilmiş Plan 9'da bir veritabanı açma eklendi.
  • Toplamda 160 dosyada 57'tan fazla değişiklik yapıldı, ~5000 satır eklendi, ~2500 satır silindi.

Aşırı kullanım senaryolarının test edilmesindeki yardımlarından dolayı Erigon proje ekibine (Ethereum ekosistemi) özellikle teşekkür etmek isterim. Her Erigon kurulumunda (Ethereum düğümlerinin %0.10.0'sinde kullanılan) 1-2 TB veri tabanı hacmine sahip libmdbx v7'ın piyasaya sürülmesinden bu yana beş ay içinde yalnızca üç veri tabanı bozulması raporunun alınmış olması önemlidir. yazılım hataları değil, harici nedenlerden dolayı meydana geldi: iki durumda neden RAM arızalarıydı, üçüncüsünde ise BTRFS kullanılarak depolama alt sisteminin belirli bir yapılandırmasındaki verilerin sıfırlanmasındaki bir hataydı.

Kaynak: opennet.ru

Yorum ekle