質問

私は現在 db4o (Java バージョン) を試していますが、見たものはかなり気に入っています。しかし、実際のライブ (Web) 環境でどのように動作するのか疑問に思わずにはいられません。db4o の実行について (良いことも悪いことも) 共有できる経験がある人はいますか?

役に立ちましたか?

解決

DB40 .NET バージョンを大規模なクライアント/サーバー プロジェクトで実行します。

私たちの経験では、一般的なリレーショナル データベースよりもはるかに優れたパフォーマンスが得られる可能性があると考えています。

ただし、この種のパフォーマンスを得るには、実際にオブジェクトを調整する必要があります。たとえば、多数のオブジェクトを含むリストがある場合、これらのリストの DB4O アクティブ化は遅くなります。この問題を回避するには、関係を逆転するなど、さまざまな方法があります。

もう 1 つの苦痛はアクティベーションです。DB4O からオブジェクトを取得または削除すると、デフォルトではオブジェクト ツリー全体がアクティブ化されます。たとえば、Foo をロードすると、ロードするものがなくなるまで Foo.Bar.Baz.Bat などがロードされます。これはプログラミングの観点からは優れていますが、オブジェクト内のネストが増えるとパフォーマンスが低下します。パフォーマンスを向上させるために、アクティブ化するレベルの深さを DB4O に指示できます。オブジェクトがたくさんある場合、これを行うには時間がかかります。

もう 1 つの問題点はテキスト検索でした。DB4O のテキスト検索は、SQL の全文インデックス作成よりもはるかに遅いです。(このことはサイトではっきりと説明されます。)幸いなことに、DB4O 上にテキスト検索エンジンをセットアップするのは簡単です。私たちのプロジェクトでは、必要なテキスト フィールドのインデックスを作成するために Lucene.NET を接続しました。

データベースのアップグレードを適用する際に便利な GetField API など、一部の API は機能しないようです。(たとえば、プロパティの名前を変更し、データベース内の既存のオブジェクトをアップグレードしたい場合は、これらの「リフレクション」API を使用してデータベース内のオブジェクトを検索する必要があります。[Index] 属性などの他の API は安定版 6.4 バージョンでは機能しないため、代わりに、厳密に型指定されていない Configure().Index("someField") を使用してインデックスを指定する必要があります。

データベースが大きくなるにつれてパフォーマンスが低下するのを目撃しました。現在 1 GB のデータベースを使用しており、依然として高速ですが、小さなデータベースで開始したときほど高速ではありません。

ID がデータベースに存在しない場合に Db4O.GetByID がデータベースを閉じるという別の問題が見つかりました。

ネイティブ クエリ構文 (最も自然で、言語に統合されたクエリ構文) は、あまりフレンドリーではない SODA クエリよりもはるかに遅いことがわかりました。したがって、次のように入力する代わりに、

// C# syntax for "Find all MyFoos with Bar == 23".
// (Note the Java syntax is more verbose using the Predicate class.)
IList<MyFoo> results = db4o.Query<MyFoo>(input => input.Bar == 23);

その優れたクエリ コードの代わりに、文字列ベースで厳密に型指定されていない醜い SODA クエリを使用する必要があります。

.NET 担当者向けに、これまでで最高の構文を提供する LINQ-to-DB4O プロバイダーが最近導入されました。ただし、パフォーマンスが醜い SODA クエリと同等になるかどうかはまだわかりません。

DB4O サポートは適切です。私たちは彼らと何度も電話で話し、有益な情報を受け取りました。彼らのユーザー フォーラムはほとんど価値がありませんが、ほとんどすべての質問は答えられません。彼らの JIRA バグ トラッカーは多くの注目を集めているため、厄介なバグがある場合は JIRA にファイルすると修正されることがよくあります。(修正されたバグが 2 つあり、中途半端な方法でパッチが適用されたバグがもう 1 つあります。)

これらすべてを怖がらないなら、遭遇した問題にもかかわらず、私たちは DB4O に非常に満足していると言わせてください。私たちが得たパフォーマンスは、私たちが試したいくつかの O/RM フレームワークを吹き飛ばしました。私はそれをお勧めします。

2015 年 7 月の更新 この回答は 2008 年に書かれたものであることに注意してください。賛成票には感謝していますが、それ以来世界は変化しており、この情報は書かれた時ほど信頼できるものではない可能性があります。

他のヒント

ほとんどのネイティブ クエリはバックグラウンドで SODA クエリに効率的に変換できるため、違いは生じません。もちろん、強力な型付き言語の領域にとどまるため、NQ を使用することをお勧めします。NQ でインデックスを使用する際に問題がある場合は、お気軽に問題を投稿してください。 db4o フォーラム 私たちはあなたを助けるように努めます。

ゴラン

私が遭遇した主な問題はレポート作成です。db4o データ ソースに対して効率的なレポートを実行する方法はないようです。

ジュダさん、最新製品バージョン (7.4) の機能である透過的アクティベーションを使用していないようですね?おそらく、最新バージョンで解決されている他の問題がある可能性があるため、使用しているバージョンを指定した場合でしょうか?

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