Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于相对较小的文件,MongoDB GridFS文件大小较大_Mongodb_Storage_Gridfs_Filesize - Fatal编程技术网

对于相对较小的文件,MongoDB GridFS文件大小较大

对于相对较小的文件,MongoDB GridFS文件大小较大,mongodb,storage,gridfs,filesize,Mongodb,Storage,Gridfs,Filesize,我正在做一些测试,看看我们是否可以在MongoDB上使用GridFS来存储未来应用程序的文件;我使用10gen的C#驱动程序将80Mb的文件“上传”到数据库中 第一次添加很好,大约用了3秒钟,在我的测试机上还不错;然而,将来添加同一个文件需要更长的时间,最终MongoDB告诉我它的内存不足并崩溃了,时间长达30秒 添加10个文件(大小为80Mb)会导致在系统崩溃之前为我的数据库创建8个名为dbaseName.0到dbaseName.7的文件,这些文件的大小从文件0到5呈指数级增长,从16Mb增加

我正在做一些测试,看看我们是否可以在MongoDB上使用GridFS来存储未来应用程序的文件;我使用10gen的C#驱动程序将80Mb的文件“上传”到数据库中

第一次添加很好,大约用了3秒钟,在我的测试机上还不错;然而,将来添加同一个文件需要更长的时间,最终MongoDB告诉我它的内存不足并崩溃了,时间长达30秒

添加10个文件(大小为80Mb)会导致在系统崩溃之前为我的数据库创建8个名为dbaseName.0到dbaseName.7的文件,这些文件的大小从文件0到5呈指数级增长,从16Mb增加到512Mb,然后文件6和7都是512Mb

这些文件的大小略低于2Gb,显然,第十次添加该文件需要dbase超过2Gb,这超出了我的32位测试版本的限制

为什么存储800Mb的文件需要超过2Gb?有没有我错过的场景

MongoDB是否经常将整个GridFS保存在RAM中?如果是这样,磁盘的意义是什么?如果我的生产服务器上只有32Gb的RAM,我只能在GridFS中存储32Gb吗

我在我的MongoGridFS对象上使用了EnsureIndex,并检查了datbase,它显示索引是为GridFS创建的,所以Mongo肯定不应该尝试将整个数据存储装入RAM

MongoDB满足我们的所有需求,但我们需要它能够容纳大量的文件集合;我错过了什么明显的东西吗

堆栈跟踪:

Mon Oct 15 11:57:15 [conn15] insert busyNow.fs.chunks keyUpdates:0 locks(micros) w:112892 113ms
Mon Oct 15 11:57:15 [conn15] MapViewOfFileEx for /data/db/busyNow.7 failed with errno:8 Not enough storage is available to process this command. (file size is 536608768) in MemoryMappedFile::map

Mon Oct 15 11:57:15 [conn15]  busyNow.fs.chunks Fatal Assertion 16166
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\util\assert_util.cpp(124)                               mongo::fassertFailed+0x75
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\util\mmap_win.cpp(211)                                  mongo::MemoryMappedFile::map+0x4ce
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\mongommf.cpp(182)                                    mongo::MongoMMF::create+0xa3
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\pdfile.cpp(469)                                      mongo::MongoDataFile::open+0x141
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\database.cpp(280)                                    mongo::Database::getFile+0x34f
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\database.cpp(332)                                    mongo::Database::suitableFile+0x129
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\database.cpp(359)                                    mongo::Database::allocExtent+0x41
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\pdfile.cpp(1271)                                     mongo::outOfSpace+0x107
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\pdfile.cpp(1293)                                     mongo::allocateSpaceForANewRecord+0x5d
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\pdfile.cpp(1463)                                     mongo::DataFileMgr::insert+0x493
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\pdfile.cpp(1217)                                     mongo::DataFileMgr::insertWithObjMod+0x33
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\instance.cpp(761)                                    mongo::checkAndInsert+0x72
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\instance.cpp(821)                                    mongo::receivedInsert+0x4cd
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\instance.cpp(434)                                    mongo::assembleResponse+0x62a
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\db\db.cpp(192)                                          mongo::MyMessageHandler::process+0xe8
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\mongo\util\net\message_server_port.cpp(86)                    mongo::pms::threadRun+0x424
Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\third_party\boost\boost\thread\detail\thread.hpp(62)          boost::detail::thread_data<boost::_bi::bind_t<void,void (__cdecl*)(mongo::MessagingPort *),boost::_bi::list1<boost::_bi::value<mongo::MessagingPort *
> > > >::run+0x9Mon Oct 15 11:57:17 [conn15] mongod.exe  ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(16707566)  boost::`anonymous namespace'::thread_start_function+0x47
Mon Oct 15 11:57:17 [conn15] mongod.exe  f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c(314)                _callthreadstartex+0x1b
Mon Oct 15 11:57:17 [conn15] mongod.exe  f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c(292)                _threadstartex+0x64
Mon Oct 15 11:57:17 [conn15]

***aborting after fassert() failure


Mon Oct 15 11:58:33 [initandlisten] connection accepted from 127.0.0.1:56308 #16 (3 connections now open)
Mon-Oct 15 11:57:15[conn15]插入busyNow.fs.chunks密钥更新:0锁(微秒)w:112892 113ms
Mon-Oct 15 11:57:15[conn15]mapViewOffilex for/data/db/busyNow.7失败,错误号:8没有足够的存储空间来处理此命令。(文件大小为536608768)在MemoryMappedFile::map中
Mon-Oct 15 11:57:15[conn15]busyNow.fs.chunks致命断言16166
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\util\assert\u util.cpp(124)mongo::fassertFailed+0x75
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\util\mmap_win.cpp(211)mongo::MemoryMappedFile::map+0x4ce
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\mongomf.cpp(182)mongo::mongomf::create+0xa3
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\pdfile.cpp(469)mongo::MongoDataFile::open+0x141
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\database.cpp(280)mongo::database::getFile+0x34f
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\database.cpp(332)mongo::database::suitableFile+0x129
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\database.cpp(359)mongo::database::allocExtent+0x41
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\pdfile.cpp(1271)mongo::outOfSpace+0x107
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\pdfile.cpp(1293)mongo::allocateSpaceForANewRecord+0x5d
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\pdfile.cpp(1463)mongo::DataFileMgr::insert+0x493
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\pdfile.cpp(1217)mongo::DataFileMgr::insertWithObjMod+0x33
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\instance.cpp(761)mongo::checkAndInsert+0x72
10月15日星期一11:57:17[conn15]mongod.exe…\src\mongo\db\instance.cpp(821)mongo::receivedInsert+0x4cd
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\instance.cpp(434)mongo::AssemblerResponse+0x62a
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\db\db.cpp(192)mongo::MyMessageHandler::process+0xe8
Mon-Oct 15 11:57:17[conn15]mongod.exe…\src\mongo\util\net\message\u server\u port.cpp(86)mongo::pms::threadRun+0x424
周一至十月十五日11:57:17[conn15]mongod.exe…\src\third\u party\boost\thread\detail\thread.hpp(62)boost::detail::thread\u data::run+0x9周一至十月十五日11:57:17[conn15]mongod.exe…\src\third\u party\boost\libs\thread\src\win32\thread.cpp(16707566)boost::`anonymous namespace'::thread\u start\u函数+0x47
10月15日星期一11:57:17[conn15]mongod.exe f:\dd\vctools\crt\u bld\self\u x86\crt\src\threadex.c(314)\u callthreadstartex+0x1b
10月15日星期一11:57:17[conn15]mongod.exe f:\dd\vctools\crt\u bld\self\u x86\crt\src\threadex.c(292)\u threadstartex+0x64
10月15日星期一11:57:17[康涅狄格州15]
***fassert()失败后中止
10月15日星期一11:58:33[initandlisten]连接已从127.0.0.1:56308#16接受(3个连接现已打开)

GridFS不会将所有文件仅存储在RAM中


您是否有stacktrace,或者是否可以再次复制崩溃?

确定;经过多次搜索,MongoDB似乎在指数大小的文件中预先分配了空间,最大可达2Gb,之后每个文件将为2G

我的测试程序在后台文件(.0-.7等)中添加80Mb的文件,当数据块开始写入最后一个文件时,Mongo会预先分配另一个比最后一个文件大指数的文件

因此,第一个80Mb的文件,填充了16Mb的文件、32Mb的文件和64Mb的背景文件,由于元数据占用了更多的空间,必须稍微占用128Mb的文件,这会触发mongo预先分配一个256Mb的文件,总计496Mb;随着越来越多的文件被添加,越来越多的文件被预先分配,当我的测试机器上出现2Gb时,Mongo无法访问空间并崩溃

因此,尽管一个80Mb的文件似乎占用了比它应该占用的更多的空间,但它在某种程度上是有意义的

这可以通过以下方式关闭: