DBM (informatica) - DBM (computing)

In de informatica is een DBM een bibliotheek en bestandsindeling die snelle toegang met één toets tot gegevens biedt. Een key-value-database van de originele Unix , dbm is een vroeg voorbeeld van een NoSQL- systeem.

Geschiedenis

De oorspronkelijke dbm- bibliotheek en bestandsindeling was een eenvoudige database-engine , oorspronkelijk geschreven door Ken Thompson en uitgebracht door AT&T in 1979. De naam is een drieletterig acroniem voor DataBase Manager en kan ook verwijzen naar de familie van database-engines met API's en functies afgeleid van de originele dbm .

De dbm- bibliotheek slaat willekeurige gegevens op met behulp van een enkele sleutel (een primaire sleutel ) in buckets met een vaste grootte en gebruikt hash- technieken om snel de gegevens per sleutel op te halen.

Het gebruikte hash-schema is een vorm van uitbreidbare hashing , zodat het hash-schema zich uitbreidt wanneer nieuwe buckets aan de database worden toegevoegd, wat betekent dat, wanneer deze bijna leeg is, de database begint met één bucket, die vervolgens wordt gesplitst wanneer deze vol raakt. De twee resulterende onderliggende buckets worden zelf gesplitst wanneer ze vol raken, dus de database groeit naarmate er sleutels worden toegevoegd.

De dbm- bibliotheek en zijn afgeleiden zijn pre- relationele databases  – ze beheren associatieve arrays , geïmplementeerd als hash-tabellen op de schijf . In de praktijk kunnen ze een meer praktische oplossing bieden voor snelle opslag die toegankelijk is via een sleutel, omdat ze geen overhead vereisen voor het verbinden en voorbereiden van query's. Dit wordt gecompenseerd door het feit dat ze over het algemeen slechts door één proces tegelijk kunnen worden geopend om te schrijven. Een agent- daemon kan verzoeken van meerdere processen afhandelen, maar introduceert IPC- overhead.

Implementaties

De originele AT&T dbm- bibliotheek is vervangen door vele opvolgers. Bekende voorbeelden zijn onder meer:

  • ndbm ("nieuwe dbm"), gebaseerd op de originele dbm met enkele nieuwe functies.
  • GDBM ("GNU dbm"), GNU herschrijving van de bibliotheek die ndbm- functies en zijn eigen interface implementeert. Biedt ook nieuwe functies zoals crashtolerantie voor het garanderen van gegevensconsistentie.
  • sdbm ("kleine dbm"), een herschrijving van dbm in het publieke domein . Het maakt deel uit van de standaarddistributies voor Perl en Ruby .
  • qdbm ("Quick Database Manager"), een krachtigere dbm die veel van dezelfde technieken gebruikt als Tokyo/Kyoto Cabinet. Geschreven door dezelfde auteur voordat ze naar de kasten verhuisden.
  • tdb ("Trivial Database"), een eenvoudige database die door Samba wordt gebruikt en die meerdere schrijvers ondersteunt. Heeft een op gdbm gebaseerde API.
  • Berkeley DB , 1991 vervanging van ndbm door Sleepycat Software (nu Oracle ) gemaakt om het AT&T Unix-copyright op BSD te omzeilen . Het beschikt over veel extensies zoals parallellisme, transactiecontrole, hashing en B-tree-opslag.
  • LMDB : copy-on-write memory-mapped B+ tree- implementatie in C met een Berkeley-achtige API.

De volgende databases zijn dbm-geïnspireerd, maar ze bieden niet direct een dbm-interface, ook al zou het triviaal zijn om er een in te pakken:

Beschikbaarheid

Vanaf 2001 was de ndbm- implementatie van DBM standaard op Solaris en IRIX, terwijl gdbm alomtegenwoordig is op Linux . De Berkeley DB-implementaties waren standaard op sommige gratis besturingssystemen. Na een licentiewijziging van de Berkeley DB naar GNU AGPL in 2013 zijn projecten zoals Debian verplaatst naar LMDB.

Betrouwbaarheid

Een AFL- fuzzing- test uit 2018 met veel databases uit de DBM-familie bracht veel problemen aan het licht bij implementaties als het gaat om corrupte of ongeldige databasebestanden. Alleen freecdb van Daniel J. Bernstein liet geen crashes zien. De auteurs van gdbm, tdb en lmdb reageerden prompt. Berkeley DB liep achter vanwege de enorme hoeveelheid andere problemen; de fixes zouden niet relevant zijn voor gebruikers van open-source software vanwege de licentiewijziging die hen weer op een oude versie blokkeert.

Zie ook

Referenties

Bibliografie