Datenbank-Engine - Database engine

Eine Datenbank-Engine (oder Speicher-Engine ) ist die zugrunde liegende Softwarekomponente, die ein Datenbankverwaltungssystem (DBMS) verwendet, um Daten aus einer Datenbank (CRUD) zu erstellen, zu lesen, zu aktualisieren und zu löschen . Die meisten Datenbankverwaltungssysteme enthalten ihre eigene Anwendungsprogrammierschnittstelle (API), die es dem Benutzer ermöglicht, mit ihrer zugrunde liegenden Engine zu interagieren, ohne die Benutzerschnittstelle des DBMS zu durchlaufen.

Der Begriff "Datenbank-Engine" wird häufig synonym mit " Datenbankserver " oder "Datenbankverwaltungssystem" verwendet. Eine "Datenbankinstanz" bezieht sich auf die Prozesse und Speicherstrukturen der laufenden Datenbank-Engine .

Speichermotoren

Viele der modernen DBMS unterstützen mehrere Speicher-Engines innerhalb derselben Datenbank. Zum Beispiel MySQL unterstützt InnoDB sowie MyISAM .

Einige Speicher-Engines sind transaktional .

Name Lizenz Transaktional
Arie GPL Nein
Falke GPL Jawohl
InnoDB GPL Jawohl
MyISAM GPL Nein
InfiniDB GPL Nein
TokuDB GPL Jawohl
WiredTiger GPL Jawohl
XtraDB GPL Jawohl
RocksDB GPL v2 oder Apache 2.0 Jawohl

Weitere Motortypen sind:

Überlegungen zum Entwurf

Informationen in einer Datenbank werden als Bits gespeichert, die als Datenstrukturen im Speicher ausgelegt sind, die aufgrund der Eigenschaften der Hardware effizient gelesen und geschrieben werden können. Typischerweise ist der Speicher selbst so konzipiert, dass er die Anforderungen verschiedener Bereiche erfüllt, die Speicher umfassend nutzen, einschließlich Datenbanken. Ein in Betrieb befindliches DBMS verwendet immer gleichzeitig mehrere Speichertypen (zB Speicher und externer Speicher) mit entsprechenden Layoutverfahren.

Im Prinzip kann der Datenbankspeicher als linearer Adressraum betrachtet werden , in dem jedes Datenbit seine eindeutige Adresse in diesem Adressraum hat. In der Praxis wird nur ein sehr kleiner Prozentsatz von Adressen als anfängliche Bezugspunkte beibehalten (was auch eine Speicherung erfordert); auf die meisten Daten wird indirekt unter Verwendung von Verschiebungsberechnungen (Abstand in Bits von den Referenzpunkten) und Datenstrukturen zugegriffen, die Zugriffspfade (unter Verwendung von Zeigern) auf alle benötigten Daten auf effektive Weise definieren, optimiert für die benötigten Datenzugriffsoperationen.

Datenbankspeicherhierarchie

Eine Datenbank befindet sich während des Betriebs gleichzeitig in mehreren Speichertypen und bildet eine Speicherhierarchie . Aufgrund der Natur moderner Computer befindet sich der größte Teil der Datenbank innerhalb eines Computers, der das DBMS hostet (teilweise repliziert) in einem flüchtigen Speicher. Daten (Teile der Datenbank), die verarbeitet/manipuliert werden, befinden sich in einem Prozessor, möglicherweise in den Caches des Prozessors . Diese Daten werden von / zu schreib Speicher gelesen, in der Regel über einen Computer - Bus (bisher typischerweise flüchtige Speicherkomponenten). Der Computerspeicher kommuniziert Daten (die zu/von) externem Speicher übertragen werden, typischerweise über Standardspeicherschnittstellen oder Netzwerke (zB Fibre Channel , iSCSI ). Ein Speicher-Array , eine gemeinsame externe Speichereinheit, hat typischerweise eine eigene Speicherhierarchie, von einem schnellen Cache, typischerweise bestehend aus (flüchtigem und schnellem) DRAM , der (wieder über Standardschnittstellen) an Laufwerke, möglicherweise mit unterschiedlichen Geschwindigkeiten, angeschlossen ist, wie Flash - Laufwerke und Magnetplattenlaufwerke (nicht flüchtig). Die Laufwerke können mit Magnetbändern verbunden sein , auf denen sich typischerweise die am wenigsten aktiven Teile einer großen Datenbank befinden, oder Datenbank-Backup-Generationen.

Typischerweise besteht derzeit eine Korrelation zwischen Speichergeschwindigkeit und Preis, während der schnellere Speicher typischerweise volatil ist.

Datenstrukturen

Eine Datenstruktur ist ein abstraktes Konstrukt, das Daten in einer wohldefinierten Weise einbettet. Eine effiziente Datenstruktur ermöglicht eine effiziente Manipulation der Daten. Die Datenmanipulation kann das Einfügen, Löschen, Aktualisieren und Abrufen von Daten in verschiedenen Modi umfassen. Ein bestimmter Datenstrukturtyp kann bei bestimmten Operationen sehr effektiv und bei anderen sehr ineffektiv sein. Ein Datenstrukturtyp wird bei der DBMS-Entwicklung ausgewählt, um die Operationen, die für die darin enthaltenen Datentypen erforderlich sind, am besten zu erfüllen. Der für eine bestimmte Aufgabe ausgewählte Typ der Datenstruktur berücksichtigt typischerweise auch den Typ des Speichers, in dem sie sich befindet (z. B. Zugriffsgeschwindigkeit, minimale Größe des Speicherblocks, auf den zugegriffen wird usw.). In einigen DBMSs haben Datenbankadministratoren die Flexibilität, aus Leistungsgründen zwischen Optionen von Datenstrukturen auszuwählen, die Benutzerdaten enthalten. Manchmal haben die Datenstrukturen auswählbare Parameter, um die Datenbankleistung zu optimieren.

Datenbanken können Daten in vielen Datenstrukturtypen speichern. Gängige Beispiele sind die folgenden:

Datenorientierung und Clustering

Im Gegensatz zur herkömmlichen Zeilenorientierung können relationale Datenbanken auch spaltenorientiert oder korrelativ sein, indem sie Daten in einer bestimmten Struktur speichern.

Im Allgemeinen wird eine wesentliche Leistungsverbesserung erzielt, wenn verschiedene Typen von Datenbankobjekten, die normalerweise zusammen verwendet werden, in einem Speicher in der Nähe "geclustert" abgelegt werden. Dies ermöglicht normalerweise das Abrufen benötigter verwandter Objekte aus dem Speicher mit einer minimalen Anzahl von Eingabevorgängen (jeweils mitunter erheblich zeitaufwändig). Selbst für speicherinterne Datenbanken bietet Clustering einen Leistungsvorteil aufgrund der gemeinsamen Nutzung großer Caches für Eingabe-Ausgabe-Operationen im Speicher mit ähnlichem resultierendem Verhalten.

Zum Beispiel kann es von Vorteil sein, einen Datensatz eines "Artikels" auf Lager mit all seinen entsprechenden "Bestell"-Datensätzen zu gruppieren. Die Entscheidung, ob bestimmte Objekte geclustert werden oder nicht, hängt von den Nutzungsstatistiken der Objekte, Objektgrößen, Cache-Größen, Speichertypen usw. ab.

Datenbankindizierung

Indizierung ist eine Technik, die einige Speicher-Engines verwenden, um die Datenbankleistung zu verbessern. Die vielen Arten von Indizes haben die gemeinsame Eigenschaft, dass sie beim Ausführen einer Abfrage nicht jeden Eintrag untersuchen müssen. In großen Datenbanken kann dies die Abfragezeit/Kosten um Größenordnungen reduzieren. Die einfachste Form des Indexes ist eine sortierte Liste von Werten, die mit einer binären Suche mit angrenzendem Verweis auf die Position des Eintrags durchsucht werden kann , analog zum Index am Ende eines Buches. Dieselben Daten können mehrere Indizes haben (eine Mitarbeiterdatenbank könnte nach Nachname und Einstellungsdatum indiziert werden).

Indizes wirken sich auf die Leistung aus, aber nicht auf die Ergebnisse. Datenbankdesigner können Indizes hinzufügen oder entfernen, ohne die Anwendungslogik zu ändern, wodurch die Wartungskosten reduziert werden, wenn die Datenbank wächst und sich die Datenbanknutzung weiterentwickelt. Indizes können den Datenzugriff beschleunigen, verbrauchen jedoch Speicherplatz in der Datenbank und müssen jedes Mal aktualisiert werden, wenn die Daten geändert werden. Indizes können daher den Datenzugriff beschleunigen, aber die Datenpflege verlangsamen. Diese beiden Eigenschaften bestimmen, ob ein bestimmter Index die Kosten wert ist.

Verweise

Externe Links