3

現在、データベース ベンダーを選択しようとしています。

仲間のデータベース開発者からの個人的な意見を求めているだけです。

私の質問は、特に次のような人々を対象としています。

1) 以前にディスク (ハイブリッド) へのレプリケーションをサポートするメイン メモリ DB (MMDB) を使用したことがある (つまり、 ExtremeDB )

また

2) Versant Object Databaseおよび/またはObjectivity Databaseおよび/またはProgress ObjectStoreを使用したことがある

質問は本当に: あなたの経験に基づいて、私のアプリケーションに適したデータベース ベンダーをお勧めできるかどうかです。

私のアプリケーションは商用のリアルタイム (ハイパフォーマンス) オブジェクト指向 C++ GIS アプリであり、多くの緯度/経度検索を行う必要があります (つまり、特定のエリアで、そのエリア内の一致するすべてのターゲットを検索します)。 ..R ツリー インデックス)。

データベースに保存したいデータの型はすべてオブジェクトとしてモデル化されており、それらは std::list と std::vector を使用しているため、当然オブジェクト データベースは理にかなっているように思えます。従来の RDBMS はおそらく私が実際に探しているものではないことを確信するのに十分な記事を読みました。

  1. パフォーマンス (リスト/ベクターなどの動的長データの結合または複数のテーブル)
  2. プログラミングの容易さ (インピーダンスのミスマッチ)

ただ、性能面では、

  1. 入力データは、約 40 MB/秒でシステムに供給されています。

  2. したがって、システムは 1 秒あたり約 350 回の挿入の速度でデータベースへの挿入も行います (各オブジェクトは 64KB から 128KB まで変化します)。

  3. データベースは、複数のスレッドを介して一貫して検索および更新されます。

私の理解では、ここにリストしたすべてのオブジェクト DB はデータベース オブジェクトを格納するためにキャッシュを使用します。ExtremeDB は、特にメモリ用に設計されているため、キャッシュ ロジックなどのオーバーヘッドを回避できると主張しています。

だから..私は少し混乱しています。オブジェクト DB はリアルタイム システムで使用できますか? MMDB と同じくらい「高速」ですか?

4

2 に答える 2

5

基本的に、MMDB と OODB の違いは、MMDB では、すべてのデータが RAM に基づいているが、ある時点でディスクに永続化されることが想定されていることです。一方、OODB は、DB 全体が RAM に適合するという期待がないという点で、より一般的です。

MMDB は、永続化されたデータが必ずしも RAM 内のデータと「一致」する必要はないという概念を放棄することで、これを活用できます。

永続性を備えたものが機能する方法は、更新時に何らかの方法でデータをディスクに書き込む必要があるということです。

ほとんどすべての DB は、これに何らかのログを使用します。これらのログは基本的に、ファイルに追加されたデータの「生の」ページ、またはおそらく個々のトランザクションです。ファイルが「大きくなりすぎる」と、新しいファイルが開始されます。

ログがメイン ストアに適切に統合されると、ログは破棄 (または再利用) されます。

これで、ログ ファイルにトランザクションを追加するだけで、粗雑な RAM DB が存在し、再起動するとログが RAM に読み込まれます。したがって、本質的に、ログ ファイルはデータベースです。

この手法の欠点は、トランザクションが長くて多いほど、ログ/DB が大きくなるため、DB の起動時間が長くなることです。ただし、理想的には、現在の状態を「スナップショット」することもできます。これにより、最新のログがすべて削除され、効果的に圧縮されます。

このように、DB が管理しなければならないすべてのルーチン操作は、他のディスク ページやインデックス ページなどを更新するのではなく、ページをログに追加することです。理想的には、ほとんどのシステムはそれほど頻繁に「起動」する必要がないため、おそらく、起動時間はそれほど問題ではありません。

したがって、このようにして、MMDB は、ログとディスク ページを維持しながら、ディスクとの契約が異なる OODB よりも高速になる可能性があります。このように、DB 全体が RAM に収まり、適切にキャッシュされていても、通常の操作中にログ操作以外のディスク操作が発生するため、OODB は遅くなる可能性があります。MMDB ではこれらの操作が「メンテナンス」として発生します。タスクは、ダウンタイムおよび/または休止時間中にスケジュールできます。

これらのシステムのいずれかが実際のパフォーマンス ニーズを満たすことができるかどうかについては、私にはわかりません。

于 2009-05-18T18:46:04.187 に答える
1

データベースのバックエンド (リーダー プロセスとライター プロセス、キャッシング、ロック管理、txn ログ ファイル、ACID セマンティクス) は同じであるため、RDB と OODB は実際には非常に似ています。違いは、アプリケーション プログラマへのインターフェイスです。あなたのデータモデルは複雑で、実際の継承関係を持つ多くのクラスで構成されていますか? それなら〇〇でいい。比較的フラットでシンプルですか?次に、RDB に移動します。関係の性質は何ですか?それはポインターのようなもので、似ていますか?次に、RDB に移動します。(順序付けられた)リスト、配列、マップのように、より複雑ですか?次に、OOに行く必要があります。また、他のアプリと統合する必要のないスタンドアロンのアプリケーションはありますか? その後、OOは大丈夫です。他のアプリとデータを共有する必要がありますか (つまり、複数のアプリが同じデータベースにアクセスします)? それは OO の契約を破るものであり、RDB に固執する必要があります。データベースのスキーマは安定していますか、それとも頻繁に進化すると予想されますか? OODB は不適切な広告スキーマの進化であるため、頻繁な変更が予想される場合は、RDB を使用してください。

于 2009-11-06T10:34:09.530 に答える