makāmau

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

Eigenschaften

Nodes

Informationen werden als „Nodes“ abgelegt.

Nodes können Werte verschiedener Typen haben:

Nodes können durch bestimmte Nodes verknüpft werden:

Texten kann eine Sprache zugeordnet werden. Dies erleichtert Verständnis der Bedeutung (z.B. 🇬🇧 Gift, 🇩🇪 Gift) und Aussprache (z.B. 🇬🇧 Bank, 🇩🇪 Bank). 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 dem Benutzer 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 durch bestimmte andere Benutzer einsehbar oder veränderbar sind.

Umsetzung

Technologieunabhängigkeit

Frontend

Das Frontend ist eine Flutter-Applikation und steht somit auf den wichtigsten Desktop- und Mobil-Betriebsystemen offline zur Verfügung.

Backend

Um eine starke Bindung an Programmier- und Abfragesprachen, sowie DBMS-Produkte zu vermeiden, ist das Datenmodell top-down definiert. Implementiert sind das Datenmodell und die Backends (Storage Layer, Query Engine) in Rust. Rust erleichtert Portabilität, 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 ist.

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 für mich Anforderungen an eine optimale Software. makāmau ist der Versuch, diese Anforderungen zu erfüllen.

Name

Hawaiianisch-klingende Namen und japanisch-anmutende Überstriche finde ich interessant. Die Übersetzung von „weise“ in's Hawaiianisch zeigte, dass dieser Name bereits vergeben ist.

Variationen führten zu „makamau“, worin man „maka“ (= Auge) und „mau“ (= viele) erkennen könnte. Der Überstrich auf dem mittleren „ā“ betont das Zentrum und drückt Stabilität und Dynamik aus ... blah blah blah.


made with makāmau