我正在寻找围绕整个schema.org内容建模应用程序的最佳方法。 Schema.org Hierarchie现在包含大约500种不同的类型,可用于在网站上标记微数据:http://schema.org/docs/full.html
目标是围绕所有这些事物构建一个通用系统,而无需使用默认SQL数据库对500多个不同的表进行建模。
作为一个起始示例,JobPosting似乎很容易建模,因为它只有一些字段,只有两个指向组织和放置对象的链接:请参阅http://schema.org/JobPosting
您建议使用哪种数据库系统(SQL,MongoDB,Cassandra,neo4J,Sesame,...)来建模这类数据?甚至还有一些特殊的Graph或RDF数据库可能是另一种选择。
奖金问题: 目前令我震惊的另一个问题是一些对象基于的多重继承,例如: http://schema.org/Dentist是一个LocalBusiness组织,但也是一个地方,因此它有来自几个不同父母的字段。
所以我正在寻找一个系统:
请告诉我哪些信息有助于找到更好的答案。
答案 0 :(得分:6)
我认为MongoDB非常适合,因为它的文档可以更容易地表示各个模式。 (解决了变量列问题)。
要解决链接问题,仅存储引用是有意义的。例如,在JobPosting中,您可能希望存储OrganizationId
和PlaceId
,因为这些文档相当复杂。这也使查询某个组织的JobPostings变得微不足道。
注意有时,嵌入可能更合适,但这在很大程度上取决于文档的更新方式。特别是,许多对象可能引用相同的地址,因此地址的变化应该反映在任何地方。有时候,事实恰恰相反。这是一个只有你自己才能回答的关键问题。这取决于系统的使用方式。
在任何情况下,链接意味着单个查找可能必须遍历引用树。同样,这在很大程度上取决于用例:
假设您要显示JobPosting。现在您可以显示属性列表,对于“组织”,您打印的所有内容都是“ACME,Inc。”有一个链接。该链接将发送到“ACME,Inc。”的详细信息页面在这种情况下,您的查询非常简单。您唯一需要做的就是将组织名称复制到JobPosting(去规范化),这样就更容易显示。
另一方面,如果要在原地显示所有内容,则必须执行更多查询并在代码中构建域模型对象。这不是什么大问题,但在循环引用等情况下需要额外的注意。
我想最好的方法是使用相应的最具体的类型作为集合名称(因此ContactPoint最终在ContactPoint集合中,PostalAddress集合中的PostalAddress等)。
唯一剩下的问题是多重继承或mixins。我之前没有使用过ruby,但我猜mongodb ruby驱动程序支持mixins。
您仍然需要处理索引等问题,但同样,这在很大程度上取决于用例。您可能希望索引大多数外键,但其他索引需要手动操作。