www.wikidata.de-de.nina.az
Mnesia ist ein in Erlang geschriebenes Datenbanksystem Es wird ausschliesslich im direkten Verbund mit Erlang benutzt eine Anbindung an andere Sprachen existiert nicht Mnesia besitzt weiche Echtzeit Fahigkeiten kann leicht verteilt konfiguriert werden und ist ausserdem auf Geschwindigkeit optimiert MnesiaBasisdatenMaintainer Ericsson Das Erlang ProjektEntwickler EricssonAktuelle Version 4 21 3 1 30 Januar 2023 Betriebssystem Unixe Linux FreeBSD macOS Windows alle Plattformen auf denen Erlang lauft Programmiersprache ErlangKategorie DatenbankmanagementsystemLizenz EPL Erlang Public License ahnlich Mozilla Public License deutschsprachig neinerlang org mnesia 3erl Inhaltsverzeichnis 1 Name 2 Einsatz 3 Integration in Erlang 4 Speichermodell 5 Transaktionen 6 Die Arbeit mit Mnesia einige kleine Beispiele 6 1 Schema 6 2 Tabellen 6 3 Schreiben 6 4 Abfragen 7 EinzelnachweiseName BearbeitenJoe Armstrong einer der Hauptentwickler von Erlang beantwortet die Frage nach dem Namen Mnesia in seinem Buch Programming Erlang 2 folgendermassen The original name was Amnesia One of our bosses didn t like the name He said You can t possibly call it Amnesia you can t have a database that forgets things So we dropped the A and the name stuck Der ursprungliche Name lautete Amnesia Aber einer unserer Chefs mochte diesen Namen nicht Er meinte Ihr konnt das Ding doch nicht Amnesia nennen ihr konnt keine Datenbank entwickeln die Sachen vergisst Also haben wir das A weggelassen und der Name blieb Joe ArmstrongEinsatz BearbeitenWie schon Erlang wurde Mnesia fur den Einsatz in Telekom Umgebungen entwickelt in denen es auf niedrige Latenz und sehr hohe Verfugbarkeit sowie Parallelitat ankommt Mnesia wurde nicht entworfen um herkommliche SQL basierte Datenbanken zu ersetzen sondern eher als in die Sprache eingebettete Datenbank ahnlich wie die Berkeley DB Integration in Erlang BearbeitenMnesia wurde stark auf Erlang spezialisiert so unterstutzt es das Speichern jeglicher Erlang Terme Erlang Terme sind hierbei die in der Sprache selbst verwendete Datenstrukturen Typen Listen 1 2 3 Skalare 42 Atome helloworld xyz Tupel hello 1 3 4 1 2 3 5 abc Records R recordname a 1 b 2 Funs fun gt doSomething end Es entfallt also die Umwandlung von Datentypen Eine Verwendung von anderen Sprachen als Erlang ist nicht moglich Innerhalb von Erlang wird das Modul mnesia genutzt um mit dem Datenbankserver zu kommunizieren der mit diversen Erlang Prozessen arbeitet Speichermodell BearbeitenMnesia speichert Erlang Tupel in Tabellen Die Tupel sind nach folgendem Muster aufgebaut Tabellenname Key Feld1 Feld2 Tabellenname dient Mnesia dazu den Datensatz in die richtige Tabelle zu stecken wahrend Key ein in der jeweiligen Tabelle eindeutiger Schlussel ist typisch fur relationale Datenbanksysteme zum Beispiel eine fortlaufende Nummer Der Rest des Tupels sind andere Datenfelder Aufgrund dieser Struktur werden zumeist Records fur die Arbeit mit Mnesia genutzt Der Record record table1 field1 field2 defaultvalue wird in ein Tupel table1 Wert1 Wert2 umgewandelt und ist damit gut geeignet in Mnesia gespeichert zu werden Transaktionen BearbeitenDas Lesen Schreiben und Abfragen sollte nur in sogenannten Transaktionen transactions stattfinden Transaktionen sind Erlang Funs Fun ist in Erlang synonym mit anonymer Funktion in denen die Mnesia Befehle fur Lesen Schreiben und Abfragen ausgefuhrt werden Eine solche Fun wird dann dem Mnesia Transaktionsmanager ubergeben Der Sinn von Transaktionen besteht darin Atomaritat Unteilbarkeit und dadurch Konsistenz zu erreichen Entweder die gesamte Transaktion hat Erfolg oder die gesamte Transaktion schlagt fehl Die Datenbank bleibt immer konsistent Beispiel Zwei zusammenhangende Datensatze sollen in die Datenbank geschrieben werden Das Schreiben des ersten Datensatzes ist erfolgreich das des zweiten schlagt fehl zum Beispiel wegen eines vergessenen Feldes im einzufugenden Datensatz Nun wird der erste Schreibvorgang wieder ruckgangig gemacht um wieder Konsistenz zu erreichen Danach wird das Programm daruber informiert dass etwas schiefgelaufen ist Neben Transaktionen gibt es dirty operations also schmutzige Operationen die um ein Vielfaches schneller sind als Transaktionen dafur aber keinerlei Garantie fur Konsistenz oder Atomaritat geben Die Arbeit mit Mnesia einige kleine Beispiele BearbeitenSchema Bearbeiten Bevor die Datenbank genutzt werden kann muss ein sogenanntes Schema erstellt werden Ein Schema ist eigentlich nur ein Ordner im aktuellen Verzeichnis das nach dem Muster Mnesia node benannt ist bei einer unbenannten Erlang Instanz also Mnesia nonode nohost Das Schema wird genutzt um je nach Modus Daten auf der Festplatte zu sichern und die Verlinkung mit anderen Mnesia Instanzen zu verwalten mnesia create schema node1 host example org node2 host example org node Dieser Befehl erstellt fur die beiden genannten Knoten Erlang VMs die in der Lage sind uber das Netzwerk angesprochen zu werden sowie den aktuellen Knoten node die notwendigen Dateien table1 ist zurzeit die einzige Tabelle in der Datenbank Die gesamte Struktur nimmt bei 20 Eintragen etwa 28 kB ein eine leere Datenbank benotigt etwa 20 kB Mnesia node1 host example org DECISION TAB LOG LATEST LOG schema DAT table1 DCD table1 DCL Das Schema speichert also die Metainformationen fur die Arbeit mit einer Datenbank Das Verknupfen mit einem laufenden Mnesia Server geschieht automatisch d h wenn ein Mnesia Server in einem Node gestartet wird und er ein Schema mit zum Node Namen passendem Namen findet wird dieses genutzt Nachdem ein Schema angelegt wurde muss Mnesia auf allen beteiligten Nodes gestartet werden mnesia start Tabellen Bearbeiten Ein wichtiges Grundelement von relationalen Datenbanken sind Tabellen Eine Tabelle besteht in Mnesia aus einer Reihe von Erlang Tupeln die alle mit demselben Namen beginnen namlich dem der Tabelle Am besten hierfur geeignet ist ein Erlang Record record table1 field1 field2 defaultvalue mnesia create table table1 attributes record info fields table1 disc copies node1 host example org node2 host example org table1 ist der Name der Tabelle der mit dem Record Namen ubereinstimmen muss Das zweite Argument ist eine Liste von Optionstupeln Hier verwendet attributes field1 field2 Liste der Felder record info gibt die Liste der Felder des gegebenen Records zuruck disc copies node1 host example org node2 host example org Speichermethode Neben disc copies Ort RAM Sicherung auf Festplatte existieren nur RAM ram copies bzw kein Argument und nur Festplatte disc only copies Die Nodeliste enthalt dabei immer nur Nodes die beim Erzeugen des Schemas angegeben wurden da ein spezielles Cookie zwischen den Schemas ubereinstimmen muss Diese Nodeliste konfiguriert die Tabelle so dass Kopien der Tabelle auf zwei Nodes abgelegt werden aber nicht auf dem Haupt Node auf dem die Anwendung lauft die diese Funktion gerade ausfuhrt Ein typisches Szenario ware eine Frontend Backend Anwendung bei der der Anwendungsserver vor allem Rechenleistung besitzt und die beiden anderen Nodes den Speicherplatz bereitstellen Schreiben Bearbeiten Zunachst wird ein Funktionsobjekt mit dem gewunschten Verhalten erzeugt und dann dem Transaktionsmanager ubergeben Die in Transaktionen verwendeten Mnesia Funktionen laufen nur im Transaktionskontext d h es ist mit diesen Funktionen nicht moglich ausserhalb einer Transaktion die Datenbank zu andern Transaction Fun fun gt Data table1 field1 1337 field2 42 mnesia write Data end mnesia transaction Transaction Fun Abfragen Bearbeiten Das Abfragen geschieht mittels der in Erlang oft eingesetzten Listenkomprehensionen Um alle Werte von field1 in Datensatzen bei denen field2 grosser als 100 ist zu extrahieren wird folgende Abfrage formuliert Transaction Fun fun gt Query qlc q X table1 field1 X lt mnesia table table1 X table1 field2 gt 100 qlc e Query end mnesia transaction Transaction Fun QLC ist hierbei ein Modul zur Abfrage von verschiedenen Tabellen zum Beispiel ETS oder eben Mnesia qlc q kompiliert eine Listenkomprehension qlc e fuhrt sie aus und gibt die Werte zuruck Mit diesen Listenkomprehensionen sind auch Joins moglich Das SQL Aquivalent fur diese Abfrage wurde folgendermassen lauten SELECT field1 FROM table1 WHERE field2 gt 100Einzelnachweise Bearbeiten Mnesia Release Notes Versionshinweise In erlang org Ericsson AB abgerufen am 21 September 2019 englisch Joe Armstrong Programming Erlang Software For A Concurrent World In Pragmatic Bookshelf Raleigh North Carolina 2007 ISBN 1 934356 00 X S 316 englisch Abgerufen von https de wikipedia org w index php title Mnesia amp oldid 234127553