LMDB

Lightning Memory-Mapped Database (LMDB) ir programmatūras bibliotēka, kas nodrošina augstas veiktspējas iegulto transakciju datu bāzi atslēgu — vērtību krātuves veidā. To izstrādāja ASV uzņēmums Symas, un publiski kļuva pieejama 2011. gadā.
LMDB ir rakstīta C valodā ar lietojumprogrammas saskarnes (API) saistījumiem vairākām programmēšanas valodām. LMDB glabā patvaļīgus atslēgu un datu pārus kā baitu masīvus, tai ir diapazona meklēšanas iespējas, tā atbalsta vairākus datu vienumus vienai atslēgai un tai ir īpašs režīms ierakstu pievienošanai datu bāzes beigās (MDB_APPEND), kas nodrošina dramatisku rakstīšanas veiktspējas pieaugumu salīdzinot ar citām līdzīgām krātuvēm. LMDB nav relāciju datu bāze, tā ir tikai atslēgu-vērtību krātuve, kā, piemēram, Berkeley DB un dbm.
LMDB var arī izmantot laiksakritīgi vairākpavedienu vai vairākprocesu apstrādes vidē, turklāt ar lasīšanas veiktspēju, ko var mērogot lineāri. LMDB datu bāzēm vienlaikus var būt tikai viens rakstītājs, tomēr, atšķirībā no daudzām līdzīgām atslēgu-vērtību datubāzēm, rakstīšanas transakcijas nebloķē lasītājus, un lasītāji nebloķē rakstītājus. LMDB ir neparasta arī ar to, ka vairākas lietojumprogrammas vienā sistēmā var vienlaikus atvērt un izmantot vienu un to pašu LMDB krātuvi kā līdzekli veiktspējas palielināšanai. Turklāt LMDB nav nepieciešams transakciju žurnāls (tādējādi tiek palielināta rakstīšanas veiktspēja, neprasot divreiz rakstīt datus), jo tam datu integritātes saglabāšana jau ir iestrādāta arhitektūrā.

Vēsture

LMDB projekts pirmo reizi tika apspriests 2009. gada OpenLDAP izstrādātāju adresātu sarakstā saistībā ar risinājumu izpēti kešatmiņas pārvaldības grūtībām, ko izraisīja projekta atkarība no Berkeley DB. Īpašs mērķis bija aizstāt Berkeley DB arhitektūrai piemītošos vairākus konfigurācijas un kešatmiņas līmeņus ar vienu automātiski pārvaldītu kešatmiņu, ko kontrolē resursdatora operētājsistēma.
Kad sākās izstrāde, sākotnēji tas bija atzarojums no līdzīga projekta OpenBSD ldapd. Pirmā publiski pieejamā versija parādījās OpenLDAP pirmkoda repozitorijā 2011. gada jūnijā.
Projekts bija pazīstams kā MDB līdz 2012. gada novembrim, kad to pārdēvēja, lai izvairītos no konfliktiem ar esošo programmatūru.

Laiksakritība

LMDB izmanto multiversiju laiksakritības kontroli (MVCC) un atļauj vairākus pavedienus vairākos procesos, lai koordinētu vienlaicīgu piekļuvi datu bāzei. Kamēr rakstīšanas transakcijas tiek globāli serializētas, izmantojot mutex, tikai lasāmās transakcijas darbojas paralēli, tostarp rakstīšanas transakcijas klātbūtnē, un tās ir pilnībā gaidīšanas brīvas, izņemot pirmo tikai lasāmo transakciju pavediena. Katrs pavediens, kas tiek nolasīts no datu bāzes, iegūst īpašumtiesības uz elementu koplietojamā atmiņas masīvā, ko var atjaunināt, lai norādītu, kad tas atrodas transakcijā. Rakstītāji skenē masīvu, lai noteiktu vecāko datu bāzes versiju, kas jāsaglabā transakcijai, nepieprasot tiešu sinhronizāciju ar aktīvajiem lasītājiem.

Veiktspēja

2011. gadā Google publicēja programmatūru, kas ļāva lietotājiem ģenerēt mikro etalonuzdevumus, salīdzinot LevelDB veiktspēju ar SQLite un Kyoto Cabinet dažādos scenārijos. 2012. gadā Symas tai pievienoja atbalstu LMDB un Berkeley DB un padarīja atjaunināto salīdzinošās novērtēšanas programmatūru publiski pieejamu. Šie etalonuzdevumi parādīja, ka LMDB pārspēja visas pārējās datu bāzes lasīšanas un pakešu rakstīšanas operācijās. SQLite ar LMDB izcēlās rakstīšanas operācijas un īpaši sinhronās / transakciju rakstīšanās.
Etalonuzdevumi parādīja, ka pamatā esošā failsistēma būtiski ietekmē darbības rezultātus. JFS ar ārēju žurnālu darbojas labi, jo īpaši salīdzinājumā ar citām modernām sistēmām, piemēram, Btrfs un ZFS. Zimbra ir testējis back-mdb un back-hdb veiktspēju OpenLDAP sistēmā, LMDB skaidri pārsniedzot BDB bāzēto back-hdb. Daudzi citi OpenLDAP lietotāji ir novērojuši līdzīgus rezultātus.
Kopš sākotnējiem etalonuzdevumiem 2012. gadā, ir veikti vairāki testi ar papildu datu bāzes programmām gan atmiņā, gan diskā, kas darba slodzēm raksturo veiktspēju vairākos centrālajos procesoros un ierakstu lielumos. Šie testi rāda, ka LMDB veiktspēja ir nesakrītoša visās ar atmiņu saistītajās darbslodzēs un pārspēj visās ar disku saistītajās lasīšanas darba slodzēs, kā arī ar disku saistītajās rakstīšanas darba slodzēs, izmantojot lielus ierakstu izmērus. Etalonusdevuma draivera kods pēc tam tika publicēts github un tālāk paplašināts datu bāzu pārklājumā.

Uzticamība

LMDB jau no paša sākuma bija paredzēts, lai nepieļautu datu zudumu sistēmas un lietojumprogrammas avārijas gadījumā. "Kopēšana rakstot" metode nekad nepārraksta pašlaik lietojamos datus. Izvairīšanās no pārrakstīšanas nozīmē, ka diska / krātuves struktūra vienmēr ir derīga, tāpēc lietojumprogrammas vai sistēmas avārijas nevar atstāt datu bāzi bojātā stāvoklī. Noklusējuma režīmā sliktākajā gadījumā avārija var zaudēt datus no pēdējās vēl nepabeigtās rakstīšanas transakcijas. Pat ja visi asinhronie režīmi ir iespējoti, tikai OS katastrofāla kļūme vai aparatūras enerģijas zudums drīzāk, nevis tikai lietojumprogrammas avārija, var izraisīt datu bojāšanu.
Divi akadēmiski raksti USENIX OSDI simpozijā parādīja iespējamus avārijas veidus DB programmās (ieskaitot LMDB) elektrības zuduma vai sistēmas avārijas gadījumā.

Atvērtā pirmkoda licence

2013. gada jūnijā Oracle mainīja Berkeley DB (saistīts projekts) licenci no Sleepycat licences uz Affero General Public License, tādējādi ierobežojot tās izmantošanu dažādās lietojumprogrammās. Tas lika Debian projektam izslēgt bibliotēku no versijas 6.0. un uz priekšu. Tika kritizēts, ka šī licence nav draudzīga komerciāliem izplatītājiem. Tika diskutēts par to, vai šadas licencēšanas izmaiņas varētu notikt arī ar LMDB. Autors Hovards Ču (Howard Chu) skaidri norādīja, ka LMDB ir daļa no OpenLDAP projekta, kam ir bijusi BSD stila licence, un tāda paliks arī turpmāk.
Berkeley DB licences jautājums ir ietekmēja vairumu GNU/Linux distribūciju, piemēram, Debian pilnībā pārtrauca izmantot Berkeley DB, dodot priekšroku LMDB.