我在32位系统上使用了Mongo,我需要创建一个最大大小为1GB的大上限集合。在64位系统上,一切都很好,但在32位上,我得到了错误:
com.mongodb.CommandResult$CommandFailure: command failed [command failed [create] {
"serverUsed" : "localhost:27017" ,
"errmsg" : "exception: assertion db\\pdfile.cpp:437" ,
"code" : 0 ,
"ok" : 0.0}在32位系统上,服务器的总存储大小是2GB,但是即使有了这个大小,我也不能创建一个大于500 is的集合。这个神奇的数字是什么意思?
Mongo db服务器版本为2.0.6
附加信息:
我有几个数据库文件,其总大小为34MB。在运行mongo之前,我要将这些文件复制到“data”目录中,启动Mongo,然后在shell中看到与35651584 (34MB)大小相同的数字(所使用的命令取自下面的注释)。如果我尝试创建一个大小为500 to的集合,就会看到添加了一个新文件(512 To)。但是,例如,如果我尝试创建一个大小为600 to的集合,则上面描述了一个错误(但512 to文件仍在添加)。
Mongo db是使用命令行选项启动的:
> db.adminCommand("getCmdLineOpts")
{
"argv" : [
"mongod.exe",
"--dbpath",
"..\\data",
"-vvvvvv",
"--logpath",
"..\\log\\server.log"
],
"parsed" : {
"dbpath" : "..\\data",
"logpath" : "..\\log\\server.log",
"vvvvvv" : true
},
"ok" : 1
}
>发布于 2012-08-06 11:23:49
MongoDB 跑得好得多在64位系统上,你能换到x64吗?正如Stennie所说,由于数据库中的其他数据,您必须达到mmap限制。
您能通过连接mongo shell并通过运行一个大于512 MB的1字节的新集合来验证这个假设吗?
db.createCollection("mycoll6", {capped:true, size:536870913})希望你能得到以下错误信息-
"errmsg" : "exception: can't map file memory - mongo requires 64 bit build for larger datasets",在Mongo shell中,连接到管理数据库并查看数据库的大小,以查看您有多少数据-
use admin
show dbs更新:基于一些额外的测试(我使用了Ubuntu12.04 32位),这似乎是一个错误。
Ubuntu测试
db.createCollection("my13",{capped:true,size:536608768}) {“my13”:“异常:断言db/pdfile.cpp:437",”代码“:0,"ok”:0} db.createCollection("my13",{capped:true,size:536608767}) { "ok“:1}
536608767字节略低于512 MB,为文件中的某种标题留出了空间。
我认为这可能与[smallfiles][2]有关,因为所有32位安装都使用该选项运行,但是,带有smallfiles的x64构建并不会显示相同的症状。
我已经为这个问题记录了服务器-6722。
https://stackoverflow.com/questions/11825598
复制相似问题