Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
C# mongodb模式设计问题_C#_Mongodb_Schema Design - Fatal编程技术网

C# mongodb模式设计问题

C# mongodb模式设计问题,c#,mongodb,schema-design,C#,Mongodb,Schema Design,我正在为stackoverflow这样的站点设计mongo db模式。这里有问题和用户。 用户可以将问题添加到收藏夹列表中,并可以在收藏夹列表中搜索问题 我有两个集合,作为用户和问题。问题是如何存储收藏夹。有两种选择 与用户一起存储常用问题Id的列表 存储将此问题添加到收藏夹中的用户的用户ID列表,以及问题。 我应该采取哪种方法?记住,我也需要搜索用户的收藏夹 对于数据库/记录大小的估计,假设stackoverflow具有的问题数、用户数和数据库操作数 欲了解更多信息 这个应用程序是用c编写的a

我正在为stackoverflow这样的站点设计mongo db模式。这里有问题和用户。 用户可以将问题添加到收藏夹列表中,并可以在收藏夹列表中搜索问题

我有两个集合,作为用户和问题。问题是如何存储收藏夹。有两种选择

与用户一起存储常用问题Id的列表 存储将此问题添加到收藏夹中的用户的用户ID列表,以及问题。 我应该采取哪种方法?记住,我也需要搜索用户的收藏夹

对于数据库/记录大小的估计,假设stackoverflow具有的问题数、用户数和数据库操作数

欲了解更多信息

这个应用程序是用c编写的asp.NETMVC,希望使用Lucene.net进行搜索


提前感谢

如果您想显示每个问题的常用标志的数量,您可能应该将它们与问题一起存储,以避免搜索用户数据库。

如果您这样设计网站,并希望获得相同的性能,您肯定需要对数据进行非规范化。所以,我建议将用户最喜欢的问题id存储在用户中,并将用户id与问题一起存储和存储。在收藏夹操作过程中,您需要在用户、问题的两个位置插入数据,但您将能够检索快速用户/问题收藏夹

顺便说一句:如果您将lucene用于mongodb,那么从mongodb加载相关性会遇到问题

如果你需要真正的全文搜索,你可以试试。它也是一个很棒的nosql数据库,并且本机支持Lucene语法

编辑:

当您像这样设计网站时,请记住:

非规范化 异步请求处理 背景工作
单独收集用户偏好是更好的方法。因为收藏夹的大小在任何时候都是未知的,而且它还在不断增长

       UserFavories
                -UserID (BSON Objectid)
                - id of the user who posted
                - Name of the user who posted
                - Name of the question
                - Question id
                - url to the question
我们认为存储用户Id、问题Id足以在大多数情况下找到最喜欢的内容。但在非sql中,最好将非常相关的信息与ids一起存储,以避免连接。在本例中,您存储了发布问题的用户的id和名称以及问题的名称、id和url,因此您只需单独查询此文档即可轻松显示收藏夹,如下所示


这不是一个确切的方法,但它会给你一个想法。

谢谢-但要选择用户x的最爱,它必须扫描所有问题-或者我遗漏了什么?用户ID列表上的索引可以显著提高性能吗?@Amila这是正确的。根据我自己的stackoverflow.com使用档案,我假设问题比用户档案更常被查看。索引可能会有所帮助,但您必须进行测量才能确定。您还可以对数据进行非规范化,并存储每个问题的收藏夹和每个用户的收藏夹。您也可以使用Lucene。谢谢-您能解释一下我在mongo+Lucene中遇到的问题吗?@Amila:是的,如果Lucene将以相关顺序返回某个实体的ID,您将无法以相关顺序从mongodb加载此数据$in。但您可以根据lucene返回的id从mongodb加载数据,然后在客户端恢复相关性。这不会有问题。我正在考虑在lucene中存储显示搜索结果url、标题和用户名所需的一切。因此,我不必从db againdisclaimer那里获取它们,我对docDb真的不了解,只是对它非常感兴趣。我同意在考虑性能/易用性时,这可能是正确的方法。但是你不能通过添加一个map reduce索引来实现这一点,而不是一个全新的集合,在那里你可以手动添加内容?@Stephane,是的,你可以使用map/reduce来实现这一点,但是为什么我们需要使用map/reduce,因为我们可以用一种简单的方法来实现这一点。如果您想执行大型操作,Map/reduce会更好,但这里是一个简单的存储和检索。没有其他简单方法时,请使用Map/Reduce。。