-2

背景:オブジェクト データベースと思われるものを探しています。ただし、私が調べた (確かに少数の) オブジェクト データベースは単純な永続化レイヤーであり、本格的な DBMS ではありません。私が探しているものがオブジェクトデータベースと見なされるかどうかさえわからないので、正しい方向に私を向けるのに本当に助けていただければ幸いです。


私が探しているものを 2 ページにわたって説明したくないので、例を使用して私の要点を説明します。保存する必要がある "BlogPost" オブジェクトがあるとします。疑似コードでは、次のようなものです。

class BlogPost
    title:String
    body:String
    author:User
    tags:List<String>
    comments:List<Comment>

Comment(独自のクラスであると仮定します。)

現在、リレーショナル データベースでauthorは、 を指す外部キーとして格納され、User.idと はtagscomments関係を格納する別のテーブルを使用して、1 対多または多対多の関係として格納されます。私が欲しいのは、次のことを行うデータベース エンジンです。

  • 追加のルックアップが必要な外部キーを使用する代わりに、直接参照を使用して関連オブジェクト ( author、など) を格納します。tags言い換えれば、互いの上にあるオブジェクトは、データベースによってネイティブにサポートされる必要があります
  • オブジェクト全体を取得して更新し、データベースに戻すことなく、コメントやタグをブログ投稿に追加できます (ドキュメント指向データベースのように -- CouchDB がその例です)。

私が探しているのはナビゲーションデータベースだと思いますが、わかりません。私が考えていることに少しでも似ているものはありますか?もしそうなら、それは何と呼ばれていますか?(あるいは、実際に動作するデータベースを教えてください。) それとも、私がうるさすぎますか?


編集:

明確にするために、私は ORMや抽象化レイヤーなどを探しているわけではありません。これを内部的に行う実際のデータベースを探しています。難しくて申し訳ありませんが、検索しても何も見つかりませんでした。


編集:

また、JVM 用の何かが優れていると思いますが、現時点では、それがどのプラットフォームで実行されるかはあまり気にしません。

4

11 に答える 11

7

あなたが説明していることは、グラフデータベースで簡単にモデル化できると思います。次に、他に何も取得する必要なく、変更を加えたいノード/エッジに移動できるという利点があります。JVM には、Neo4jオープン ソース グラフ データベースがあります (私はチームの一員です)。これについては、ハイ スケーラビリティ、 thinkvitaminの概要の一部、またはこのスタックオーバーフロー スレッドで読むことができます。タグについては、グラフ データベースに格納すると、関連するタグや類似のものを見つけたい場合に、いくつかの利点が得られると思います。メーリング リストに1 行ドロップするだけで、コミュニティがきっとあなたを助けてくれるでしょう。

于 2009-06-27T10:09:13.017 に答える
5

C# と Java で利用できるdb4oを試すことができます。

于 2009-06-26T06:29:34.973 に答える
2

これを探していると思います: http://www.odbms.org/。このサイトには、かなり優れたオブジェクト データベースであるObjectivityなど、オブジェクト データベースに関する優れた情報があります。

于 2009-06-26T06:27:27.877 に答える
1

象はこれを行います: http://common-lisp.net/project/elephant/

于 2009-06-27T08:28:30.100 に答える
1

あなたが説明したことは、通常のRDBMSで実行されている(N)Hibernateで実行できます。

通常のデータベースでこのような永続化レイヤーを使用する利点は、便利なプログラミングと組み合わせた標準データベース システムを使用できることです。非常に自然な方法でクラスを宣言し、(N)Hibernate は参照/リストと外部キーの関係を変換する方法を提供します。

Java チュートリアル: http://docs.jboss.org/hibernate/stable/core/reference/en/html/tutorial-firstapp.html

.NET チュートリアル: https://web.archive.org/web/20081212181310/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx

十分にサポートされている標準 RDBMS を使用したくないと主張し、データをより風変わりであまりテストされていないものに信頼したい場合は、 Object Relational Databaseを探しています。

ただし、そのような製品は、標準の RDBMS 上のレイヤーにすることで実装するのがおそらく最善でしょう。これがおそらく、(N)Hibernate のような ORM が最も人気のあるソリューションである理由です。標準の RDBMS ソフトウェア (および広く利用可能な管理/ユーザー スキル) を適用できるにもかかわらず、プログラミング経験は 99% オブジェクトベースです。

于 2009-06-26T06:17:31.357 に答える
0

C# と Java で利用できるSTSdb、DB4O、Perst ... を試すことができます。

于 2010-06-17T16:03:44.400 に答える
0

Oracle のネストされたテーブルはその機能の一部を提供しますが、更新では、ネストされたテーブルに行を追加するだけではなく、ネストされたテーブル全体を置き換える必要があります。

于 2009-06-26T06:42:40.863 に答える
0

「 EntityFirst」アプローチの ORM を探していると思います。

EntityFirst アプローチでは、開発者はデータベースにほとんど[まったく関心がない]。エンティティまたはオブジェクトを構築するだけです。次に、ORM がエンティティをデータベースに格納し、必要に応じて取得します。

私の知る限り、EntityFirst ORM は「Signum」だけです。.net の上に構築された素晴らしいフレームワークです。SignumFrameworkのWeb サイトでいくつかのビデオを参照することをお勧めします。役に立つと思います。

リンクテキスト: http://www.signumframework.com

ありがとう。

于 2009-06-26T06:50:31.600 に答える
0

これはまさにLINQが設計された目的です。

Microsoft LINQ は、配列、列挙可能なクラス、XML (XLINQ)、リレーショナル データベース、およびサード パーティのデータ ソース内のデータのクエリ、射影、およびフィルター処理に使用できる独自のクエリ演算子のセットを定義します。任意のデータ ソースに対してクエリを実行できますが、データをオブジェクトとしてカプセル化する必要があります。そのため、データ ソースがデータをオブジェクトとしてネイティブに格納しない場合は、データをオブジェクト ドメインにマップする必要があります。クエリ演算子を使用して記述されたクエリは、LINQ クエリ処理エンジンによって実行されるか、拡張メカニズムを介して、別のクエリ処理エンジンを実装するか別の形式に変換して別のデータ ストアで実行される LINQ プロバイダーに渡されます ( SQL クエリ (DLINQ) としてのデータベース サーバーなど)。

于 2009-06-26T06:22:11.287 に答える
0

さまざまな用語があり、すべてObject-Relational Mapping、別名 ORM にリンクされています。これはおそらく、検索するのに最も役立つものになるでしょう。ORM ライブラリは、多くのプログラミング言語用に存在します。

于 2009-06-26T06:23:14.313 に答える