Eine relationale Datenbank ist nicht Ihre beste erste Wahl dafür.
Warum?
Sie möchten, dass alle Ihre Editoren Änderungen an Ihrem Player vornehmen.
Ihr Player ist - effektiv - ein Server für alle diese Editoren. Ihr Player benötigt mehrere offene Verbindungen. Es muss all diese Verbindungen auf Veränderungen hören. Es muss diese Änderungen anzeigen.
Wenn die Änderungen wirklich groß sind, können Sie zu einer Hybridlösung wechseln, bei der die Editoren die Änderungen und dem Spieler mitteilen.
In beiden Fällen müssen die Redakteure dem Spieler mitteilen, dass sie eine Änderung haben. Es ist viel, viel einfacher als der Spieler versucht, Änderungen in einer Datenbank zu entdecken.
Ein besseres Design ist ein Server, der Nachrichten von den Redakteuren akzeptiert, sie persistiert und den Player benachrichtigt.Dieser Server ist weder ein Editor noch ein Player, sondern lediglich ein Broker, der sicherstellt, dass alle Nachrichten behandelt werden. Es akzeptiert Verbindungen von Redakteuren und Spielern. Es verwaltet die Datenbank.
Es gibt zwei Implementierungen. Server ist der Spieler. Der Server ist vom Player getrennt. Das Design des Servers ändert sich nicht - nur das Protokoll. Wenn der Server der Player ist, ruft der Server die Player-Objekte direkt auf. Wenn der Server vom Player getrennt ist, schreibt der Server in den Socket des Players.
Wenn der Player Teil des Servers ist, werden Playerobjekte direkt aufgerufen, wenn eine Nachricht von einem Editor empfangen wird. Wenn der Player getrennt ist, sammelt ein kleiner Leser die Nachrichten von einem Sockel und ruft die Spielerobjekte an.
Der Player verbindet sich mit dem Server und wartet dann auf einen Strom von Informationen. Dies kann entweder von den Editoren oder Referenzen auf Daten, die der Server in der Datenbank gespeichert hat, eingegeben werden.
Wenn der Nachrichtenverkehr klein genug ist, damit die Netzwerklatenz kein Problem darstellt, sendet der Editor alle Daten an den Server/Player. Wenn der Nachrichtenverkehr zu groß ist, schreibt der Editor in eine Datenbank und sendet eine Nachricht mit nur einem Datenbank-FK an den Server/Player.
Bitte klären Sie "Wenn der Editor bei der Benachrichtigung abstürzt, ist der Spieler dauerhaft vermasselt" in Ihrer Frage.
Das klingt nach einem schlechten Design für den Spieler-Service. Es kann nicht "permanent vermasselt" werden, es sei denn, es wird von den verschiedenen Editoren keine Informationen erhalten. Wenn es einen Status von den Editoren erhält (aber zum Beispiel versucht, diesen Status zu spiegeln), sollten Sie ein Design in Erwägung ziehen, bei dem der Player einfach den Status vom Editor erhält und nicht "permanent durcheinander" kommen kann.
Die Idee war eine stark persistente Datengestaltung, wo Änderungen nie verloren gehen. Ich stellte mir vor, dass alle Prozesse als zentraler Hub um die Datenbank herum angeordnet werden. Wenn sich die Datenbank ohne Benachrichtigung ändert, wird der Player erst aktualisiert, wenn er neu gestartet wird. Deine Idee klingt interessant. – paniq
"Eine relationale Datenbank ist nicht Ihre beste erste Wahl dafür." - Was wäre dann meine beste erste Wahl? – paniq
Ihre Bearbeitung kommt dem nahe, was sich aus meinem Verständnis verschiedener Beiträge hier ergeben hat. vielen Dank. – paniq