Rakirina DBMS-ya libmdbx 0.10.4 û libfpta 0.3.9-ê ya bi performansa bilind

Pirtûkxaneyên libmdbx 0.10.4 (MDBX) bi bicihanîna databasek nirx-kilît-nirxê ya tevhevkirî ya bi performansa bilind, û pirtûkxaneya têkildar a libfpta 0.3.9 (FPTA), ku temsîla tabloyî ya daneyan bi navnîşên duyemîn û pêkhatî pêk tîne, hatin berdan. li ser MDBX. Her du pirtûkxane di bin lîsansên pejirandî yên OSI de têne belav kirin. Hemî pergalên xebitandinê û mîmariya heyî, û her weha Elbrus 2000-a rûsî têne piştgirî kirin.

Ji hêla dîrokî ve, libmdbx ji nû ve vejandinek kûr a LMDB DBMS ye û di pêbawerî, komek taybetmendî û performansê de ji bav û kalê xwe bilindtir e. Li gorî LMDB, libmdbx gelek giraniyê dide ser kalîteya kodê, aramiya API, ceribandin, û kontrolên otomatîk. Karûbarek ji bo kontrolkirina yekrêziya avahiya databasê bi hin kapasîteyên vegerandinê re tê peyda kirin.

Ji hêla teknolojiyê ve, libmdbx ACID, serialîzasyona guheztinê ya bihêz, û xwendinên ne-astengkirî bi pîvana xêzikî li seranserê navikên CPU-yê pêşkêşî dike. Tevlihevkirina otomatîkî, rêveberiya mezinahiya databasa otomatîk, û texmîna pirsiyariya rêzê piştgirî dikin. Ji sala 2016-an vir ve, proje ji hêla Teknolojiyên Pozîtîv ve têne fînanse kirin û ji 2017-an vir ve di hilberên xwe de têne bikar anîn.

libmdbx ji bo Rust, Haskell, Python, NodeJS, Ruby, Go, û Nim C++ API pêşkêşî dike, û her weha girêdanên zimanî yên ku ji hêla enthusiast ve têne piştgirî kirin. Ji bo libfpta, tenê danasîna API-ê di forma pelê sernavê C/C++ de bi gelemperî heye.

Nûbûn, çêtirkirin û sererastkirinên sereke ji nûçeyên berê yên 9ê Gulanê hatine zêdekirin:

  • Avahiyên ji nû ve hilberandin çalak dike.
  • Çewtiyek rast kir ku ji ber vê yekê, di rewşên pir kêm de, di dema danûstendinek danûstendinê de lûkek / cemidandin çêdibe. Pirsgirêk ji hêla pisporên Teknolojiyên Positive di dema ceribandina navxweyî ya hilberên xwe de hate nas kirin.
  • Test hatine baştir kirin û senaryoyên ceribandinê hatine berfireh kirin da ku hemî rewşên ne-îsomorfîk ên gihîştî yên dara rûpelê û naveroka GC-yê di hundurê databasê de kontrol bikin.
  • Di API-ya C++ de, "noexcept"-yek zêde hatî rast kirin, ji bo rêbaza "cursor::erase()" barkirinên zêde hatine zêdekirin, pêkanîna tamponan ji karanîna "std::string" xilas bûye da ku lihevhatinê misoger bike. (ji bo CLANG libstdc ++ re têkildar).
  • Di algorîtmaya rijandina rûpela qirêj de paşveçûnek (derxistina bijartî ya rûpelên databasê yên guheztin) ku bi xeletiyek MDBX_PROBLEM-a neçaverêkirî xuya bû dema ku daneyan di danûstendinên mezin de diguhezîne, hate rakirin.
  • Testek qonaxek bi lêzêdekirina hejmarek kontrolê hate kirin da ku aramî di bûyera zirara bi mebest a databasê de piştrast bike.
  • Hişyariyên piçûk rast kirin UndefinedBehaviorSanitizer and Coverity Scan.
  • Di rûpelên hêlînkirî yên hundurê wêneyên databasê de ku ji hêla guhertoyên kevntir ên pirtûkxaneyê ve hatine afirandin, ala navxweyî ya kevnar û êdî nayê bikar anîn "P_DIRTY" rast kir.
  • Di nivîsarên CMake de, lêgerîna hêmanên berhevkar ên ku ji bo LTO (optimîzasyona lînk-demê) hewce ne, çêtir bûye.
  • Hejmara herî zêde ya xwendevanên hevdem bûye 32767.
  • Dema ku Valgrind û AddressSanitizer bikar tînin performansa çêtir kirin.
  • Li ser Windows-ê, dema ku di moda MDBX_NOTLS-ê de xebitîn (bêyî karanîna hilanîna herêmî ya tîrê) karanîna vegerî ya SRW-lockê hate rakirin, heke dema pergalê hatibe guhertin, hilberîna bootid hate rast kirin, tespîtkirina WSL1 û WSL2 hate çêtir kirin, û şiyana vekirina databasek li ser Plana 9-ê ku bi riya DrvFS-ê ve hatî çêkirin hate zêdekirin.
  • Bi tevayî, zêdetirî 160 guhertin li 57 pelan hatin kirin, ~ 5000 rêz hatin zêdekirin, ~ 2500 jê hatin jêbirin.

Ez bi taybetî dixwazim spasiya tîmê projeya Erigon (ekosîstema Ethereum) bikim ji bo arîkariya wan di ceribandina senaryoyên karanîna dijwar de. Girîng e ku di pênc mehan de ji serbestberdana libmdbx v0.10.0, bi qebareya databasa 1-2 TB di her sazkirina Erigon de (li ser 7% ji girêkên Ethereum tê bikar anîn), tenê sê raporên xerabûna databasê hatin wergirtin, hemî ku ji ber sedemên derveyî, û ne xeletiyên nermalavê çêbû: di du bûyeran de sedem têkçûna RAM bû, di ya sêyemîn de xeletiyek di veavakirina daneyan de di veavakirinek taybetî ya binepergala hilanînê de bi karanîna BTRFS.

Source: opennet.ru

Add a comment