NoSQL数据库设计 - 带标记的文档

时间:2012-10-19 10:05:36

标签: mongodb database-design web-applications nosql

您推荐哪个NoSQL数据库以及架构如何查找以下Web应用程序要求。

  1. 可以有很多用户(500k +)

  2. 每位用户都可以输入他/她的文件

  3. 每个用户每月可能会创建10-200个文档

  4. 每个文件都很小(约100字)

  5. 用户可以使用自己的标签标记文档

  6. 来自不同用户的数据不会与其他用户及其数据互动

  7. 用户可以按标签搜索他的参赛作品

  8. 快速访问来自一个用户的所有条目

  9. 用户可以创建复杂的动态查询来查询他/她的数据

  10. 我的想法是使用MongoDB。但我看到的问题是只有两个集合:用户条目

    通过一个巨大的集合中的标签搜索对我来说是一个坏主意。我担心索引的大小会非常大,因为每个用户都可以拥有自己的标签。 MongoDB将为整个集合创建标记索引,但我将始终仅通过一个用户的条目而不是所有用户的条目进行搜索。

    因此,每个用户想法的集合似乎更合适,但似乎对可以创建的集合数量有限制,这种方法似乎也是不受欢迎的。

    CouchDB不支持动态查询,...

    我应该如何在MongoDB中实现它?或者命名一个更合适的NoSQL数据库。

    类似应用的例子:rememberthemilk,Trello,......

1 个答案:

答案 0 :(得分:2)

  

您推荐哪个NoSQL数据库以及架构如何查找以下Web应用程序要求。

我不会像你要求的那样为你定义你的申请,因为我们不在这里,但是我会回答你在这里说的一些问题和疑问。

  

我担心索引的大小会非常大,因为每个用户都可以拥有自己的标签

除非您限制用户可以应用的标记数量,否则索引大小可能会很大。大多数网站最多限制标签10次,有时候(例如这里的问题)5。

您可能希望将整个集合分片为整个群集中的较小部分。通过正确定义的分片索引查询这些标记绝不是慢或坏。

即使标签索引不是您的分片索引,它仍然会执行非常快速的全局分散和收集操作(大型集合中查询使用的一个很好的例子是:http://docs.mongodb.org/manual/core/sharding/)。

分片还可以帮助在许多商用计算机上分配庞大的索引,从而降低成本,同时保持数据流量。

所以你想要研究的第一件事是分片以及它如何帮助你,这方面的一个好地方就在这里:http://docs.mongodb.org/manual/core/sharding/

  

因此,每个用户想法的集合似乎更合适,但似乎对可以创建的集合数量有限制,这种方法似乎也是不受欢迎的。

你也有锁定的问题,因为锁不是集合级别,不像SQL它实际上是DB级别(并且不要忘记命名空间限制,这取决于你现在“大量”索引的大小)。许多人陷入陷阱,我现在要说,99%的情况下正常设置是好的,除非你可能是Facebook,但即便如此,我认为它可能没问题。

  

类似应用的例子:rememberthemilk,Trello,......

我实际上只是有人问过类似的风格问题:How does Trello store data in MongoDB? (Collection per board?)如果你看一下评论,那里也可能会有一些帮助。