Mongodb 注释系统rdbms与nosql

Mongodb 注释系统rdbms与nosql,mongodb,rdbms,nosql,Mongodb,Rdbms,Nosql,实现评论系统(海量数据写入)的最佳方式是什么 1) 使用一个RDBMS数据库,比如MySQL,两个表,一个用于主题,一个用于注释 优点是插入新评论是快速、高效和简单、高效的索引缺点是向外缩放(水平缩放)很难 2) 使用nosql数据库,如couchdb或mongodb,优点是向外扩展(水平扩展)很容易,支持大量数据写入,无模式缺点我认为插入新数据不如RDBMS快速有效 例如,要更新couchdb文档,您需要抓取整个文档,在本地进行更新,然后再次提交,文档大小将非常大,因此会占用带宽 我还认为co

实现评论系统(海量数据写入)的最佳方式是什么

1) 使用一个RDBMS数据库,比如MySQL,两个表,一个用于主题,一个用于注释 优点是插入新评论是快速、高效和简单、高效的索引缺点是向外缩放(水平缩放)很难

2) 使用nosql数据库,如couchdb或mongodb,优点是向外扩展(水平扩展)很容易,支持大量数据写入,无模式缺点我认为插入新数据不如RDBMS快速有效

例如,要更新couchdb文档,您需要抓取整个文档,在本地进行更新,然后再次提交,文档大小将非常大,因此会占用带宽

我还认为couchdb就地更新、Mongodb更新会很慢,并且不会像RDBMS那样高效

另外,当您想在各种主题中获得每个用户的评论时,我认为RDBMS中的搜索速度比nosql系统中的搜索速度要快

这是couchdb数据库文档的示例[每个主题的文档示例]

{"_id":"doc id",
 "_rev":"45521231465421"
 "topic_title":"the title of the topic"
 "topic_body":"the body of the topic"
 "comments":[
           {"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla1"}, {"user":"user1"}
           {"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla2"}, {"user":"user2"}
           {"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla3"}, {"user":"user3"}
           {"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla4"}, {"user":"user4"}
           {"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla5"}, {"user":"user5"}
           {"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla6"}, {"user":"user6"}
            ]
}

我只能谈论MongoDB,而您对插入的看法确实是错误的。将Mongo与MSSQL进行了很好的比较,Mongo的性能是MSSQL的100倍。因此,它非常适合大数据处理

搜索速度也快得多(如果插入和搜索速度不快,NoSQL的全部意义是什么?)-但是有一个警告,您不能在查询中执行连接,您必须在应用程序中手动连接表(但是有推荐的解决方法-)

我认为插入新数据并不像RDBMS那样快速高效

你在这里找到了一些东西。NoSQL数据库的插入速度取决于你的场景。我不能说得很清楚,所以很多人期望MongoDB的执行速度比SQL快得多,当MongoDB不适合他们时,他们感到非常失望,事实上在此之前,MongoDB用户Google组中已经充满了这样的pe奥普勒

例如更新couchdb

不仅如此,CouchDB还使用版本控制和JSON,这不如将其存储在SQL中那么有效,并且会在每条记录中消耗更多的空间

Mongodb更新会很慢,并且不会像RDBMS那样高效

架构,查询,架构,查询

这就是问题的症结所在。问你自己一个问题

我会期待每个帖子都有很多评论吗

如果是这样的话,内存中(是的,内存中)
$push
$pull
和其他子文档操作符在处理大型子文档时可能会变慢(老实说,威尔)

不仅如此,不断增长的文档可能会成为一个问题,并会导致严重的碎片化和空间使用,从而造成“瑞士奶酪”效应,大大降低了系统的运行速度(使其停滞不前)。本演示应有助于进一步了解存储的实际工作原理:

因此,您已经知道,如果使用错误,子文档可能是个坏主意。也就是说,您可以通过2个大小的分配功能部分地解决它:但是如果您得到太多的注释插入,那么它不会有太多帮助

我个人不会嵌入这种关系

因此,我将采用与RDBMS相同的设置,现在您开始看到问题所在。如果没有MongoDBs fsync队列,插入的速度可能与SQL相同,而SQL直接写入磁盘。您可以使用日志写入来设置MongoDB,但在测试结束时,您可能会从SQL获得相同的性能指标一天

至于查询,如果您的工作集适合RAM的话,MongoDB仍然可以在这里占据领先地位

与SQL不同,MongoDB将所有内容(您的整个数据)映射到虚拟内存,而不是RAM,而且绝对不会与RAM混淆。这确实使较大的查找速度更快,而较小的查找速度将大致相同,因为两者都将从内存缓存中提供服务

另外,当您想在各种主题中获得每个用户的评论时,我认为RDBMS中的搜索速度比nosql系统中的搜索速度要快

如果主题id在注释文档中,那么在MongoDB中肯定会更快,前提是您的工作集已在RAM中就绪

工作集是什么意思?下面是一个很好的答案:


希望这能有所帮助,

为什么您认为CouchDB或MongoDB在插入数据时速度较慢?您是否用自己的基准测试验证了这一点,或者您只是在倾听自己的直觉?要向CouchDB文档添加注释,您需要抓取整个文档,在本地进行更新,然后再次提交,文档的大小将非常大,因此它将与nsume带宽。所以它会“更慢”为什么要将您的评论嵌入到博客文章中?您是否希望在显示博客文章时,您也需要显示其所有评论?为什么您认为RDBMs中的搜索速度会比MongoDB更快?它们都使用索引,都将结构索引作为B树。您为什么不针对您正在使用的数据对测试进行基准测试想要使用?我会非常担心依赖这样的图表,然后说MongoDB更快是“事实”,也就是说,他只在那里使用嵌入模式,嵌入并不总是一个好主意,事实上应该仔细考虑……我不是说嵌入总是一个好主意,而是在某些方面(可能是大多数?)如果不能,您仍然可以手动加入,尽管这很痛苦(但这是拥有NoSQL DB的代价).但是OP询问了评论系统,所以在这种情况下嵌入对我来说似乎很好。这取决于查询和评论,但是的,假设嵌入是可以的。嗯,有人否决了我的答案,我想知道他们是否有解释??