makāmau

makāmau ist eine Wissensgraph-Editor für Nicht-Experten.

Eigenschaften

Nodes

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.

Historie

Alle Veränderungen (Hinzufügen, Löschen, Anpassung von Nodes) werden mit Metadaten (Autor, Ort, Datum/Uhrzeit) historisiert. Dies ermöglicht:

Offline

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.

Berechtigungen

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.

Umsetzung

Technologieunabhängigkeit

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

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.

Hintergrund

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.


Alle Angaben ohne Gewähr • HomeKontakt