2009-10-25 15 views
18

私はdb4oオブジェクトのデータベースを試していますが、今まで私が見ているものはかなり気に入りましたが、私はこの記事をstackoverflow db4o experiences?にも読んでいます。db4oの作業に関するいくつかの質問

現実世界のアプリケーションでdb4oがどのように使用されているかについて、今私はいくつか質問しています。ですから、db4oで作業している経験があれば(特にWebアプリケーションの場合)、私はそれらを聞いてみたいと思います。ここで

は私の質問は以下のとおりです。

  1. db4oの保存されたオブジェクトを操作するときにオブジェクトIDを管理するにはどうすればよいです**
    あなたは通常、常にすべての主キー/ ID列を持っているRDBMSの背景から来ます?テーブル、私は今db4oでオブジェクトのアイデンティティを管理する方法を想像できません。

    例えば、私がNHibernate/mysqlを使っていて、idでUserオブジェクトを見つける必要があるなら、私はsession.Load(primaryKey)を行い、そのPKによって取得されます。 PKがテーブル定義の自動増分として定義されていることも非常に一般的です。

  2. db4oにこのようなオプションがないので、私はオブジェクトデータベース内のいくつかのオブジェクトを識別するためにGuid構造体を使用していました。

  3. DBに格納されたオブジェクトを表示するツールはありますか?

    db4oの世界には、SQL Server Management Studio(あまり洗練されていないもの)がありますか?既に格納されているデータ/オブジェクトをdbファイルに表示したいと思います。

  4. あなたのドメインオブジェクトの名前を変更するときにあなたはうんざりしていますか?

    私が知る限り、クラスの名前を変更すると、以前に保存されたdb内のインスタンスはもう取得できません。この問題を回避する方法はありますか?すでに多くのオブジェクトを含むライブデータベースに対する更新をどう対処しますか?

  5. プロパティをDBに保存しないように除外できますか?

    たとえば、1つのドメインオブジェクトが(ステートレスな)サービスオブジェクトへの参照を保持している場合、ドメインオブジェクトが永続化されるとサービスオブジェクトも永続化されます。

少なくともデータベースにサービスインスタンスが保存されていると少し奇妙に思えます。

サービスインスタンスを保存しないように除外できますか?ドメインオブジェクトが再び取得された場合、サービスがインスタンスに再度注入されることを確認するにはどうすればよいですか?

+0

+1これは良い質問です。お手数ですがお手伝いします。 –

答えて

13

1)db4oストアドオブジェクトを使用して作業するとき、オブジェクトIDをどのように管理しますか? db4oでは通常idはありません。 db4oはオブジェクトを区別するためにobject-identityを使います。したがって、メモリ内の同じオブジェクトはデータベースの同じオブジェクトになります。

オブジェクトをシリアル化しない限り、これは正常に動作します。しかし、オブジェクトがシリアライズ/切断されるとすぐに、これはもう機能しません。たとえばWebシナリオの場合:ブラウザにデータを送信します。今度はオブジェクトを後でいくつかのIDで識別する必要があります。

この3つのオプションは可能です: - db4o internal idを使用してください。しかし、このIDは永遠ではありません。データベースのデフラグを行うと、このIDが変更されます。 - db4o's UUIDsを使用してください。しかし、db4o UUIDはかなり大きいです - 自分でIDを作成する

2)データベースを見るオブジェクトマネージャツールがあります。しかし、現在の状態は非常に限られています。私の意見では、これはdb4oの大きな欠点です。

3)aliases, rename classes and fields etcを作成できます。しかし、継承階層の変更は機能しません。次に、古いデータを新しいインスタンスにコピーする必要があります。

4)はい。フィールドをtransientとして.NET-NonSerialized属性またはカスタム属性でマークできます。

+0

db4oは、上に掲載されたすべてのリンクを解除するWebサイトを再構築しました。 – Tom

+0

すべてのリンクを更新しました。 – Gamlor

1

DB4Oでいくつかの作業をしている間、私は含まれているものよりもはるかに優れた単純なDB4Oオブジェクトブラウザを作成しました。試してみてください、それはオープンソースです。オブジェクト指向のオブジェクトID(などのdb4oなど)のデータベースで

http://sourceforge.net/projects/db4oviewer/develop

2

は本当に使うべきではありません。代わりに、1つはクエリとナビゲーションを使用しました。 最初に1つまたはいくつかのオブジェクトを取得するクエリを実行し、次にナビゲーションを使用して他のオブジェクトに到達します。

「ナビゲーション」は、ロードされたオブジェクトのフィールド/参照に従うだけであることを意味します。

オブジェクト識別子を使用すると、悪いスタイルと見なすことができます。私が知っているほとんどのアプリケーションは、それらをまったく使用しません。

関連する問題