-2

背景:好的,所以我正在寻找我猜是对象数据库的东西。然而,我所看到的(当然很少)对象数据库是简单的持久层,而不是成熟的 DBMS。我不知道我正在寻找的东西是否甚至被认为是一个对象数据库,因此非常感谢任何帮助我指出正确方向的帮助。


我不想给你两页来描述我在寻找什么,所以我会用一个例子来说明我的观点。假设我有一个需要存储的“BlogPost”对象。像这样的东西,在伪代码中:

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

(假设Comment是它自己的类。)

现在,在关系数据库中,author将存储为指向 a 的外键User.id,并且使用单独的表将tagsandcomments存储为一对多或多对多关系来存储关系。我想要的是一个执行以下操作的数据库引擎:

  • 使用直接引用而不是使用外键来存储相关对象(authortags等),这需要额外的查找;换句话说,彼此之上的对象应该由数据库本机支持
  • 允许我在博客文章中添加评论或标签,而无需检索整个对象、更新它,然后将其放回数据库(如面向文档的数据库——CouchDB 就是一个例子)

我想我正在寻找的是一个导航数据库,但我不知道。有什么和我想的很相似的吗?如果是这样,它叫什么?(或者更好的是,给我一个实际工作的数据库。)还是我太挑剔了?


编辑:

澄清一下,我不是在寻找 ORM或抽象层或类似的东西。我正在寻找一个在内部执行此操作的实际数据库。对不起,如果我很难,但我已经搜索过,我找不到任何东西。


编辑:

此外,JVM 的某些东西会很棒,但在这一点上,我真的不在乎它运行在什么平台上。

4

11 回答 11

7

I think what you are describing could easily be modeled in a graph database. Then you get the benefit of navigating to the nodes/edges where you want to make changes without any need to retrieve anything else. For the JVM there's the Neo4j open source graph database (where I'm part of the team). You can read about it over at High Scalability, as part of an overview at thinkvitamin or in this stackoverflow thread. As for the tags, I think storing them in a graph database can give you some extra advantages if you want to find related tags and similar stuff. Just drop a line on the mailing list, and I'm sure the community will help you out.

于 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

您所描述的完全可以通过在普通 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 并且宁愿将您的数据信任到更奇特且测试较少的东西,那么您正在寻找对象关系数据库

然而,这样的产品可能最好通过使其成为标准 RDBMS 之上的一个层来实现。这可能就是为什么像 (N)Hibernate 这样的 ORM 是最受欢迎的解决方案的原因——它们允许应用标准的 RDBMS 软件(以及广泛可用的管理/用户技能),而编程体验 99% 是基于对象的。

于 2009-06-26T06:17:31.357 回答
1

Elephant does this: http://common-lisp.net/project/elephant/

于 2009-06-27T08:28:30.100 回答
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 回答
0

Oracle 的嵌套表提供了该功能的一部分,尽管在更新中,您不能只向嵌套表添加一行 - 您必须替换整个嵌套表。

于 2009-06-26T06:42:40.863 回答
0

我猜您正在寻找具有“ EntityFirst ”方法的ORM。

在 EntityFirst 方法中,开发人员最不关心数据库。您只需要构建您的实体或对象。然后 ORM 负责将实体存储在数据库中并根据您的意愿检索它们。

我所知道的唯一 EntityFirst ORM“ Signum ”。这是一个建立在 .net 之上的精彩框架。我建议你去看看SignumFramework网站上的一些视频,我相信你会发现它很有用。

链接文字:http ://www.signumframework.com

谢谢。

于 2009-06-26T06:50:31.600 回答
0

也许是 ZODB?好的介绍在这里找到:http: //www.ibm.com/developerworks/aix/library/au-zodb/

于 2009-06-26T07:28:51.257 回答
0

You could try out STSdb, DB4O, Perst ... which is available in C# and Java.

于 2010-06-17T16:03:44.400 回答