1

本当に私の質問は、oodb でネストされたデータ構造を使用する場合、db の他のインスタンス内にクラスのインスタンスを配置するか、または何らかのリレーショナル マッピングが必要になるかということです

私は 1 年ほど前から OODB (オブジェクト指向データベース) に興味を持っています。私は本質的に Web/アプリケーション開発者であり、MS T-SQL や MySQL などのリレーショナル モデルで Web サイト階層などの複雑な階層構造を表現することの複雑さとパフォーマンスの両方の点で深刻な制限があることにしばらくの間気づいていました。

簡単なJava(疑似コード)の例を提示するには:-

クラス/DB タイプ:

public class PageObject{

    public String title = "";
    public String shortname = "";
    public boolean published = false;
    public PageObject[] pages = null;

    public PageObject() {}

}

したがって、ページ配列 (またはベクター、コレクションなど) に同じクラスの他のインスタンスを保持できるこのクラスから始めた場合、最終的にはサイト レイアウトをそのまま持つ可能性が生じる可能性があります。

    • ファースト・ホーム・チャイルド
      • 1
      • 2
      • 3
    • セカンドホームチャイルド
    • サードホームチャイルド

これを見ると、ホームアイテムのページコレクションに3 つのアイテムが格納されており、このコレクション内の最初のホーム チャイルドアイテムが独自のページコレクションにさらに 3 つのアイテムを持っていることがわかります。

この構造を DB4O (またはその他の OODB) に格納すると、データベースが大幅に拡大すると仮定すると、ホームページなどのトップ レベル オブジェクトを呼び出すと、その下にあるすべてのアイテムも返されるという点で、パフォーマンスの面で問題が発生します。 ?

この質問は非常に主観的に見えるかもしれませんが、事前にお詫び申し上げますが、リレーショナル モデルから頭を捻り出すことができないようです。コードでさらに作業します。

この段階では、誰でもこれについて明確にすることができれば、非常に高く評価されます。どんな考えでも事前に乾杯!

4

2 に答える 2

4

これは、テーブルと結合が過剰に感じられる複雑なオブジェクト階層を扱っている場合に、OODB がまさに適している場所です。db4o (および Versan't VOD などの他の oodb) は、(rdbms のように) 結合を使用する必要がなく、オブジェクト間の関係を透過的に処理します (オブジェクト モデルで定義されているように)。本質的に、オブジェクト モデルはデータ モデルまたはスキーマになります。これらの oodbms システムは通常、ネストされた構造を処理する場合に rdbms よりも優れたパフォーマンスを発揮し、循環参照も処理できます。

予想よりも多くのオブジェクトのロード/保存を避けるために、oodbms は任意のレベルのオブジェクト アクティベーション (または更新) 深度で動作します (たとえば、この例では、最初のレベルのホーム チャイルドのみを取得/更新するようにデータベースに指示できます)。または、(Sam が提案するように) 透過的な永続モードで wok を構成することもできます。このモードでは、db はオンデマンドでアクセスするもののみを取得または更新します (つまり、オブジェクト ツリーをナビゲートするとき)。

詳細情報 (db4o): http://developer.db4o.com/Documentation/Reference/db4o-8.0/java/reference/Content/basics/activation.htm

HTH

一番!

ドイツ人

于 2011-05-27T14:02:30.380 に答える