为具有关系的分层内容选择什么数据库?

What database to choose for the hierarchical content with relations?

我想要一个类似评论的网站,但不仅有评论,还有其他类型的内容。网站的设计结合了层次结构(每个内容 object/record/entity 都有一个父容器 - 一种容器)和关系 - 每个内容 object/record/entity 都有许多相关的其他对象:

最重要的事情之一就是性能。关系在 NoSQL 中过去效率低下,正如我在网上读到的并且已经在其他项目中尝试过的那样。另一方面,除了提到的关系之外,一般设计具有明显的内容存储库结构,这是设计对象(文档、文章、评论)层次结构的准确反映。另外,我真的很喜欢 NoSQL 中记录的松散结构。然而,我不关心(也不使用)诸如版本控制和其他与 NoSQL 相关的事情。

所以我想在一个项目中结合两个词:分层和关系,或者实际上,它的模型。除此之外,我希望该项目是 restful,以便移动应用程序可以使用通过 API 提供的相同内容。另一个要求是内容应该可搜索.

您会为这样的项目选择什么类型的存储?

您可以使用以下内容(使用 PostgreSQL)在 SQL 中轻松建模分层数据结构:

CREATE TABLE comments (
    id INTEGER,
    parent INTEGER,
    content VARCHAR(1024)
)

其中parent指的是父评论的id

如果您正在寻找公开 RESTful 接口的 NoSQL 数据库,您可以考虑 CouchDB。 然后,您可以将 CouchDB 复制到 Elasticsearch 以进行更强大的搜索。

但如果您的数据是关系型数据,那么我强烈建议您首先考虑 SQL 数据库,例如 PostgreSQL

我决定使用图形数据库。这就是我拒绝其他人的原因:

  • 我不想使用 NoSQL(文档),因为关系很难维护并且通常需要额外的代码基础设施(通常是自定义的)来处理它们,例如参见Diaspora NoSQL problems
  • 我不想使用 RDBMS,因为基于结构的数据库强加了众所周知的限制并且不反映领域
  • 我拒绝了 key-value 和大型 table 数据库,因为它们有非常具体的用例

图数据库已在多个 content-oriented 个项目中使用,并且似乎做得非常好。