Graph

Aus Graph-IT Wiki
Zur Navigation springen Zur Suche springen

Wenn wir uns ein digitales Unternehmen vorstellen wie einen Menschen, dann stellt der Graph stellt das Gehirn des digitalen Unternehmens dar. Hier werden sowohl Informationen gespeichert als auch Entscheidungen getroffen. Damit der Graph mit der Umwelt kommunizieren kann, muss es eine Schnittstelle geben. Deshalb besteht der Graph aus zwei Teilen. Der erste Teil stellt den Kern des Graphen dar, das funktionale Modell. Der zweite Teil des Graphen bildet die Schnittstelle zur realen Welt, damit eine Interaktion mit dem Modell möglich wird. Dieser Teil ist der Prozessteil des Graphen. In diesem Kapitel wird beschrieben, wie das System generell funktioniert, während später auf die konkrete Implementierung eingegangen wird.

Idee

Ein Unternehmen ist ein sehr komplexes System. Es besteht aus vielen verschiedenen einzelnen Komponenten, welche miteinander und mit der Außenwelt kommunizieren. Außerdem ist ein Unternehmen durch innere und äußere Einflüsse einem permanenten Wandel unterzogen. Ein Beispiel hierfür ist ein einfacher Geschäftsvorfall, wie er in der Praxis üblich ist, wie eine Kundenbestellung. Diese Kommunikation mit der Außenwelt mit der Vertriebsabteilung erzeugt zahllose Aktivitäten im Unternehmen, welche eine Kommunikation innerhalb des Unternehmens und nach außen erzeugen. Bei dieser Kommunikation entstehen viele Daten, welche für das Unternehmen relevant sind. So führt die Kundenbestellung möglicherweise dazu, dass die Logistik den Auftrag zur Auslieferung bekommt, eine Bestellung beim Lieferanten ausgelöst wird und am Ende die Finanzabteilung die Zahlung des Kunden verbuchen muss. Außerdem verändert sich ein Unternehmen, es werden neue Produkte und Dienstleistungen angeboten, gesetzliche Rahmenbedingungen ändern sich, welche das Unternehmen betreffen oder eine Restrukturierung des Unternehmens wird durchgeführt, indem eine neue Abteilung mit neuen Aufgaben gegründet wird.

Damit ein ausreichend genaues digitales Abbild des Unternehmens geschaffen werden kann, benötigt man eine passende Datenstruktur. Es gibt nun verschiedene Anforderungen, welche die Datenstruktur erfüllen muss. Die Daten müssen so abgelegt werden, dass man sie wiederfinden kann und die Struktur muss flexibel genug sein, dass man sie entsprechend der Notwendigkeit anpassen kann. Außerdem muss es eine Schnittstelle geben, mit der Informationen mit der Datenstruktur ausgetauscht werden können. Ein weiterer Aspekt ist, dass benötigte Informationen ausreichend schnell aus der Datenstruktur ausgelesen werden können.

Das funktionale Modell des Graphen enthält alle Elemente, damit das digitale Abbild des Unternehmens hinreichend erzeugt werden kann und der Prozessteil des Graphen sorgt dafür, dass die Datenstruktur mit der Umwelt kommunizieren kann.

Das funktionale Modell

Funktionale Programmiersprachen bieten die Möglichkeit, sehr komplexe Datenstrukturen zu erschaffen, welche konsistent formuliert werden können. Das Modell ist damit wirkungsfrei. Probleme, welche die Skalierung von Datenstrukturen in herkömmlichen Systemen behindern, treten hier nicht auf. Die Grundidee des funktionalen Modells ist, das wir immer einen diskreten Zustand der Welt betrachten. Soll das Abbild geändert werden, so wird der nächste diskrete Zustand des Abbildes errechnet. Im wesentlichen kann das als Grundprinzip des funktionalen Modells betrachtet werden. Konkret besteht das funktionale Modell aus Knoten, die über Kanten, wir nennen sie Verknüpfungen, verbunden sind. Gibt es zwischen zwei Knoten eine Kante, so besteht diese aus zwei gerichteten Verknüpfungen. Jeder Knoten kann beliebig viele Attribute, wir nennen sie Attributknoten, besitzen. Ein Knoten ist jedoch typisiert, so dass für einen bestimmten Knoten nur bestimmte Attributknoten und bestimmte Verknüpfungen zu anderen Knotentypen erlaubt sind. Die Verknüpfungen besitzen eine Kardinalität von 1 oder n. Eine Kardinalität von 1 bedeutet, dass ein bestimmter Knotentyp nur ein Mal mit einem bestimmten andern Knotentyp verknüpft sein kann. Eine Kardinalität von n bedeutet, dass ein bestimmter Knotentyp mit beliebig vielen anderen Knotentypen verknüpft sein kann. Ein Beispiel hierfür soll das digitale Abbild einer Rechnung sein. Mit dem bisher definierten System können wir folgendes formulieren:

Es gibt Knoten vom Typ „Rechnung“ mit zwei Attributen, „Datum“ und „Rechnungsnummer“

Es gibt einen Knoten vom Typ „Kunde“ mit dem Attribut „Name“

Die Verknüpfung von „Rechnung zu Kunde“ hat die Kardinalität 1, das bedeutet, eine Rechnung kann immer nur einem Kunden zugeordnet werden.

Die Verknüpfung von „Kunde zu Rechnung“ hat die Kardinalität n, das bedeutet, ein Kunde kann mehrere Rechnungen bekommen haben

Damit lässt sich eine beliebige Datenstruktur darstellen. Das Selbe kann man natürlich auch mit einer relationalen Datenbank oder einem objektorientierten Modell erreichen.

So weit haben wir erst einmal die Beschreibung der Datenstruktur und dann die Datenstruktur selbst. Die Beschreibung der Datenstruktur ist im funktionalen Modell selbst enthalten, sie ist also selbstreflektiv. Es gibt einen Knoten vom Typ Knoten, der einen Knoten beschreibt, in unserem Beispiel z.B. die Rechnung.

Nun möchten wir in unserem Beispiel wissen, wie viele Rechnungen ein Kunde bereits bekommen hat. Dafür fügen dem Knoten Kunde einen weiteres Attribut „Anzahl Rechnungen“ hinzu. Dafür definieren wir in unserem funktionalen System eine Datenfunktion. Das Attribut „Anzahl Rechnungen“ wird nun über eine Funktion definiert, nämlich die Anzahl der Verknüpfungen vom Typ „Kunde zu Rechnung“

In Datenfunktionen sind alle herkömmlichen Programmierbefehle erlaubt, die keine Informationen von außen in das System einbringen. Die aktuelle Implementierung des Modells ist in PHP durchgeführt, so dass alle PHP Funktionen, bei welchen sich der Rückgabewert aus den Parametern berechnen lässt, erlaubt sind. Nicht erlaubt sind Funktionen, welche dem Modell Informationen hinzufügen, so z.B. date() oder rand(). Nun können, wenn wir komplexere Datenstrukturen bilden, Datenfunktionen wieder auf andere Datenfunktionen zugreifen, so dass eine Änderung des Systems eine Kaskade von Änderungen hervorrufen kann. Die Datenfunktion selbst (also ihre Beschreibung) ist nun selbstreflektiv im funktionalen Modell enthalten, damit ist sie ebenfalls Teil des funktionalen Systems.

Bei jeder Änderung werden die Informationen über jedes einzelne Attribut, jede Verknüpfung und jeden Knoten gespeichert. Das Speichern der Änderung wiederum ruft möglicherweise die nächste Datenfunktion auf, welche einer weitere aufrufen könnte usw. So muss ein bestimmter Teilbaum des Graphen möglicherweise bei der Änderung neu ausgerechnet werden. In aller Regel ebbt diese Kaskade an Änderungen aber extrem schnell ab. Danach ist der neue Zustand des Modells konsistent gespeichert. Die „Zwischenergebnisse“, also die Werte der Attribute, welche durch eine Funktion definiert sind, werden jedoch abgespeichert, so dass diese zu einem späteren Zeitpunkt sofort verfügbar sind. Somit haben wir im Modell immer ein Abbild der Realität geschaffen, welches zu einem diskreten Zeitpunkt konsistent ist, nämlich nach der letzten Änderung. Primärdaten, welche nicht durch Funktionen berechnet werden, sind somit aus Modellsicht als Konstanten zu betrachten.

Wird nun lesend auf die Struktur zugegriffen, so wird nur auf das gespeicherte Abbild des aktuellen Modells zugegriffen. Damit stellt das funktionale Modell eine rein funktionale Programmiersprache dar, was beträchtliche Auswirkungen auf die Fähigkeiten des Systems hat. Ohne an dieser Stelle weiter darauf einzugehen, somit kann sich das funktionale Modell mit bekannten Methoden der Informatik und Mathematik selbst manipulieren, ohne dass die Integrität der Daten gefährdet wird. Das ist vermutlich der bedeutendste Effekt des gesamten Systems.

Es gibt noch weitere Elemente des funktionalen Modells, welche aber nur Variationen der bisher erläuterten Konzepte sind. Es ist neben der Änderung von Attributen möglich, Knoten zu erzeugen und zu vernichten, sowie Verknüpfungen herzustellen und zu entfernen. Darauf wird in den späteren Kapiteln noch weiter eingegangen.

Der Prozessteil

Mit dem funktionalen System ist nun die Möglichkeit geschaffen worden, eine beliebig komplexe Datenstruktur aufzubauen, deren Konsistenz zu jedem (diskreten) Zeitpunkt sichergestellt ist und die jederzeit sehr schnell abgefragt werden kann, unabhängig davon, wie komplex die abgerufene Information entstanden ist.

Es wurde auch herausgestellt, dass durch die Änderung einer Information der nächste diskrete Zustand des funktionalen Systems erzeugt wird.

Es gibt nun neben der Abfrage von Daten aus dem funktionalen System nun noch zwei Wege der Kommunikation, nämlich das schon benannte Ändern der Information und außerdem die Möglichkeit, dass das funktionale System Änderungen an der Welt herbeiführen möchte.

Betrachten wir nun als erstes die Änderung des Modells. Diese Interaktion ist recht einfach; es wird eine beliebige Information geändert, also ein Attribut wird geändert, ein Knoten wird erzeugt oder vernichtet oder eine Verknüpfung wird hergestellt oder entfernt. Aus Sicht des funktionalen Systems sind diese Änderungen alle gleichwertig, sie führen dazu, dass das gesamte System in den nächsten Zustand überführt wird. Konkret gibt es dafür Befehle, welche das Modell manipulieren, so z.B. der Befehl erzeuge(), welcher einen Knoten erzeugt oder setze() welcher ein Attribut ändert. Wird einer dieser manipulierenden Befehle aufgerufen, wird das funktionale Modell neu ausgerechnet.

Möchte das Modell die Realität verändern, so wird geprüft, ob sich ein bestimmtes Attribut geändert hat. Ist dies der Fall wird eine Aktionfunktion ausgeführt, welche die Welt verändern kann. Das kann z.B. das Versenden einer E-Mail sein oder auch das Einschalten einer Beleuchtung.

Damit unser Modell konsistent bleibt, werden die beiden Manipulationen außerhalb des funktionalen Modells durchgeführt. Für diesen Zweck gibt es den Prozessteil des Graphen. Im Prozessteil des Graphen, welcher nicht Teil des funktionalen Modells ist, auch wenn er selbst nur als Teil des funktionalen Modells formuliert ist, können auch von außerhalb Informationen in das System geschleust werden, außerdem gibt es hier die Aktionfunktionen, welche die Welt manipulieren. Er bildet also die Schnittstelle zur realen Welt.

Der Prozessteil besteht aus Knoten, welche als Prozessknoten typisiert sind. Diese sind die einzigen, welche das Modell ändern dürfen und sie sind die einzigen, die von der Welt geändert werden dürfen. Die Änderung, welche die Prozessknoten am Modell durchführen, errechnen aber gleichzeitig auch den neuen Zustand aller Prozessknoten, so dass diese möglicherweise Manipulationen an der Welt durchführen können, welche durch die Veränderung von Informationen aus der Welt ausgelöst wurden.

Da die Struktur des funktionalen Modells im Graphen selbstreflexiv abgebildet ist, kann der Umfang des Abbildes der Realität, also das digitale Modell des Unternehmens, jederzeit beliebig verändert werden. Dieser Vorgang ist aus Sicht des funktionalen Systems eine normale Änderung der Daten wie jede andere auch. Der Prozessteil führt in diesem Fall nur zusätzliche Manipulationen an der Welt aus, welche es ermöglichen, die geänderte Datenstruktur zu erzeugen. Die gespeicherten Daten sind aber nicht Teil des Modells sondern der Welt und somit vom Prozessteil des Graphen zu verwalten. Das mag nicht stimmig klingen, wenn man sich aber z.B. den Menschen ansieht, dann haben wir eine ähnliche Situation; der menschliche Verstand entspringt dem Gehirn, aber das Gehirn, in dem der Verstand entsteht ist nicht Teil des menschlichen Verstandes.

Da sich die Welt kontinuierlich verändert, muss auch das Abbild er Realität, also das funktionale Modell permanent aktualisiert werden. Würde das immer hintereinander gemacht, wäre das System viel zu langsam und außerdem ineffizient, da jede kleine Änderung erst komplett neu errechnet werden müsste, bevor der nächste Zustand erreicht ist. Da wir aber ein rein funktionales System haben, können die Änderungen parallel im System aktualisiert werden. Die Kaskaden der Neuberechnung des Modells sind auch bei paralleler Abarbeitung so, das am Ende ein konsistentes Modell entsteht. Das muss noch genauer erforscht werden, aber in der Praxis treten auch bei massiven, parallel durchgeführten Änderungen im Referenzmodell keine Inkonsistenzen auf.

Das funktionale Modell und der Prozessteil ergeben somit die Möglichkeit, ein sich aktualisierendes Abbild der Realität zu erschaffen, welches auch Informationen an die Welt zurück geben kann. Damit ist die theoretische Voraussetzung geschaffen, ein so komplexes System wie ein Unternehmen in beliebiger und sich ändernder Detaillierung digital abzubilden.