質問

db4oオブジェクトデータベースを試していますが、今のところ見ているものはかなり気に入っていますが、stackoverflow db4oエクスペリエンス?は、それほど簡単に見えるすべてのものが簡単ではないことを示しています。

今、実世界のアプリでdb4oがどのように使用されているかについて質問があります。そのため、db4oで(特にWebアプリのコンテキストで)作業した経験があれば、ぜひ聞いてみてください。

ここに私の質問があります:

  1. db4oで保存されたオブジェクトを操作するとき、オブジェクトIDをどのように管理しますか?**
    通常、すべてのテーブルの主キー/ ID列が常にあるRDBMSのバックグラウンドから来ると、db4oでオブジェクトIDを管理する方法について今は想像できません。

    たとえば、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つのドメインオブジェクトが(ステートレス)サービスオブジェクトへの参照を保持している場合、ドメインオブジェクトが永続化されるとサービスオブジェクトも永続化されますよね?

少なくとも私には、データベースにサービスインスタンスを保存するのは少し奇妙に思えます。

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

役に立ちましたか?

解決

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

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

次の3つのオプションが考えられます。 - db4o内部ID 。ただし、このIDは永遠ではありません。データベースを最適化すると、このIDが変更されます。 - db4oのUUID を使用する。しかし、db4o UUIDは非常に大きい -自分でIDを作成する

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

3)を作成できます。エイリアス、クラスやフィールドの名前の変更など。ただし、継承階層の変更は機能しません。次に、古いデータを新しいインスタンスにコピーする必要があります。

4)はい。フィールドを .NET-NonSerialized属性またはカスタム属性を使用した一時的

他のヒント

オブジェクト指向データベース(db4oなど)では、オブジェクトIDを実際に使用しないでください。 代わりに、クエリとナビゲーションを使用しました。最初にクエリを実行して1つまたはいくつかのオブジェクトを取得し、次にナビゲーションを使用して他のオブジェクトにアクセスします。

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

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

DB4Oでいくつかの作業を行いながら、付属のものよりもはるかに優れた動作をする単純なDB4Oオブジェクトブラウザーを作成しました。試してみてください、オープンソースです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top