MongoDB で GridFS を使用して、将来のアプリケーション用にファイルを保存できるかどうかを確認するために、いくつかのテストを行っています。10gen の C# ドライバーを使用して、80Mb ファイルをデータベースに「アップロード」しています。
最初の追加は問題なく、約 3 秒かかりましたが、私のテスト マシンではそれほど悪くはありません。ただし、同じファイルを後で追加すると、さらに時間がかかり、最大 30 秒かかりました。最終的に MongoDB は、メモリが不足してクラッシュしたことを通知しました。
サイズが 80Mb の 10 個のファイルを追加すると、システムがクラッシュする前に dbaseName.0 から dbaseName.7 という名前のデータベース用に 8 つのファイルが作成され、ファイル サイズはファイル 0 から 5 まで 16Mb から 512Mb に指数関数的に増加し、ファイル 6 と 7 は両方とも512メガバイト。
これらのファイルは 2Gb 弱になります。明らかに、ファイルを 10 回追加すると、dbase が 2Gb を超えます。これは、私の 32 ビット テスト バージョンの制限を超えています。
800Mb 相当のファイルを保存すると 2Gb を超えるのはなぜですか? どこかに見逃した設定はありますか?
MongoDB は GridFS 全体を常に RAM に保持しますか? もしそうなら、ディスクのポイントは何ですか?実稼働サーバーに 32Gb の RAM しかない場合、GridFS に 32Gb のみを保存できますか?
私はMongoGridFSオブジェクトでEnsureIndexesを使用し、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)