是适合于像stackoverflow网站的mongodb?mongodb是否适合像stackoverflow这样的网站?
回答
简单地说:是的,它可能是。
让我们打破各个页面/特性,看看他们如何被存储/ MongoDB中再现。
本页面的全部信息可以存储在一个文档中收集questions
下。这可能包括每个答案的“子文档”以保持快速检索该页面。
编辑:为@beagleguy指出的那样,你可以打4MB的文件大小限制很快这种方式,所以这将是更好地保存在单独的文件答案,并通过存储在的ObjectID它们链接到的问题数组。
该votes
可以存储在一个单独的集合,与问题的简单链接和投票的user
。一个db.eval()
呼叫可以执行递增/递减当增加一票(虽然它块,这样会不会很高性能的)投票的文档中直接计数,或MapReduce呼叫可以定期做不偏移的工作。对于favourites
,它可以以相同的方式工作。
类似“查看”数字,记录用户访问时间等事情通常会使用modifier operation至increment计数器处理。自v1.3以来,有一个新的“查找和修改”命令,可以在检索文档时发出更新命令,为您节省额外的电话费。
任何类型的统计数据(如信誉,徽章,唯一的标记)的可利用MapReduce收集并推到特定的集合。诸如通知之类的东西可以推送到充当工作队列的另一个集合,其中一些工作人员在队列中侦听新项目(认为徽章通知,自用户上次访问时间之后的新答案等)。
问题页面和它的过滤器都可以用capped-collections来处理,而不是立即查询那些数据。 YMMV。
最终,YMMV。与所有工具一样,它们都有优势和成本。有一些SO功能在RDBMS中需要很多工作,但在Mongo中可以很简单地处理,反之亦然。
我认为Mongo在RDBMS上的主要优势是无模式方法和复制。在“实时”基于RDMBS的应用程序中定期更改架构可能会很痛苦,如果大量使用大量数据,甚至是不可能的 - 这些类型的操作可能会锁定表太久。在Mongo中,添加新字段很简单,因为您可能不需要将它们添加到每个文档中。如果您执行相对较快的操作来运行map/reduce来更新文档。
至于复制,Mongo的优点是数据库不需要暂停为从服务器创建快照。如果没有这种方法,许多RDBMS都无法建立复制,在大型数据库上,可以使主机停止运行(我在看着你,MySQL!)。这对于StackOverflow类型的网站来说是一种福音,在这种网站中,您需要随着时间的推移进行扩展 - 每次需要添加节点时都不要让主服务器停机。
这是一个很好的。谢谢。 – unpangloss 2010-03-07 06:40:41
如果你在其中嵌入了答案,你会不会在相当大的线程上达到4MB限制? – James 2010-05-18 19:57:27
@beagleguy:可能,是的。再次,都取决于你正在存储的内容。将Answer文档的ObjectIDs存储在问题文档的数组中可能会更好。 – 2010-05-19 08:04:15
我会说不,这不是一个非常适合,更复杂的对象得到更多的对象/文件数据库是有道理的。但是如果你看一下SO,大部分都不是复杂的对象关系。
有一个问题表,不过与很多属性,那么答案的集合......但所有这些需要单独进行访问,这取决于您的视图,例如从未来您的活动屏幕或问题/答案屏幕。由于您以很多角度访问它,并且每个部分都比较简单,因此关系模型效果更好。
在后台运行徽章等问题时,您需要快速检查您是否正在为投票选择信誉上限......鉴于对象的复杂性,很多关系查询在RDBMS中更简单模型。
当然,这是我的观点,也许是这样的结构比它似乎是
还是更简单?问题和答案在同一个表格中。 – 2010-03-06 09:10:47
我不认为对于ODB来说,对象关系必须更加复杂。我发现最重要的好处往往是数据库中的模式几乎不存在,因此可以更容易地进行修改,这对于Web开发来说是一大优势。 – 2010-03-11 20:07:32
对我来说,MongoDB是真正伟大的所有网站,并不需要交易的方式更加复杂。
使用适用于应用程序OLTP端的RDBMS和适当的缓存 - 它应该能够正常工作。
事实上 - 有一个使用RoR的&的MongoDB的open source stackoverflow clone。 :)
我觉得是。
您可以将问题本身,答案和对问题+回答的评论作为一个mongo文档存储。最大文档大小是4 MB,所以对于mongo,没有任何文档在stackoverflow上会太大。我已经用bittorrent下载了stackoverflow(数据转储)的内容,并且我已经能够将这些内容导入到mongo中。
将这些数据导入mongo并不重要,因为stackoverflow的转储包含多个xml文件,每个xml文件都与一个关系表匹配,所以必须将这些数据重新组合为文档格式。
我还在本文档中添加了OP + answerers +评论者的显示名称+声誉。这确实意味着,如果用户更改他/她的显示名称,则必须用他/她的用户ID更新所有文档。如果您将数据非规范化,则需付出代价。如果用户的信誉发生变化,则相同。
这个想法是,你在页面上看到的所有数据都包含在一个mongo文档中。你有一个查询和没有连接的所有必要的信息。
在这里,您可以下载计算器的数据转储:http://blog.stackoverflow.com/category/cc-wiki-dump/
+1有关转储信息以及如何将其“移植”到mongo – 2010-10-12 16:19:17
我认为这将是一个不错的选择。在类似于StackOverflow的网站上使用像MongoDB这样的Nonrel数据库有很多原因。考虑RDBM如何将数据存储到磁盘,并在规划布局时考虑文件系统块大小和类似的磁盘属性。我喜欢利用跨越多个文件系统块的文档,并将很多相关信息存储在自己的内部。我发现存储空间较少分散,并且可以编写一个包含大量信息的块,其中将使用其他解决方案写入多个块。
- 1. 像Stackoverflow这样的网站如何跟踪帖子的视图?
- 2. 像stackoverflow这样的网站如何工作?
- 3. CQRS可以用于像StackOverflow这样的网站吗?
- 4. SQLite是否适合网站使用
- 5. 是否有像这样的python.mirocommunity.org(python)的Ruby网站?
- 6. 是否可以用wordpress开发像delivery.com这样的网站?
- 7. 像askmeflash.com这样的建筑网站
- 8. JavaScript中的Yes/No框像这样在StackOverflow中这样吗?
- 9. 这个样本是否适合使用try catch?什么是sugesstions?
- 10. 像Redis这样的关键/值数据存储是否适合授权数据?
- 11. 像这样使用CSS来对齐网站是否是一个好主意?
- 12. 在像StackOverflow这样的网站中,问题及其投票应该是单独的表格吗?
- 13. APC是否适合高度动态的PHP网站?
- 14. 是否适合用于费用跟踪网站的CMS?
- 15. 像卡布奇诺这样的桌面风格的网络应用框架适合社交网站吗?
- 16. InfoPath是否适合这一目的?
- 17. 图像显示网站是否更适合程序或OO编程?
- 18. 这样的网站开发设置/实践适合于工作场所吗?
- 19. SQLite是否适合在生产网站中使用?
- 20. RRDtool是否适合监控网站用户操作?
- 21. 像Hubspot这样的网站如何跟踪入站链接?
- 22. launchUriAsync是否适用于.edu网站?
- 23. ModelMapper库是否支持像ArrayList或HashSet这样的集合?
- 24. 是否有像这样的jQuery工具?
- 25. 网站不适合移动
- 26. 这个dtd是否适合xml文件?
- 27. 这是否适合使用AngularJS服务?
- 28. 试图找到像mongodb这样的值
- 29. 在Emacs中,我如何添加一个像“Stackoverflow”这样的网站到我的webjump热门列表?
- 30. Oracle Coherence能否支持像MongoDb这样的复杂查询?
SO克隆Shapado http://gitorious.org/shapado使用mongodb。这是否是一个合适的选择是另一回事。只是fyi。 – Xiaofu 2010-03-06 05:53:44
感谢您的信息 – unpangloss 2010-03-07 06:39:32
@Xiaofu该死的......你快。刚刚发布这个信息给我的答案。 -_- – 2010-03-26 08:27:42