当前位置:  开发笔记 > 编程语言 > 正文

关于使用mongodb的一般问题

如何解决《关于使用mongodb的一般问题》经验,为你挑选了1个好方法。

我正在考虑尝试使用MongoDB来存储我们的统计数据,但是在我真正开始学习它之前,我有一些关于我是否正确理解它的一般性问题.

我理解使用文档的概念,我不太清楚的是每个文档中可以存储多少数据.下图说明了我正在考虑的布局:

Website (document)
 - some keys/values about the particular document
 - statistics (tree)
   - millions of rows where each record is inserted from a pageview (key/value array containing data such as timestamp, ip, browser, etc)

让我对mongodb感到兴奋的是分组功能,例如:http: //www.mongodb.org/display/DOCS/Aggregation

db.test.group(
{ cond: {"invoked_at.d": {$gte: "2009-11", $lt: "2009-12"}}
, key: {http_action: true}
, initial: {count: 0, total_time:0}
, reduce: function(doc, out){ out.count++; out.total_time+=doc.response_time }
, finalize: function(out){ out.avg_time = out.total_time / out.count }
} );

但我主要担心的是,例如,如果在机架空间的512-1gb ram服务器上有数百万个文档中有数百万条记录,那么该命令在服务器上会有多难?它还能承受低负荷吗?

MongoDB可以拥有的文件数量是否有限制(单独的数据库)?另外,我上面解释的树中的记录数是否有限制?此外,我上面显示的查询是立即运行还是某种map/reduce查询?我不确定我是否可以在控制面板中执行页面加载时立即获取这些统计信息.

谢谢!



1> halfdan..:

每个文档的大小限制为4MB(在文本中为A LOT).

建议在复制模式下运行MongoDB或使用分片,否则会出现单服务器持久性问题.没有给出单服务器的持久性,因为MongoDB每隔60秒只对磁盘进行一次fsync,所以如果你的服务器在两个fsync之间发生故障,那么在那个时间插入/更新的数据将会丢失.

mongodb中的磁盘空间以外的文档没有限制.

您应该尝试将与数据匹配的数据集(或生成一些测试数据)导入MongoDB,并分析查询执行的速度.请记住在查询中大量使用的字段上设置索引.即使有大量数据,您的上述查询也应该可以正常工作.

为了分析查询的速度,请使用MongoDB附带的数据库分析器.在mongo shell上:

db.setProfilingLevel(2); // to set the profiling level
[your query]
db.system.profile.find(); // to see the results

记得在完成后关闭分析(否则日志将变得非常大).

关于你的数据库布局我建议将"架构"(是的,架构更少..)更改为:

网站(集合): - 关于特定文档的一些键/值

统计信息(集合) - 从页面视图(包含时间戳,IP,浏览器等数据的键/值数组)插入每条记录的数百万行+ DBRef到网站

请参见数据库参考

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有