评论系统rdbms vs nosql

时间:2013-05-09 20:14:56

标签: mongodb rdbms nosql

实施评论系统(大量数据写作)的最佳方法是什么?

1)使用RDBMS数据库(如MySQL),2个表用于主题,1个用于注释 优点是新评论的插入快速,高效且简单,高效的索引。 缺点是缩小(水平缩放)很难。

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"}
            ]
}

2 个答案:

答案 0 :(得分:5)

  

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

你在那里打了一些东西。 NoSQL数据库的插入速度依赖于您的场景。我不能说得那么清楚,所以很多人都希望MongoDB能够比SQL更快地执行,并且当它不适合他们时非常失望,事实上在此之前,mongodb用户Google团队已经被这些人填满了。

  

例如更新couchdb

不仅如此,CouchDB还使用版本控制和JSON,效率不如将其存储在SQL中,并且每条记录会占用更多空间。

  

Mongodb更新速度慢,效率不高,如RDBMS

架构,查询,架构,查询......

这就是它的归宿。问自己一个问题。

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

如果是这样,内存中(是的,内存中的)$push$pull和其他子文档操作符可能在一个大的子文档上变慢(让我们说实话,将会)。

不仅如此,持续增长的文档可能会成为问题,并且可能导致严重的碎片和空间使用,从而产生“瑞士奶酪”效应,从而大大减慢系统速度(使其停止运转)。此演示文稿应有助于了解有关存储真正有效的更多信息:http://www.10gen.com/presentations/storage-engine-internals

所以你已经知道,如果使用错误,子文档可能是一个坏主意。话虽如此,你可以用2个大小的分配功能对其进行部分补救:http://docs.mongodb.org/manual/reference/command/collMod/#usePowerOf2Sizes但是如果你得到太多的评论插入,那么它将无济于事。

我个人不会嵌入这种关系。

所以我会选择与RDBMS相同的设置,现在你开始看到问题了。如果不是MongoDBs fsync队列,插入可能会大致相同的速度,不像SQL直接写入磁盘。您可以使用日志编写来设置MongoDB,但随后您可能会在一天结束时从SQL获得相同的性能指标。

至于查询,这是MongoDB仍然可以出现的最佳位置,提供您的工作集适合RAM 。我不能大胆地说最后一点!!

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

  

此外,当您想要在各种主题中获取每个用户的注释时,我认为在RDBMS中搜索的速度比在nosql系统中更快。

如果主题id在评论文档中,那么在MongoDB中肯定会更快,只要你的工作集在RAM中准备就绪。

工作集是什么意思?这是一个很好的答案:What does it mean to fit "working set" into RAM for MongoDB?

希望这有帮助,

答案 1 :(得分:2)

我只能谈论MongoDB,你确实错误的插入。 Here很好地比较了Mongo和MSSQL,而Mongo的表现比MSSQL好100倍。所以它非常适合大数据处理。

搜索也快得多(如果插入和搜索不会更快,那么NoSQL的重点是什么?) - 但有一点需要注意,你不能在查询中执行连接,你必须手动连接表在您的应用程序中(但有推荐的解决方法 - nested documents)