多くのオブジェクト間の複雑な関係を格納するためにオブジェクトデータベース(ZODB)を使用していますが、パフォーマンスの問題が発生しています。その結果、オブジェクトの取得と挿入を高速化するためにインデックスの作成を開始しました。これが私の話です。あなたが助けてくれることを願っています。
最初にデータベースにオブジェクトを追加するときは、そのオブジェクトタイプ専用のブランチにオブジェクトを挿入します。同じエンティティを表す複数のオブジェクトを防ぐために、重複を見つけるためにブランチ内の既存のオブジェクトを反復処理するメソッドを追加しました。これは最初は機能しましたが、データベースのサイズが大きくなるにつれて、各オブジェクトをメモリにロードして属性をチェックするのにかかる時間が指数関数的に許容できないほど大きくなりました。
この問題を解決するために、オブジェクトの属性に基づいてインデックスを作成し始めました。これにより、オブジェクトが追加されたときに、タイプブランチと属性値インデックスブランチに保存されます。たとえば、firstName ='John'およびlastName='Smith'の属性を持つpersonオブジェクトを保存した場合、オブジェクトはpersonオブジェクトタイプブランチに追加され、キーを使用して属性インデックスブランチ内のリストにも追加されます。ジョン」と「スミス」。
これにより、新しいオブジェクトを分析でき、属性インデックス内で交差するオブジェクトのセットのみをチェックする必要があるため、重複チェックで多くの時間を節約できました。
しかし、オブジェクトを更新するときの処理に関して、すぐに別の問題に遭遇しました。インデックスは、もはや正確ではない可能性があるという事実を反映するように更新する必要があります。これには、古い値に直接アクセスしてオブジェクトを削除できるように記憶するか、オブジェクトを見つけて削除するために属性タイプのすべての値を反復処理する必要があります。いずれにせよ、パフォーマンスはすぐに再び低下し始めており、それを解決する方法を見つけることができません。
このような問題は以前に発生したことがありますか?あなたはそれを何で解決しましたか、それともこれはOODBMSを使用するときに私が対処しなければならないことですか?
助けてくれてありがとう。