使用关系为层次结构内容选择什么数据库?

时间:2017-01-11 10:34:29

标签: database database-design architecture rdbms nosql

我希望有一个类似评论的网站,但不仅仅是评论,其他类型的内容。网站的设计结合了层次结构(每个内容对象/记录/实体都有父 - 一种容器)和关系 - 每个内容对象/记录/实体都有许多相关的其他对象:

  • 内容的作者(即用户)
  • 相关评论(与他们自己的关系,特别是作者)
  • 项目正在作为DB
  • 中的单独记录进行审核
  • 图库中的图片

最重要的事情之一就是表现。在NoSQL中,关系曾经是效率低下的,因为我已经在网上阅读并且已经尝试过其他项目。另一方面,除了提到的关系之外,一般设计具有明显的内容库,如结构,这是对象(文档,文章,评论)网站的分层排列的精确反映。另外,我真的很喜欢NoSQL中记录的松散结构。然而,我并不关心(也不使用)版本控制等与NoSQL相关的其他事情。

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

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

2 个答案:

答案 0 :(得分:0)

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

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

parent指的是父评论的id

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

但如果你的数据是关系数据,那么我建议你首先考虑像PostgreSQL这样的SQL数据库。

答案 1 :(得分:0)

我决定使用Graph DBs。这就是我拒绝其他原因的原因:

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

图形数据库已经在许多面向内容的项目中使用,并且似乎做得非常好。