您推荐哪个NoSQL数据库以及架构如何查找以下Web应用程序要求。
可以有很多用户(500k +)
每位用户都可以输入他/她的文件
每个用户每月可能会创建10-200个文档
每个文件都很小(约100字)
用户可以使用自己的标签标记文档
来自不同用户的数据不会与其他用户及其数据互动
用户可以按标签搜索他的参赛作品
快速访问来自一个用户的所有条目
用户可以创建复杂的动态查询来查询他/她的数据
我的想法是使用MongoDB。但我看到的问题是只有两个集合:用户和条目。
通过一个巨大的集合中的标签搜索对我来说是一个坏主意。我担心索引的大小会非常大,因为每个用户都可以拥有自己的标签。 MongoDB将为整个集合创建标记索引,但我将始终仅通过一个用户的条目而不是所有用户的条目进行搜索。
因此,每个用户想法的集合似乎更合适,但似乎对可以创建的集合数量有限制,这种方法似乎也是不受欢迎的。
CouchDB不支持动态查询,...
我应该如何在MongoDB中实现它?或者命名一个更合适的NoSQL数据库。
类似应用的例子:rememberthemilk,Trello,......
答案 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?)如果你看一下评论,那里也可能会有一些帮助。