2015-02-13 15 views
6

ets: wählen vs vs mnesia: wählen Sie Welche ist besser zu verwenden.Und auch im Falle der Einfügung und Löschung, die eine dieser beiden wir verwenden sollten.Ich arbeite an ejabberd.Any Zeiger ?das ist effizienter zwischen ets und mnesia

Antwort

12

tl; dr

Sie sind Werkzeuge für verschiedene Zwecke gebaut: ETS ist ein schneller K/V zu speichern, ist Mnesia eine Datenbank oben auf sie gebaut. Verwenden Sie das Werkzeug, das zu Ihrem Anwendungsfall passt.

Diskussion

Mnesia auf der ETS/DETS gebaut wird. Was effizienter ist, hängt davon ab, welche Funktionen Sie suchen. Wenn Sie einfache Tabellen ohne zusätzliche Logik, einen einzigen einfachen Schlüssel zum Indexieren haben und die Tabelle immer nur im Speicher oder von der Festplatte verwenden, gibt es keinen Unterschied zwischen ETS und Mnesia und Sie werden keine Mnesia-Funktionen verwenden.

Wenn Sie auf der anderen Seite mehr als einen Index über die Daten benötigen, ein gewisses Caching-Verhalten implementieren möchten, benötigen Sie jedoch Festplattenpersistenz, aber Cache-Index-Leistung und andere Dinge, die Sie von einem Datenbanksystem erwarten Sie müssen Mnesia-ähnliche Funktionen entweder selbst auf ETS/DETS implementieren oder einfach Mnesia verwenden.

Sehr oft beginne ich mit ein paar ETS-Tabellen beim Prototyping (oder sogar auf frühen Versionen von Features in der Produktion), dann beginnen Orte zu finden ich brauche Daten serialisiert und auf der Festplatte, dann merke ich brauche mehrere Indizes usw. und Wind ein Großteil der Datenverwaltung, die ursprünglich in ETS war, in Mnesia zu bewegen. Wenn Sie das Konzept des Datenzugriffs richtig abstrahieren, ist es kein Problem, die Implementierung dieses Teils Ihres Systems zu ändern. Wenn Sie jedoch mehrere Anrufe in Ihren Modulen verteilt haben, müssen Sie wahrscheinlich andere architektonische Probleme lösen, die viel wichtiger sind als ETS vs Mnesia.


Egal, was Sie verwenden, stellen Sie sicher, dass Sie nicht etwas tun, eine systemweite Engpass in Form eines zentralen Repository aller staatlichen für das gesamte System wie zu schaffen. Dies ist ein Fehler Ich sehe viele Leute kommen aus einem (C/Python/$ imperative_lang + Postgres/MariaDB/$ rbdms) Art von Hintergrund machen.

Lesen Sie die Absätze 2-6 von ErlMUD Commentary: Architecture, Locations für eine architektonische Diskussion der Zustandsdarstellung auf einem hohen Niveau.

+1

"Wenn Sie mehrere Anrufe in Ihren Modulen verteilt haben, haben Sie wahrscheinlich noch andere architektonische Probleme, die viel wichtiger sind als ETS vs Mnesia." Das ist wichtig. Entkopplung und Modularität sind immer gut. – Qqwy