Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MongoDB vs SQL Server用于存储递归数据树_Sql Server_Mongodb_Performance_Nosql - Fatal编程技术网

Sql server MongoDB vs SQL Server用于存储递归数据树

Sql server MongoDB vs SQL Server用于存储递归数据树,sql-server,mongodb,performance,nosql,Sql Server,Mongodb,Performance,Nosql,我目前正在指定一个存储线程注释树的项目 对于那些不熟悉我所说内容的人,我将解释,基本上每个注释都有一个父注释,而不仅仅属于一个线程。目前,我正在开发一个存储这些数据的关系型SQL Server模型,这仅仅是因为我已经习惯了。看起来是这样的: Id int --PK ThreadId int --FK UserId int --FK ParentCommentId int --FK (relates back to Id) Comment nvarchar(max) Time dateti

我目前正在指定一个存储线程注释树的项目

对于那些不熟悉我所说内容的人,我将解释,基本上每个注释都有一个父注释,而不仅仅属于一个线程。目前,我正在开发一个存储这些数据的关系型SQL Server模型,这仅仅是因为我已经习惯了。看起来是这样的:

Id int  --PK
ThreadId int  --FK
UserId int  --FK
ParentCommentId int  --FK (relates back to Id)
Comment nvarchar(max)
Time datetime
我所做的是通过ThreadId选择所有注释,然后在代码中递归地构建我的对象树。我还做了一个连接,以获取诸如用户名之类的内容

在我看来,对于这种模型,像MongoDB这样的文档存储(NoSql)可能是更好的选择。但我对此一无所知

  • 如果我选择MongoDB,会有什么陷阱
  • 如果我将其存储为MongoDB中的一个文档,我是否必须在每个注释中包含用户名,以避免我必须按键调出每个用户记录,因为它不是“关系”的
  • 当您使用MongoDB时,是否必须在您需要的对象上积极缓存“相关”数据


编辑:我确实找到了在MongoDB中存储信息树的方法。考虑到我的要求之一是能够向登录用户列出他最近的评论列表,我现在强烈倾向于只使用SQL Server,因为我认为我无法用MongoDB做任何能够带来真正性能好处的聪明事情。但我可能错了。我真的希望这方面的专家(或两位)能提供更多的信息。

在Mongo(和其他文档数据库)中存储分层数据的主要优点是能够存储数据的多个副本,使查询在不同的用例中更有效。在您的情况下,如果将整个线程存储为分层嵌套文档,那么检索整个线程的速度将非常快,但是您可能还希望将每个注释不嵌套地存储,或者可能存储在用户记录下的数组中,以满足您的第二个要求。由于任意嵌套,我认为Mongo无法通过用户ID有效地索引您的层次结构

与所有NoSQL存储一样,您可以扩展到许多数据节点,从而允许多个同时读写器,从而获得更多好处


希望这有帮助

非常酷。我甚至没有想到要存储整个节点的多个副本。再说一次,当进行编辑时,这也需要维护很多。