Өндөр хүчин чадалтай суулгагдсан DBMS libmdbx 0.10.4 болон libfpta 0.3.9 хувилбаруудыг гаргасан.

Libmdbx 0.10.4 (MDBX) сангууд нь өндөр хүчин чадалтай авсаархан суулгагдсан түлхүүр утгын мэдээллийн сан болон хоёрдогч болон нийлмэл индекс бүхий өгөгдлийн хүснэгтийн дүрслэлийг хэрэгжүүлдэг холбогдох libfpta 0.3.9 (FPTA) номын сантай болсон. MDBX дээр. Хоёр номын сан нь OSI зөвшөөрөгдсөн лицензийн дагуу тархдаг. Одоогийн бүх үйлдлийн систем, архитектурууд, мөн Оросын Эльбрус 2000-ыг дэмждэг.

Түүхийн хувьд libmdbx нь LMDB DBMS-ийн гүн гүнзгий дахин боловсруулалт бөгөөд найдвартай байдал, онцлог шинж чанар, гүйцэтгэлээрээ өвөг дээдсээсээ давуу юм. LMDB-тэй харьцуулахад libmdbx нь кодын чанар, API тогтвортой байдал, туршилт, автомат шалгалт зэрэгт ихээхэн ач холбогдол өгдөг. Зарим сэргээх боломж бүхий мэдээллийн сангийн бүтцийн бүрэн бүтэн байдлыг шалгах хэрэгслийг нийлүүлсэн.

Технологийн хувьд libmdbx нь CPU-ийн цөмд шугаман масштабтай ACID, хүчтэй өөрчлөлтийн цуваа, блоклохгүй унших боломжийг санал болгодог. Автомат нягтаршуулах, өгөгдлийн сангийн хэмжээг автоматаар удирдах, хүрээний асуулгын тооцоолол зэргийг дэмждэг. 2016 оноос эхлэн Positive Technologies компаниас төслүүдийг санхүүжүүлж, 2017 оноос бүтээгдэхүүндээ ашиглаж байна.

libmdbx нь C++ API, мөн Rust, Haskell, Python, NodeJS, Ruby, Go, Nim-д зориулсан сонирхогчдын дэмждэг хэлний холболтыг санал болгодог. Libfpta-ийн хувьд зөвхөн API тайлбар нь C/C++ толгой файл хэлбэрээр нийтэд нээлттэй байна.

9-р сарын XNUMX-ний өмнөх мэдээнээс хойш нэмсэн томоохон шинэчлэл, сайжруулалт, залруулга:

  • Дахин давтагдах боломжтой бүтцийг идэвхжүүлдэг.
  • Маш ховор тохиолдолд гүйлгээ хийх явцад гогцоо/царцаах тохиолдол гардаг алдааг зассан. Асуудлыг Positive Tecnologies-ийн мэргэжилтнүүд өөрсдийн бүтээгдэхүүний дотоод туршилтын үеэр илрүүлсэн.
  • Хуудасны модны бүх изоморф бус төлөв, мэдээллийн сан дахь GC агуулгыг шалгахын тулд тестүүдийг сайжруулж, туршилтын хувилбаруудыг өргөжүүлсэн.
  • C++ API-д нэмэлт "noexcept"-ыг засч, "cursor::erase()" аргын нэмэлт хэт ачааллыг нэмсэн, буферийн хэрэгжилтэд "std::string"-г ашиглаагүй, тохируулалтыг баталгаажуулсан. (CLANG libstdc++-д хамааралтай).
  • Асар их хэмжээний гүйлгээнд өгөгдлийг өөрчлөх үед гэнэтийн MDBX_PROBLEM алдаагаар илэрч байсан бохир хуудас асгарах алгоритм дахь регресс (өөрчлөгдсөн мэдээллийн сангийн хуудсуудыг сонгон гаргах) арилгасан.
  • Мэдээллийн санд зориудаар гэмтэл учруулсан тохиолдолд тогтвортой байдлыг хангах үүднээс хэд хэдэн шалгалтыг нэмж шаталсан туршилтыг хийсэн.
  • Тодорхойгүй BehaviorSanitizer болон Coverity Scan зэрэг жижиг анхааруулгыг зассан.
  • Номын сангийн хуучин хувилбаруудын үүсгэсэн мэдээллийн сангийн зураг доторх үүрлэсэн хуудсууд дахь хуучирсан, ашиглахаа больсон "P_DIRTY" дотоод тугийг шалгахыг зассан.
  • CMake скриптүүдэд LTO (холбоос цагийн оновчлол)-д шаардлагатай хөрвүүлэгчийн бүрэлдэхүүн хэсгүүдийн хайлт сайжирсан.
  • Нэг зэрэг уншигчдын дээд тоог 32767 болгон нэмэгдүүлсэн.
  • Valgrind болон AddressSanitizer ашиглах үед гүйцэтгэл сайжирсан.
  • Windows дээр MDBX_NOTLS горимд ажиллах үед SRW-lock-ийн рекурсив хэрэглээг (thread local storage ашиглахгүйгээр) устгаж, системийн цаг өөрчлөгдсөн тохиолдолд bootid үүсгэхийг засч, WSL1 болон WSL2 илрүүлэлтийг сайжруулж, DrvFS-ээр суулгасан 9-р төлөвлөгөөнд мэдээллийн санг нээх боломжтой.
  • Нийтдээ 160 файлд 57 гаруй өөрчлөлт хийж, ~5000 мөр нэмж, ~2500-ыг устгасан.

Би ялангуяа Эригон төслийн багт (Ethereum экосистем) хэт ашиглалтын хувилбаруудыг туршихад тусалсанд талархал илэрхийлье. libmdbx v0.10.0 хувилбарыг гаргаснаас хойш таван сарын хугацаанд Erigon суулгац бүрт 1-2 TB-ийн өгөгдлийн сангийн эзэлхүүнтэй (Ethereum зангилааны 7% -д ашигладаг) мэдээллийн сангийн авлигын тухай зөвхөн гурван мэдээлэл хүлээн авсан нь чухал юм. Энэ нь програм хангамжийн алдаа биш харин гадны шалтгааны улмаас үүссэн: хоёр тохиолдолд шалтгаан нь RAM-ийн доголдол, гуравдугаарт BTRFS ашиглан хадгалах дэд системийн тодорхой тохиргоонд өгөгдлийг дахин тохируулахад алдаа гарсан.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх