Mnesia verfügt über ereignisbasierte Benachrichtigungen. Es ist möglich, einen Prozess (gen_server) zu haben, der mnesia-Ereignisse abonniert. Diese Ereignisse sind kategorisiert: Tabellenereignisse, Systemereignisse und andere. Lesen Sie die mnesia-Dokumentation im Teil über Ereignisse. Es ist tatsächlich möglich, dass ein Prozess Ereignisse mithilfe des mnesia-Ereignishandlers meldet, indem er Folgendes aufruft: mnesia:report_event(Event)
. Alle für mnesia-Ereignisse abonnierten Prozesse erhalten diese Nachricht. Mnesia berichtet Echtzeit-Informationen über alle Transaktionen in einer Tabelle an abonnierte Prozesse. Es können Transaktionen gelesen, geschrieben oder gelöscht werden, und ein Prozess in seiner Schleife kann mit dem Ereignistyp übereinstimmen, an dem er interessiert sein könnte. Es gibt detaillierte und einfache Tabellenereignisse. Ich persönlich fand die Ereignisse sehr nützlich. Sie sollten in der Lage sein, die Details aus der Dokumentation zu erhalten.
Über Ereignisse. Jetzt speichern MN-Tabellen Datensätze desselben Typs. Diese Informationen können unter der Telefonnummer mnesia:table_info(Table_name::atom(),attributes)
abgerufen werden. Wenn Indizes auf eine Mnisia-Tabelle angewendet werden, akzeptiert sie jedes Feld dieser Attribute, solange es nicht das erste Datensatzfeld ist (normalerweise "Primärschlüssel" genannt). Diese Indizes sind besser, wenn sie bei der Tabellenerstellung als zur Laufzeit aufgrund von a angewendet werden Anzahl der Gründe. Betrachten Sie den Code-Schnipsel unten
-record(employee,{id,first_name,other_name,sex,age,job}).
install(Nodes)->
mnesia:create_schema(Nodes),
mnesia:start(),
mnesia:create_table(employee,[{index,[age,sex,first_name,job]},
{attributes,record_info(fields,employee)}]),
mnesia:stop(),
ok.
wenn ich Ihre Frage richtig verstanden habe, kann ich jetzt sagen, dass die Tabelle Mitarbeiter Spalten: Alter, Geschlecht, first_name, OTHER_NAME und Job indiziert und alle Mnesia APIs für Rekord Suche basierend auf indizierten Attributen wiil arbeiten z mnesia:index_read/3 or mnesia:index_match_object/2 or mnesia:index_match_object/4
. Glück
/[email protected]
Vielen Dank. Nur um es besser zu verstehen: mit Tabelle (Mitarbeiter, {id, {sal, lname, fname}, Geschlecht, Telefon} mache ich mnesia: add_table_index (Mitarbeiter, {sal, lname, fname}) um nach Gehalt zu sortieren, dann Name mit tuple- field {sal, lname, fname}? Akzeptiert Mnesia Tupled-Tabellenfelder und Tupel-Indexfelder? Oder eher programmatisch manuell meine Schlüsselfelder Daten in der Reihenfolge in einem einzigen Schlüsselfeld, das ich jetzt als Schlüsselfeld verwenden? Das klingt ein wenig naiv, aber ich bin ziemlich neu bei all dem. Ich bin bereit, Dinge auszuprobieren und würde diese Alternativen ausprobieren, aber jede Hilfe wird geschätzt.Joe Pee – user557513
Bitte ignorieren Sie bitte meine letzte Frage, da die Antwort offensichtlich ist. Vielen Dank. – user557513