私はいくつかのグラフを持っています。各グラフの幅と深さは変化する可能性があり、実行時に変更や変更が加えられます。グラフの例を参照してください。
グラフ全体 (つまりツリー) を保持するためのルート ノードがあります。ノードは複数の子を持つことができ、各子は特別な目的を果たします。さらに、特定の情報を取得するために、ノードはすべての直接の子にアクセスできます。一方、子ノードは、それ自体の親ノードも他の兄弟ノードも認識しない場合があります。これまでのところ、目を見張るものはありません。
各グラフを格納し、オブジェクト データベース (この場合は DB4O) を使用して更新することは、非常に簡単に見えます。リレーショナル データベースを使用してデータの永続性 (データベース トリガーなどを含む) を実現することもできましたが、代わりにオブジェクト データベースでそれを実現したいと考えました。
私のグラフには奇妙な点が 1 つあります。別のグラフの例を参照してください。
計算を適切に実行するために、一部のノードは他のノードからの情報を必要とします。これらの他のノードは、兄弟、子供/孫、または他の種類の関連である可能性があります。この場合、特定のノードは他の関連するノードも認識しています (したがって、それらから必要な情報を直接取得できます)。簡単にするために、最初の画像はすべての潜在的な接続を示していません。
1 つのノードの状態が変化した場合 (たとえば、内部タイマーによってトリガーされた、または他のノードによってトリガーされた)、他のノード (関心のあるオブザーバー、オブザーバー パターンも参照) にその変更について通知します。通知を受けた各ノードは、適切なアクションを実行して自身の状態を更新します (そして、必要に応じて他のオブザーバーに通知します)。何かが変更されたことを知っているのは関係するノードだけなので、ルート ノードは発生したすべての変更を認識しているわけではありません。このような一連のイベントがルート ノードによってトリガーされた場合、もちろん大きな問題にはなりません。
目的は、オブジェクト データベースでデータの永続性を保証することです。メモリ内のデータは、データベース内に保存されているデータと同期している必要があります。複雑さを増しているのは、グラフが単純な (そしてばかげた) データ ノードで構成されていないという事実ですが、多くの機能が各ノードに統合されているという事実です (つまり、グラフ全体の状態変化をトリガーするイベント)。
提示された問題に対処する方法について、大まかなアイデアがいくつかあります (例: (1) データと機能をより強力に分離する、(2) データベースをより強力に統合する、(3) データを更新する間隔を任意に設定し、データが更新される可能性があることを受け入れる)。一定期間同期がとれない)。私は、そのような重要な問題に関するいくつかの入力とオプションを探しています (これは、具体的な実装に大きな影響を与えることは間違いありません)。
(編集済み) 言い忘れた別の側面があります。グラフは常にメモリに常駐するべきではありません。不要なグラフはデータベースにのみ存在するため、停止状態になります。これは、考慮が必要なもう 1 つの問題です。一時停止中は、更新メカニズムもスリープ状態になる可能性がありますが、これは意図したものではありません。