实施评论系统(大量数据写作)的最佳方式是什么?
1)使用一个RDBMS数据库,如MySQL,2个表一个用于主题,一个用于评论 优点是新注释的插入是快速,有效和简单,高效的索引.缺点 是缩小(水平缩放)很难.
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"} ] }
Sammaye.. 5
我认为插入新数据并不像RDBMS那样快速有效
你在那里打了一些东西.NoSQL数据库的插入速度取决于您的场景.我不能说得那么清楚,所以很多人都希望MongoDB能够比SQL更快地执行,并且当它不适合它们时非常失望,事实上在此之前,mongodb用户谷歌组已经被这些人所填充.
例如,更新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中就绪.
工作集是什么意思?这是一个很好的答案:将"工作集"安装到MongoDB的RAM中意味着什么?
希望这可以帮助,
我认为插入新数据并不像RDBMS那样快速有效
你在那里打了一些东西.NoSQL数据库的插入速度取决于您的场景.我不能说得那么清楚,所以很多人都希望MongoDB能够比SQL更快地执行,并且当它不适合它们时非常失望,事实上在此之前,mongodb用户谷歌组已经被这些人所填充.
例如,更新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中就绪.
工作集是什么意思?这是一个很好的答案:将"工作集"安装到MongoDB的RAM中意味着什么?
希望这可以帮助,