リレーショナル データベースは、このための最適な最初の選択肢ではありません。
なんで?
すべての編集者がプレーヤーに変更を渡すようにします。
あなたのプレーヤーは、事実上、これらすべての編集者のためのサーバーです。プレーヤーには複数の開いている接続が必要です。変更については、これらすべての接続をリッスンする必要があります。それらの変更を表示する必要があります。
変更が非常に大きい場合は、編集者が変更を保持してプレーヤーに通知するハイブリッド ソリューションに移行できます。
いずれにせよ、編集者はプレイヤーに変更があることを通知する必要があります。プレーヤーがデータベース内の変更を検出しようとするよりも、はるかに簡単です。
より良い設計は、エディターからのメッセージを受け取り、それらを保持し、プレイヤーに通知するサーバーです。このサーバーはエディターでもプレーヤーでもなく、すべてのメッセージが処理されることを保証するブローカーにすぎません。編集者やプレイヤーからの接続を受け入れます。データベースを管理します。
2 つの実装があります。サーバーはプレーヤーです。サーバーはプレーヤーとは別です。サーバーの設計は変更されません。プロトコルのみが変更されます。サーバーがプレーヤーの場合、サーバーはプレーヤー オブジェクトを直接呼び出します。サーバーがプレーヤーから分離されている場合、サーバーはプレーヤーのソケットに書き込みます。
プレーヤーがサーバーの一部である場合、エディターからメッセージを受信すると、プレーヤー オブジェクトが直接呼び出されます。プレーヤーが分離されている場合、小さなリーダーがソケットからメッセージを収集し、プレーヤー オブジェクトを呼び出します。
プレーヤーはサーバーに接続し、情報のストリームを待ちます。これは、エディターからの入力か、サーバーがデータベースに永続化したデータへの参照のいずれかです。
メッセージ トラフィックが十分に小さく、ネットワークの遅延が問題にならない場合、エディターはすべてのデータをサーバー/プレーヤーに送信します。メッセージ トラフィックが大きすぎる場合、エディターはデータベースに書き込み、データベースの FK のみを含むメッセージをサーバー/プレーヤーに送信します。
質問で「通知中にエディターがクラッシュした場合、プレーヤーは完全に台無しになります」を明確にしてください。
これは、プレーヤー サービスの設計としては不適切なように思えます。さまざまなエディターから状態を取得しない限り、「永久に台無し」になることはありません。エディターから状態を取得している場合 (ただし、その状態をミラーしようとしている場合など) は、プレイヤーが単にエディターから状態を取得し、「永久にめちゃくちゃ」にならないような設計を検討する必要があります。