リレーショナルデータベースはこれにとって最善の方法ではありません。
なぜですか?
すべての編集者にあなたのプレーヤーに変更を渡したいと思っています。
あなたのプレイヤーは、すべての編集者のサーバーです。あなたのプレイヤーは複数のオープンな接続を必要とします。変更のためにすべての接続を聴かなければなりません。これらの変更を表示する必要があります。
変更が実際に大きい場合、編集者が変更を永続させるハイブリッドソリューションに移動することができます。とがプレーヤに通知します。
いずれにしても、編集者は変更があったことをプレーヤーに通知する必要があります。これは、プレーヤーがデータベース内の変更を発見しようとするよりずっと簡単です。
より良い設計とは、エディタからのメッセージを受け取り、それを維持し、プレーヤに通知するサーバです。このサーバーはエディターでもプレーヤーでもなく、すべてのメッセージが処理されることを保証するブローカーです。編集者やプレイヤーからの接続を受け入れます。データベースを管理します。
2つの実装があります。サーバーはプレーヤーです。サーバーはプレーヤーとは別です。サーバーの設計は変更されず、プロトコルのみが変更されます。サーバーがプレーヤーの場合、サーバーはプレーヤーオブジェクトを直接呼び出します。サーバーがプレーヤーとは別の場合、サーバーはプレーヤーのソケットに書き込みます。
プレイヤーがサーバーの一部である場合、プレーヤーオブジェクトは、エディターからメッセージを受け取ったときに直接呼び出されます。プレーヤーが別の場合、小さなリーダーがソケットからメッセージを収集し、プレーヤーオブジェクトを呼び出します。
プレーヤーはサーバーに接続し、情報の流れを待ちます。これは、エディタから入力するか、またはサーバがデータベース内で保持していたデータへの参照とすることができます。
ネットワークの待ち時間が問題にならないようにメッセージのトラフィックが十分小さい場合、エディタはすべてのデータをサーバー/プレーヤーに送信します。メッセージトラフィックが大きすぎる場合、エディタはデータベースに書き込み、データベースFKだけのメッセージをサーバ/プレーヤに送信します。
「通知中にエディタがクラッシュすると、プレイヤーは永久に台無しになっています。
これは、プレイヤーサービスのデザインが悪いようです。それは、それが様々なエディタから状態を取得していない限り、 "永久に混乱"することはできません。エディターからステートが取得されている場合(たとえば、その状態を反映しようとしている場合)、プレーヤーはエディターから状態を取得し、「永久に台無し」にならないようなデザインを検討する必要があります。
アイデアは、変更が失われないように強く永続的なデータ設計を行うことでした。私はすべてのプロセスをデータベースの周りに中央ハブとして配置することを想像しました。通知なしでデータベースが変更された場合、プレイヤーは再起動されるまでリフレッシュされません。あなたのアイデアは面白く聞こえる – paniq
"リレーショナルデータベースはこれにとって最善の選択肢ではありません。" - 私の最善の選択肢は何でしょう? – paniq
あなたの編集は、さまざまな投稿の私の理解から現れたものに近くなります。どうもありがとうございました。 – paniq