Cam*_*e R 5 monitoring tomcat mongodb gridfs
我目前正在使用mongoDB使用副本集和GridFS处理一个"简单"的照片系统.
原理很简单,我使用GridFS放了很多照片,客户端知道文件名,从文件名中我可以检索文件.
GridFS是否使用filename作为索引?希望是的,我无法在任何官方文档中找到它.
我的统计数据是:
{
"ns" : "photos.socialphotos.files",
"count" : 758086,
"size" : 168295128,
"avgObjSize" : 222.00004748801587,
"storageSize" : 220647424,
"numExtents" : 15,
"nindexes" : 2,
"lastExtentSize" : 43311104,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 125084624,
"indexSizes" : {
"_id_" : 22925504,
"filename_1_uploadDate_1" : 102159120
},
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
编辑:通过reIndex()收藏,我赢了30 Go,但它仍然太高了..
我的索引是:
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "photos.socialphotos.files",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"filename" : 1,
"uploadDate" : 1
},
"ns" : "photos.socialphotos.files",
"name" : "filename_1_uploadDate_1"
}
Run Code Online (Sandbox Code Playgroud)
索引大小:
"keysPerIndex" : {
"photos.socialphotos.files.$_id_" : 758086,
"photos.socialphotos.files.$filename_1_uploadDate_1" : 758086
}
Run Code Online (Sandbox Code Playgroud)
我从不使用,_id_
因为我不存储它,是否可以删除它?索引大小是125084624,这意味着我几乎所有的照片都在RAM中,这有点奇怪?
其他问题:
统计:mongostats是基础知识,还有另一个很好的监控工具,还是我必须创建自己的工具?
错误:当我进行大量插入时,我可以看到很多(大约每秒100秒),控制台上什么都没有...我应该在哪里调查?
使用JAVA/Tomcat的Connecion Pool:我使用一个简单的Tomcat webapp连接到MongoDB,你会建议为每个请求打开一个新的mongoDB连接(我猜不是)或者在Mongo对象上保持一个单例的引用(以持有人为例)或使用一个好的游泳池,但我找不到标准的游泳池?
非常感谢你 !
解决您的问题:
1) 当您使用 Java 驱动程序初始化 GridFS 集合时,该驱动程序将自动在 .files 和 .chunks 集合上创建索引。
2) MongoDB 要求您有一个“_id”字段和一个唯一的“_id”索引。默认的“_id”只有 12 个字节长——拥有它实际上并没有显着的开销。
参考: http: //www.mongodb.org/display/DOCS/Object+IDs
3) “filename_1_uploadDate_1”索引上的统计信息仅指示索引的大小。该索引仅包含文件名和上传数据字段的内容 - 它不包含任何照片数据本身。出于性能原因,您希望将索引的活动部分放入 RAM 中。
参考:
4) 如果您想进行高级统计和监控,请将您的系统注册到10gen提供的免费MMS监控系统中。欲了解更多信息,请从这里开始: https: //mms.10gen.com/help/
5) 加载新数据时出现页面错误是正常现象。MongoDB 使用内存映射文件,因此每次写入数据文件中的新位置时,操作系统都需要在该页面中出错。
有关内存映射文件的更多信息,请查看此处:http ://docs.mongodb.org/manual/faq/storage/
6) MongoDB Java驱动程序提供了自己的连接池。除非您正在开发真正高性能的应用程序,否则您最好使用 Mongo 对象作为单例。
归档时间: |
|
查看次数: |
3060 次 |
最近记录: |