了解了解SQL和无SQL的所有知识,最好存储树木?

时间:2012-01-24 22:44:24

标签: mysql sql mongodb nosql

我们即将升级我们网站上的评论系统,现在它是一个单级结构,并且正在使用MySQL。我们希望将其改为多层次。

要记住的一件事是我们会在每个用户个人资料下显示所有评论。

到目前为止,考虑因素如下:

SQL专业人士:

  • 更轻松地为每个用户检索评论

SQL缺点:

  • 检索线程的整个树需要更长时间

no-SQL专业人士:

  • 线程中的所有注释都可以作为单个对象检索
  • 现有树模式

no-SQL cons:

  • 更难/更慢地检索一个用户的评论
  • 对现有树木的更难更新

在您的制作经历中,有哪些其他优点和缺点?

4 个答案:

答案 0 :(得分:1)

使用RDBMS,您可以使用JOIN - 因此只需存储一次注释,不存储任何数据(pro),并且可以通过使用JOIN来满足您的显示用例。

例如MongoDB,JOIN不受支持(con),但是你可以通过复制数据来实现两种情况的良好性能 - 在树结构中与页面文档相关的一次存储注释,再一次在“UserComments”集合文档中存储注释与特定用户有关。即,查看与页面关联的所有注释,查询该页面的CollectionA,查看用户的所有注释,按用户ID查询CollectionB。

答案 1 :(得分:1)

您可以在SQL中使用基于树的结构,请参阅LTree for PostgreSQL - http://www.postgresql.org/docs/9.1/static/ltree.html

除此之外,您还可以使用常见的表格表达式执行递归查询,例如Disqus - http://justcramer.com/2010/05/30/scaling-threaded-comments-on-django-at-disqus/

答案 2 :(得分:0)

您还可以将所有注释存储在SQL中的单个记录中,方法是将其存储为XML字符串。这样可以让您轻松访问并快速检索。

答案 3 :(得分:0)

对于NOSQL(也可以应用于SQL),您不必以规范化的形式存储数据,对其进行非规范化。在两个地方存储评论!有一个关于用户的评论列表。

来自凯尔银行家nested comment approaches的一些好读物。

和类似的stackoverflow post