代码之家  ›  专栏  ›  技术社区  ›  WeNeedAnswers

RDF三层存储,是否适合日常编程?

  •  0
  • WeNeedAnswers  · 技术社区  · 15 年前

    我很喜欢这些,而且想把它们用在任何事情上。为什么为日常编程(实体/表)做RDF三重存储(如联系人、客户、公司等)是个坏主意?

    在技术上有没有我没有遇到的缺点?我担心检索数据,但我认为这是SPARQL所涵盖的。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Pēteris Caune    15 年前

    没有一种尺寸适合所有的工具。三层存储在今天对于某些类型的任务是合适的,并且可用的,而不是其他任务。

    similar question 在semanticoverflow.com上被问到,常见的答案是相同的:“使用任何合适的”。

        2
  •  2
  •   Carsten    15 年前

    查询时间往往比传统DBS慢得多,即使使用简单查询也是如此。此外,许多RDF存储不支持标准的DB功能,如事务、崩溃恢复等。

        3
  •  2
  •   Timo Westkämper    15 年前

    我们在使用RDF三重存储进行常规编程时遇到的一个缺点是,大多数引擎不支持查询中的聚合(最小、最大、分组依据)。

    我们用来决定RDBMS的清单如下

    RDBMS如果

    • 静态架构
    • 数据量很大
    • 不需要RDF导出
    • 需要Lucene支持(例如,通过Hibernate搜索很容易)
    • 强大的数据一致性要求(涉及资金等)

    RDF中频

    • 非固定或动态架构
    • 小到大的数据量
    • 需要RDF导出
    • 松散的数据一致性要求

    如果没有正确的工具,为正在进行的项目重构RDFBMS模式可能会带来很大的开销。

    Lucene支持也由一些RDF引擎提供,但是没有像Hibernate搜索那样有良好的文档记录和支持。

    RDF引擎的可伸缩性也在稳步提高,其中NoSQL端的思想被纳入RDF引擎中,但是如果您使用Jena和Sesame的标准引擎,这个划分仍然是有效的。

        4
  •  2
  •   DNA    14 年前

    一个尚未提到的问题是,更新TripleStores以反映不断变化的数据通常比RDBMS或OODBMS更有效,因为没有“对象”或“行”的概念——只有三倍和资源。因此,删除域对象需要小心,否则最终会在三重存储中留下大量垃圾。没有级联删除是一个密切相关的问题。

    另一方面,RDF甚至对日常应用也有帮助,因为您可以灵活地添加新的子类、实体之间的关系或子关系,而不必破坏任何代码,并且可以轻松地向资源添加注释、注释等。

        5
  •  1
  •   RobV    15 年前

    关于Peteris的答案,在如何为三重存储建模数据与其他技术(如OOP、关系数据库、XML,如行、类、属性等)之间存在一些关键差异。

    这在很大程度上取决于您想做什么,它们是否合适,以及您是否可以为您的应用程序找到一个具有正确性能特征的应用程序。

    人们倾向于将三重存储描述为无模式的数据库,但实际上,除非您使用某种形式的模式/本体,否则它们不会特别有用。如果您想使用SPARQL来获取信息,那么在存储中需要一些模式模式,您可以针对这些模式编写查询。

    就我个人而言,我仍然会在很多事情上使用关系数据库,并且仍然会这样做,而我使用RDF和三重存储来处理越来越多的事情,这并不意味着我已经准备好扔掉那些运行良好的东西。

    作为最后一点,即使您暂时使用关系数据库,也有类似的技术 DB2RDF 它可以将关系数据库转换为RDF,这样您就可以暂时使用数据库,然后根据需要将数据库导出到RDF。