makāmau ist eine Wissensgraph-Editor für Nicht-Experten.
Informationen werden als „Nodes“ abgelegt. Sie können Werte verschiedener Typen haben:
Nodes können durch bestimmte Nodes verknüpft werden:
Texten kann eine Sprache zugeordnet werden. Dies erleichtert das Erkennen von Aussprache (z.B. 🇬🇧 Bank vs. 🇩🇪 Bank) und Bedeutung (z.B. 🇬🇧 Gift vs. 🇩🇪 Gift, 🇬🇧 Tier vs. 🇩🇪 Tier). Texte haben zudem ein Typ-Attribut, mit dem festgehalten werden kann, ob es sich um einen reinen Text, URL oder Email-Adresse handelt.
Alle Veränderungen (Hinzufügen, Löschen, Anpassung von Nodes) werden mit Metadaten (Autor, Ort, Datum/Uhrzeit) historisiert. Dies ermöglicht:
Alle Daten verbleiben grundsätzlich beim Client. Es muss also weder ein zentraler Datenbankserver installiert/betreut, noch die Daten einem Betreiber anvertraut werden.
Es steht den Benutzern natürlich frei, die Daten selbst zu übertragen bzw. mit Anderen zu teilen.
Für jeden Node können Schreib- und Leseberechtigungen vergeben werden. Damit kann gesteuert werden, welche Nodes privat, öffentlich oder nur durch bestimmte andere Benutzer einsehbar oder veränderbar sind.
Um eine starke Bindung an Programmier- und Abfragesprachen, sowie DBMS-Produkte zu vermeiden, ist das Datenmodell top-down definiert. Implementiert sind Datenmodell und Backends (Storage Layer, Query Engine) in Rust. Rust ermöglicht Portabilität und Integrierbarkeit, sowie ressourcenarmen, verlässlichen und sicheren Betrieb.
Daten und Queries können auf andere Modelle/Frameworks/Abfragesprachen abgebildet werden. DBMS sind somit frei wählbar. Das ist wertvoll, da einige Papers/Benchmarks zeigen, dass RDBMS-basierte Backends häufig performanter und/oder Ressourcen-schonender sind, als dedizierte Triple/Graph Stores.
Mittels meiner JNI-Bindings Rucaja konnte ich zeigen, dass das JVM-Ökosysten, insbesondere Apache TinkerPop), von Rust aus grundsätzlich nutzbar wäre. Genutzt wird dies allerdings nicht.
Node IDs sind UUIDs, können also dezentral generiert werden. Verteiltes Arbeiten und Austausch sind somit möglich.
Nachteilig ist die relativ große Datenmenge von 128 Bit (16 Bytes) bzw. 32/36 Bytes in ASCII-Darstellung. Viele RDBMS unterstützen keine 128-bit Integer-Zahlen.
Trotz langjähriger Suche habe ich keine Wissensmanagement-Software gefunden, die sowohl unstrukturierte Informationen, als auch strukturierte Informationen (insbesondere qualifizierte Zusammenhänge) zufriedenstellend unterstützt.
Zwischen 2012 und 2018 experimentierte ich mit eigenen Ansätzen:
Aus den gesammelten Erfahrungen formulierte ich Anforderungen an eine für mich optimale Software. makāmau ist der Versuch, diese Anforderungen zu erfüllen.