8

我正在寻找围绕整个 schema.org 构建应用程序的最佳方式。Schema.org 层次结构现在包含大约 500 种不同的类型,可用于标记网站上的微数据:http: //schema.org/docs/full.html

目标是围绕所有这些事物构建一个通用系统,而无需使用默认 SQL 数据库对 500 多个不同的表进行建模。

作为一个起始示例,JobPosting 的建模似乎非常简单,因为它只有一些字段和两个指向组织和地点对象的链接:请参阅http://schema.org/JobPosting

您会建议使用哪种数据库系统(SQL、MongoDB、Cassandra、neo4J、Sesame 等)对此类数据进行建模?甚至还有一些特殊的图形或 RDF 数据库可能是另一种选择。

额外问题: 目前让我大吃一惊的另一个问题是某些对象所基于的多重继承,例如http://schema.org/Dentist是一个 LocalBusiness 组织,但也是一个地方,因此它具有来自几个不同的字段父母。

所以我正在寻找一个系统:

  • 变量列,因为我不想使用 SQL-DDL 对那些数不胜数的属性进行建模
  • 多重继承或类似的东西(混合)
  • 记录之间的有用链接(如 JobPosting 指向组织及其所属地点)
  • 简单查询(例如,获取给定组织的所有 JobPosting)

请让我知道什么样的信息将有助于找到更好的答案。

4

1 回答 1

7

我认为 MongoDB 非常适合,因为它的文档可以更轻松地表示各个模式。(解决变量列问题)。

为了解决链接问题,只存储引用是有意义的。例如,在 JobPosting 中,您可能想要存储 anOrganizationId和 a PlaceId,因为它们是相当复杂的文档。这也使得查询某个组织的 JobPostings 变得微不足道。

注意有时,嵌入可能更合适,但这在很大程度上取决于文档的更新方式。特别是,许多对象可能引用同一个地址,因此地址的变化应该反映在任何地方。有时,情况恰恰相反。这是一个关键问题,只能由您来回答。这取决于系统的使用方式。

在任何情况下,链接意味着单个查找可能必须遍历引用树。同样,这在很大程度上取决于用例:

假设您要显示 JobPosting。现在您可以显示属性列表,对于“组织”,您打印的所有内容都是“ACME, Inc.”。带链接。该链接会将您转到“ACME, Inc.”的详细信息页面。在这种情况下,您的查询非常简单。您唯一需要做的就是将组织名称复制到 JobPosting(去规范化),这样更容易显示。

另一方面,如果您想就地显示所有内容,则必须执行更多查询并在代码中构建域模型对象。这没什么大不了的,但在循环引用等情况下需要额外注意。

我想最好的方法是使用各自最具体的类型作为集合名称(因此 ContactPoint 最终会出现在 ContactPoint 集合中,PostalAddress 会出现在 PostalAddress 集合中,等等)。

唯一剩下的问题是多重继承或混合。我以前没用过ruby,但我猜是mongodb ruby​​驱动支持mixins。

您仍然必须处理索引等问题,但这在很大程度上取决于用例。您可能想要索引大多数外键,但其他索引需要手动处理。

于 2012-01-13T11:41:27.297 回答