我正在寻找也提供存储/维护存储实体之间关系的 nosql 键值存储。我知道 Google App Engine 的数据存储允许实体之间的拥有和非拥有关系。是否有任何流行的 nosql 商店提供类似的东西?
尽管它们中的大多数都没有模式,但是否有方法可以将关系适当地应用于键值存储?
我正在寻找也提供存储/维护存储实体之间关系的 nosql 键值存储。我知道 Google App Engine 的数据存储允许实体之间的拥有和非拥有关系。是否有任何流行的 nosql 商店提供类似的东西?
尽管它们中的大多数都没有模式,但是否有方法可以将关系适当地应用于键值存储?
它属于图数据库的核心特性,为实体之间的关系提供支持。通常,您将实体建模为节点,将关系建模为图中的关系/边。与RDBMS不同,您不必提前定义关系——只需根据需要将它们添加到图中(无模式)。我创建了一个域建模库,提供了一些示例来说明这在实践中的表现。这些示例使用我参与的项目 Neo4j graphdb。该项目的邮件列表用于证明对图形建模问题非常有帮助。
面向文档的数据库Riak支持文档之间的链接。
您可以在任何数据库引擎(如键/值)之上添加对关系的支持,但它并非没有工作。这一切都取决于您的用例。如果您提供更多详细信息,则更容易找到有用的答案。
糟糕,现在我看到标题是“nosql 存储”,然后您的实际问题将其缩小到“nosql 键值存储”。由于键/值存储没有定义实体之间关系的语义,我仍然会发布我的答案。
MongoDB 是一个文档数据库,而不是键/值存储。但是,它确实提供了一种简单形式的文档间引用。这些工作或多或少类似于 SQL 外键,在删除引用的对象时会自动为空。
这对于您使用外键的相同类型的事情来说已经足够了,但是它没有针对严重的图遍历进行优化。
Google App Engine 中的关系只是在代码中访问时自动取消引用的实体的键。并且只是用于过滤时的值。它是 DB Api 的功能,而不是任何显式的功能,因此对 ReferenceProperty 的访问将简单地对引用的模型执行查询以访问对象。
如果您查看诸如 MongoDB 之类的东西,则关系存储在对象中(据我所知),但它们也可以存储在您想要的任何方式中,因为您将创建一个 API,该 API 将在连接表中搜索您的项目以与 App Engine 工作人员类似的方式建立关系。
保罗。