DBM (Computing) – Wikipedia

Beim Rechnen a DBM ist eine Bibliothek und ein Dateiformat, die einen schnellen Zugriff auf Daten mit einem Schlüssel ermöglichen. Eine Schlüsselwertdatenbank aus dem ursprünglichen Unix, dbm ist ein frühes Beispiel für ein NoSQL-System.[1][2][3]

Geschichte[edit]

Das Original dbm Das Bibliotheks- und Dateiformat war eine einfache Datenbank-Engine, die ursprünglich von Ken Thompson geschrieben und 1979 von AT & T veröffentlicht wurde. Der Name ist ein aus drei Buchstaben bestehendes Akronym für Datenbank-Managerund kann auch auf die Familie der Datenbankmodule mit APIs und Funktionen verweisen, die vom Original abgeleitet sind dbm.

Das dbm Die Bibliothek speichert beliebige Daten mithilfe eines einzelnen Schlüssels (eines Primärschlüssels) in Buckets mit fester Größe und verwendet Hashing-Techniken, um ein schnelles Abrufen der Daten per Schlüssel zu ermöglichen.

Das verwendete Hashing-Schema ist eine Form des erweiterbaren Hashing, sodass das Hashing-Schema erweitert wird, wenn neue Buckets zur Datenbank hinzugefügt werden. Dies bedeutet, dass die Datenbank, wenn sie fast leer ist, mit einem Bucket beginnt, der dann aufgeteilt wird, wenn er voll ist. Die beiden resultierenden untergeordneten Buckets werden selbst aufgeteilt, wenn sie voll sind, sodass die Datenbank wächst, wenn Schlüssel hinzugefügt werden.

Das dbm Bibliothek und ihre Derivate sind vorrelationale Datenbanken – sie verwalten assoziative Arrays, die als Hash-Tabellen auf der Festplatte implementiert sind. In der Praxis können sie eine praktischere Lösung für Hochgeschwindigkeitsspeicher anbieten, auf die über Schlüssel zugegriffen wird, da sie nicht den Aufwand für das Verbinden und Vorbereiten von Abfragen erfordern. Dies wird durch die Tatsache ausgeglichen, dass sie im Allgemeinen nur von einem einzelnen Prozess gleichzeitig zum Schreiben geöffnet werden können. Ein Agentendämon kann Anforderungen von mehreren Prozessen verarbeiten, führt jedoch IPC-Overhead ein.

Implementierungen[edit]

Das Original von AT & T. dbm Die Bibliothek wurde durch ihre zahlreichen Nachfolgeimplementierungen ersetzt. Bemerkenswerte Beispiele sind:[3]

  • ndbm („neue Datenbank“), basierend auf der ursprünglichen Datenbank mit einigen neuen Funktionen.
  • GDBM („GNU dbm“), GNU-Umschreibung der implementierenden Bibliothek ndbm Funktionen und eine eigene Schnittstelle.
  • sdbm („small dbm“), eine gemeinfreie Neufassung von dbm. Es ist Teil der Standarddistributionen für Perl und Ruby.[4][5]
  • qdbm, eine höhere Leistung dbm Einsatz vieler der gleichen Techniken wie das Kabinett Tokio / Kyoto. Geschrieben vom selben Autor, bevor sie zu den Schränken gingen.[6]
  • tdb, eine einfache Datenbank, die von Samba verwendet wird und mehrere Autoren unterstützt. Hat eine GDBM-basierte API.[7]
  • Berkeley DB, 1991 Ersetzung von ndbm durch Sleepycat Software (jetzt Oracle), um das Urheberrecht von AT & T Unix für BSD zu umgehen. Es bietet viele Erweiterungen wie Parallelität, Transaktionssteuerung, Hashing und B-Tree-Speicher.
  • LMDB: Copy-on-Write-Implementierung eines speicherabgebildeten B + -Baums in C mit einer API im Berkeley-Stil.

Die folgenden Datenbanken sind von DBM inspiriert, bieten jedoch keine direkte DBM-Schnittstelle, obwohl es trivial wäre, eine einzuschließen:

Verfügbarkeit[edit]

Ab 2001 ist die ndbm Die Implementierung von DBM war unter Solaris und IRIX Standard gdbm ist unter Linux allgegenwärtig. Die Berkeley DB-Implementierungen waren auf einigen freien Betriebssystemen Standard.[2][10] Nach einem Lizenzwechsel der Berkeley DB an GNU AGPL im Jahr 2013 sind Projekte wie Debian in die LMDB umgezogen.[11]

Verlässlichkeit[edit]

Ein AFL-Fuzzing-Test für 2018 für viele Datenbanken der DBM-Familie ergab viele Probleme bei Implementierungen, wenn es um beschädigte oder ungültige Datenbankdateien geht. Nur freecdb von Daniel J. Bernstein zeigte keine Abstürze. Die Autoren von gdbm, tdb und lmdb antworteten umgehend. Die Berkeley DB fiel aufgrund der Vielzahl anderer Probleme zurück.[10] Die Korrekturen wären für Open-Source-Software-Benutzer aufgrund der Lizenzänderung irrelevant, da sie auf eine alte Version zurückgesetzt werden.[11]

Siehe auch[edit]

Verweise[edit]

  1. ^ Kew 2007, p. 80: „DBMs sind seit den Anfängen der Datenverarbeitung bei uns, als die Notwendigkeit schneller Suchvorgänge mit Schlüssel erkannt wurde. Das ursprüngliche DBM ist eine UNIX-basierte Bibliothek und ein Dateiformat für den schnellen, hoch skalierbaren Schlüsselzugriff auf Daten gefolgt von NDBM (’new DBM‘), GDBM (‚GNU DBM‘) und der Berkeley DB. Diese letzte ist bei weitem die am weitesten fortgeschrittene und die einzige DBM, die derzeit aktiv entwickelt wird DBMs ab NDBM bieten dieselbe Kernfunktionalität, die von den meisten Programmen, einschließlich Apache, verwendet wird. Ein SDBM mit minimaler Implementierung wird ebenfalls mit APR gebündelt und steht Anwendungen zusammen mit den anderen DBMs zur Verfügung.
    Obwohl NDBM jetzt alt ist – wie die Stadt, die um 600 v. Chr. Von den Griechen New Town (‚Neapolis‘) genannt wurde und heute noch Neapel heißt -, bleibt es das Basis-DBM. NDBM wurde von frühen Apache-Modulen wie den Apache 1.x-Versionen von verwendet mod_auth_dbm und mod_rewrite. Sowohl GDBM als auch Berkeley DB bieten NDBM-Emulationen an, und Linux-Distributionen werden mit der einen oder anderen dieser Emulationen anstelle der „echten“ NDBM ausgeliefert, die aus Lizenzgründen ausgeschlossen ist. Leider sind die verschiedenen Dateiformate völlig inkompatibel und es gibt subtile Unterschiede im Verhalten beim Sperren von Datenbanken. Diese Probleme führten dazu, dass immer mehr Linux-Benutzer Probleme mit DBMs in Apache 1.x meldeten. „
  2. ^ ein b Hazel 2001, p. 500: „Am häufigsten [single-key] Format heißt DBM. In den meisten modernen Unix-Versionen ist standardmäßig eine DBM-Bibliothek installiert. Dies gilt jedoch nicht für einige ältere Systeme. Die beiden am häufigsten verwendeten DBM-Bibliotheken sind ndbm (Standard unter Solaris und IRIX) und Berkeley DB Version 2 oder 3 (Standard unter mehreren freien Betriebssystemen). Exim unterstützt sowohl diese als auch die ältere Berkeley DB Version 1. gdbm, und tdb. „
  3. ^ ein b Ladd & O’Donnell 2001, S. 823-824: „Die meisten UNIX-Systeme verfügen über eine Art DBM-Datenbank. DBM ist eine Reihe von Bibliotheksroutinen, die Datendateien verwalten, die aus Schlüssel- und Wertepaaren bestehen. Die DBM-Routinen steuern, wie Benutzer und eingeben Abrufen von Informationen aus der Datenbank Obwohl dies nicht der leistungsstärkste Mechanismus zum Speichern von Informationen ist, ist die Verwendung von DBM eine schnellere Methode zum Abrufen von Informationen als die Verwendung einer Flatfile. Da die meisten UNIX-Sites eine der DBM-Bibliotheken verwenden, die Tools, die Sie benötigen Speichern Sie Ihre Informationen in einer DBM-Datenbank sind sofort verfügbar.
    Es gibt fast so viele Varianten der DBM-Bibliotheken wie UNIX-Systeme. Obwohl die meisten dieser Bibliotheken miteinander kompatibel sind, funktionieren sie im Grunde alle auf die gleiche Weise …
    Es folgt eine Liste einiger der beliebtesten verfügbaren DBM-Bibliotheken:
    • DBM – DBM speichert die Datenbank in zwei Dateien. Der erste hat die Erweiterung .Pag und enthält die Bitmap. Die zweite, die die Erweiterung hat .Direnthält die Daten.
    • NDBM – NDBM ähnelt DBM, bietet jedoch einige zusätzliche Funktionen. Es wurde geschrieben, um bessere Speicher- und Abrufmethoden bereitzustellen. Außerdem können Sie mit NDBM im Gegensatz zu DBM viele Datenbanken öffnen, in denen nur eine Datenbank in Ihrem Skript geöffnet sein darf. Wie DBM speichert NDBM seine Informationen mithilfe der Erweiterungen in zwei Dateien .Pag und .Dir.
    • SDBM – SDBM wird mit dem Perl-Archiv geliefert, das auf viele Plattformen portiert wurde. Daher können Sie DBM-Datenbanken verwenden, solange eine Version von Perl für Ihren Computer vorhanden ist. SDBM wurde so geschrieben, dass es mit den mit NDBM bereitgestellten Funktionen übereinstimmt, sodass die Portabilität von Code kein Problem darstellen sollte. Perl ist auf nahezu allen gängigen Plattformen verfügbar.
    • GDBM – GDBM ist die GNU-Version der DBM-Familie von Datenbankroutinen. Mit GDBM können Sie auch Daten zwischenspeichern und so die Zeit reduzieren, die zum Schreiben in die Datenbank erforderlich ist. Die Datenbank hat keine Größenbeschränkung. Die Größe hängt vollständig von den Ressourcen Ihres Systems ab. GDBM-Datenbankdateien haben die Erweiterung .Db. Im Gegensatz zu DBM und NDBM, die beide zwei Dateien verwenden, verwendet GDBM nur eine Datei.
    • Berkeley db – Die Berkeley-Datenbank erweitert die ursprünglichen DBM-Routinen erheblich. Die Berkeley-Datenbank verwendet Hash-Tabellen wie die anderen DBM-Datenbanken, die Bibliothek kann jedoch auch Datenbanken erstellen, die auf einem sortierten ausgeglichenen Binärbaum basieren (BTREE) und speichern Sie Informationen mit einer Datensatzzeilennummer (RECNO). Die von Ihnen verwendete Methode hängt vollständig davon ab, wie Sie die Informationen speichern und aus einer Datenbank abrufen möchten. Berkeley db erstellt nur eine Datei, die keine Erweiterung hat. „

  4. ^ Yigit, Ozan. „sdbm.bun“. cse.yorku.ca. Abgerufen 8. Mai 2019.
  5. ^ „Klasse SDBM“. Dokumentation für Ruby 2.4.0. Beachten Sie, dass Ruby den Quellcode für SDBM enthält, während die DBM- und GDBM-Standardbibliotheken auf externen Bibliotheken und Headern basieren.
  6. ^ „QDBM: Quick Database Manager“. fallabs.com. 2006.
  7. ^ „tdb: Hauptseite“. tdb.samba.org.
  8. ^ „Tokyo Cabinet 第 1 版 基本 仕 様 書“ [Fundamental Specifications of Tokyo Cabinet Version 1]. Herbstlabore (auf Japanisch). 5. August 2010. Archiviert von das Original am 28. Oktober 2018. Abgerufen 25. Mai 2019. Tokyo Cabinet は GDBM や QDBM の Cabin Cabin と て て 次 の を 目標 目標 し て 開 さ れ ま Cabin Cabin Cabin Cabin Cabin Cabin Cabin Cabin Cabin 、 の
  9. ^ „Tokyo Cabinet 第 1 版 基本 仕 様 書“ [Fundamental Specifications of Tokyo Cabinet Version 1]. Herbstlabore (auf Japanisch). 5. August 2010. Archiviert von das Original am 28. Oktober 2018. Abgerufen 25. Mai 2019. Tokyo Cabinet は GDBM や QDBM の Cabin Cabin と て て 次 の を 目標 目標 し て 開 さ れ ま Cabin Cabin Cabin Cabin Cabin Cabin Cabin Cabin Cabin 、 の
  10. ^ ein b Debroux, Lionel (16. Juni 2018). „Oss-Sicherheit – Spaß mit DBM-Datenbanken …“ openwall.com.
  11. ^ ein b Surý, Ondřej (19. Juni 2014). „Neues Projektziel: Berkeley DB loswerden (post jessie)“. debian-devel (Mailingliste). Debian.

Literaturverzeichnis[edit]