【问题标题】:Is there a database like this?有这样的数据库吗?
【发布时间】:2009-06-26 06:14:42
【问题描述】:

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


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

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

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

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

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

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


编辑:

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


编辑:

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

【问题讨论】:

    标签: database graph-databases object-oriented-database


    【解决方案1】:

    我认为您所描述的内容可以很容易地在 graph database 中建模。然后,您将受益于导航到要进行更改的节点/边缘,而无需检索其他任何内容。对于 JVM,有 Neo4j 开源图形数据库(我是团队的一员)。您可以在 High Scalability 上阅读有关它的内容,作为概述的一部分在 thinkvitaminthis stackoverflow thread 中。至于标签,我认为如果你想找到相关的标签和类似的东西,将它们存储在图形数据库中会给你一些额外的好处。只需在mailing list 上留言,我相信社区会为您提供帮助。

    【讨论】:

    • 嗯,我刚刚查了这个词,这听起来正是我所需要的。非常感谢!
    【解决方案2】:

    您可以尝试 C# 和 Java 中的 db4o

    【讨论】:

      【解决方案3】:

      我认为我们正在寻找这个:http://www.odbms.org/。这个站点有一些关于对象数据库的好信息,包括Objectivity,这是一个非常好的对象数据库。

      【讨论】:

      • +1 链接。客观性看起来像我想要的,但价格标签看起来并不吸引人。但如果我找不到其他任何东西,我会调查一下。
      • 查看 odbms.org 网站。还有其他对象数据库可能符合您的价格点(但是,它们可能不太符合 Objectivities 的质量。)
      【解决方案4】:

      【讨论】:

        【解决方案5】:

        您所描述的完全可以通过在普通 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% 是基于对象的。

        【讨论】:

        • 查看我的编辑,我不是在寻找 ORM 解决方案或抽象层,而是在寻找能够做到这一点的实际数据库。我目前正在使用抽象来模拟这一点,但我想看看是否有一个实际的数据库可以在本地完成它。
        • 顺便说一句,如果我遇到困难和/或挑剔,我很抱歉。如果不存在这样的东西,那对我来说并不令人心碎,但我只是想知道是否有类似的东西,因为它会让我的生活更轻松。
        • 您并不难 - 您的问题可能会受益于对为什么解决方案不能基于 RDBMS 的一些见解。有了足够好的抽象层,你怎么知道?
        • 他肯定在寻找对象数据库,而不是 ORM。如果您真的不关心将该数据库用于其他关系类型的目的(即报告),那么使用 ODBMS 优于 ORM 肯定有好处。
        • 尽管如此,他有点疯狂地排除 RDBMS+ORM 作为解决方案,因为他的问题的示例在我发布的教程的前几页中得到了解决。
        【解决方案6】:

        这正是 LINQ 的设计目的。

        Microsoft LINQ 定义了一组专有查询运算符,可用于查询、投影和过滤数组、可枚举类、XML (XLINQ)、关系数据库和第三方数据源中的数据。虽然它允许查询任何数据源,但它要求将数据封装为对象。因此,如果数据源本身不将数据存储为对象,则必须将数据映射到对象域。使用查询运算符编写的查询要么由 LINQ 查询处理引擎执行,要么通过扩展机制移交给 LINQ 提供程序,这些提供程序要么实现单独的查询处理引擎,要么转换为不同的格式以在单独的数据存储上执行(例如在数据库服务器上作为 SQL 查询 (DLINQ))。查询的结果作为内存中对象的集合返回,这些对象可以使用标准迭代器函数(例如 C# 的 foreach)进行枚举。

        【讨论】:

          【解决方案7】:

          有各种各样的术语,都链接到Object-Relational Mapping,又名 ORM,这可能是您查找的最有用的术语。 ORM 库适用于许多编程语言。

          【讨论】:

          • 我编辑了我的问题;我不是在寻找 ORM 或抽象层,而是在寻找执行此操作的实际数据库。
          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

            我猜您正在寻找一种采用“EntityFirst”方法的 ORM。

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

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

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

            谢谢。

            【讨论】:

            • 是的,您不是在寻找 ORM,但 SignumFramework 就是其中之一。他们是第一个在 Microsoft 办公室之外为他们的框架生成 LinqProviders 的人。 Signum 具有非常强大的功能。
            【解决方案10】:

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

            【讨论】:

            • 我确实看过 ZODB,但我听说它存在严重的性能问题。不确定这是否仍然正确;这些谣言已经很老了。
            【解决方案11】:

            您可以尝试STSdb、DB4O、Perst ...,它在 C# 和 Java 中都可用。

            【讨论】:

              猜你喜欢
              • 2015-06-09
              • 2018-10-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-13
              • 1970-01-01
              • 1970-01-01
              • 2013-06-06
              相关资源
              最近更新 更多