編輯: 有看這裏向Mongo的「本地」數據庫寫入數據時是否還有其他注意事項?
寫作爲「本地」的幾個點是一個合法的技術 - 從「MongoDB的權威指南,第二版」和http://www.kchodorow.com/blog/2010/10/27/bending-the-oplog-to-your-will/
這數據庫將永遠不會被複制,並且可以用來存儲任何 收藏,應該是當地的一臺服務器
寫入「本地」是不是一個好主意 - 從https://jira.mongodb.org/browse/SERVER-11670和https://groups.google.com/forum/#!topic/mongodb-user/E_aPgNR1zss
這是不正常寫任何東西到本地數據庫 - 它是 MongoDB的用途和使用它的用戶集合(避免複製 他們)不保證爲不引起問題
它可能是也可能不是一個好主意 - 在http://docs.mongodb.org/manual/reference/local-database/文件是不可知
原帖:
寫上我的蒙戈2.4.9安裝(Windows和Linux版本)數據到「本地」 DB的100MB時,我遇到錯誤。
這個bug(https://jira.mongodb.org/browse/SERVER-11670)與我的問題看起來很相似,但我不敢相信隨機寫入數據庫是一個小問題,並且它將被推遲到2.7。所以它必須是我。
總之,Windows的錯誤是這樣的:
Fri Jan 24 15:59:11.551 [conn40] mongod.exe ...\src\mongo\util\stacktrace.cpp(167) mongo::printStackTrace+0x3e
Fri Jan 24 15:59:11.551 [conn40] mongod.exe ...\src\mongo\db\dur.cpp(277) mongo::dur::DurableImpl::_aCommitIsNeeded+0xe8
Fri Jan 24 15:59:11.551 [conn40] mongod.exe ...\src\mongo\db\instance.cpp(812) mongo::insertMulti+0x212
Fri Jan 24 15:59:11.551 [conn40] mongod.exe ...\src\mongo\db\instance.cpp(875) mongo::receivedInsert+0xaff
Fri Jan 24 15:59:11.552 [conn40] mongod.exe ...\src\mongo\db\instance.cpp(441) mongo::assembleResponse+0x57a
Fri Jan 24 15:59:11.552 [conn40] mongod.exe ...\src\mongo\db\db.cpp(194) mongo::MyMessageHandler::process+0xfa
Fri Jan 24 15:59:11.552 [conn40] mongod.exe ...\src\mongo\util\net\message_server_port.cpp(207) mongo::PortMessageServer::handleIncomingMsg+0x578
Fri Jan 24 15:59:11.552 [conn40] mongod.exe ...\src\third_party\boost\libs\thread\src\win32\thread.cpp(180) boost::`anonymous namespace'::thread_start_function+0x21
Fri Jan 24 15:59:11.552 [conn40] mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(314) _callthreadstartex+0x17
Fri Jan 24 15:59:11.552 [conn40] mongod.exe f:\dd\vctools\crt_bld\self_64_amd64\crt\src\threadex.c(292) _threadstartex+0x7f
Fri Jan 24 15:59:11.553 [conn40] kernel32.dll BaseThreadInitThunk+0xd
Fri Jan 24 15:59:11.553 [conn40] ERROR: can't commitNow from commitIfNeeded, as we are in local db lock
以及Linux的錯誤是這樣的:
Sat Jan 25 00:20:04.558 [conn19] ERROR: can't commitNow from commitIfNeeded, as we are in local db lock
0xde46e1 0x921a65 0x921b4c 0x9f8b15 0x9f9412 0x9ffd68 0x6e8518 0xdd0cae 0x7f0cd72d8ddb 0x7f0cd667ca1d
/usr/bin/mongod(_ZN5mongo15printStackTraceERSo+0x21) [0xde46e1]
/usr/bin/mongod(_ZN5mongo3dur11DurableImpl16_aCommitIsNeededEv+0x155) [0x921a65]
/usr/bin/mongod(_ZN5mongo3dur11DurableImpl14commitIfNeededEb+0x4c) [0x921b4c]
/usr/bin/mongod(_ZN5mongo11insertMultiEbPKcRSt6vectorINS_7BSONObjESaIS3_EERNS_5CurOpE+0x45) [0x9f8b15]
/usr/bin/mongod(_ZN5mongo14receivedInsertERNS_7MessageERNS_5CurOpE+0x862) [0x9f9412]
/usr/bin/mongod(_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_11HostAndPortE+0xab8) [0x9ffd68]
/usr/bin/mongod(_ZN5mongo16MyMessageHandler7processERNS_7MessageEPNS_21AbstractMessagingPortEPNS_9LastErrorE+0x98) [0x6e8518]
/usr/bin/mongod(_ZN5mongo17PortMessageServer17handleIncomingMsgEPv+0x42e) [0xdd0cae]
/lib64/libpthread.so.0(+0x7ddb) [0x7f0cd72d8ddb]
/lib64/libc.so.6(clone+0x6d) [0x7f0cd667ca1d]
的錯誤是間歇性的,但通常發生在塊30-90秒在那段時間我不能寫任何數據。有幾次我不得不殺死寫入數據的進程。說到數據,我寫了大約750,000個相當簡單的文檔(少量字符串和一個小型嵌入式文檔)。沒有用戶指定的索引,只是_id上的默認索引。
我可以期待寫入「本地」數據庫嗎?我讀到這是一種合法的數據技術,您不想複製。
是否有任何解決方法呢?特殊配置設置?我使用Windows安裝的默認配置和Linux安裝的輕微日誌修改
本地數據庫僅用於MongoDB複製和其他內部跟蹤。一般來說,寫入'local'數據庫不是一個好主意,特別是如果這是副本集的主要部分。你從哪裏讀到這是一種合法的技術? – Stennie