题
从我的测试,我得到大约500插入,200查询,400更新每秒。我不知道在什么我可以调整,以增加这些数字。
我已经阅读,其他人可以实现成千上万甚至数千刀片在他们的测试,这是远比我的测试。我不知道如果我失踪的一些基本的东西?
因此,这里的事实:
- 我使用一个双赢的32位mongodb v2。0.3默认结构
- Java司机(2.7.3)与春天的mongo、(我不力同步)
- 这样做的组合插入和原子更像推、拉、 公司,dec,设置,
- 和重复所有这些对于500k倍。
- 目的是要模拟用户操作的喜欢插入和更新
- 没有具体索引的定义,但是我认为默认情况下,会有始终是唯一的索引的身份证吗?
- Java应用程序运行在日食IDE运行,在同一台机器它的服务器
- H/W规格:核心i5,mem4G电脑上的边缘
- 我注意到java过程大约需要280MB和稳定,在这些过程的循环
开始时间是:2012-03-08 21:50:16
和我监测使用mongostat,并在到达时间 22:05:10
, 我终止我的未完成的应用程序。。而这里是最后输出的mongostat
insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr|qw ar|aw netIn netOut conn time
499 200 400 0 0 100 0 1023m 1.06g 581m 145 8.5 0 0|0 0|0 645k 97k 3 22:05:01
503 201 403 0 0 102 0 1023m 1.06g 582m 154 10.7 0 0|0 0|1 651k 98k 3 22:05:02
520 208 415 0 0 105 0 1023m 1.06g 582m 176 11.1 0 0|0 0|0 671k 101k 3 22:05:03
504 202 403 0 0 102 0 1023m 1.06g 582m 167 7.2 0 0|0 0|0 651k 98k 3 22:05:04
524 209 419 0 0 106 0 1023m 1.06g 582m 147 8.3 0 0|0 0|0 675k 102k 3 22:05:05
534 213 428 0 0 107 0 1023m 1.06g 583m 176 7.4 0 0|0 0|0 690k 103k 3 22:05:06
531 213 424 0 0 108 0 1023m 1.06g 584m 160 4.9 0 0|0 0|0 685k 104k 3 22:05:07
533 213 427 0 0 107 0 1023m 1.06g 584m 164 6.9 0 0|0 0|0 689k 103k 3 22:05:08
518 208 414 0 0 105 0 1023m 1.06g 585m 158 7.3 0 0|0 0|0 669k 101k 3 22:05:09
521 208 417 0 0 105 0 1023m 1.06g 585m 154 4.7 0 0|0 0|0 673k 101k 3 22:05:10
然后我检查了我的插入数量:
> db.myCollection.find().size();
90575
这是一个例子我的文件插入,这也是更新等进程
> db.myCollection.findOne().pretty();
{
"_id" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"something1" : "my class is cool !",
"something2" : {
"value" : "this is a statement blah blah",
"name" : "myStatement"
},
"something3" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [
"6810cb0c-fa3e-4ca9-8a27-8432f2d1e828",
"a8276d05-a796-4c43-bc74-edc06d074099"
],
"name" : "myids"
},
"something4" : {
"myattr" : {
"value" : "something",
"name" : "name"
},
"attr" : {
"content" : {
"value" : "another another body body content content",
"name" : "content"
},
"contentId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"name" : "something"
},
"subsubchildchild" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "subBodies"
},
"myId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"name" : "hiccups"
},
"something5" : {
"value" : false,
"name" : "hahaha"
},
"something6" : {
"name" : "okay this is just a test"
},
"something7" : {
"value" : false,
"name" : "remove me !"
},
"something8" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "guess what"
},
"something9" : {
"size" : {
"value" : 0,
"name" : "anotherSize"
},
"value" : [ ],
"name" : "tarantula"
},
"something10" : {
"value" : 8,
"name" : "my exam score"
},
"something11" : {
"size" : {
"value" : 0,
"name" : "justAnotherSize"
},
"value" : [ ],
"name" : "myReference"
},
"something12" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "myOtherReference"
},
"something13" : {
"value" : "8b78fff0-50f5-4992-9972-89f9d944fee7",
"name" : "user"
},
"something14" : {
"dateTime" : "2012-03-08 21:50:17.480000000"
},
"something15" : {
"value" : false,
"name" : "lovely"
}
}
这里是我的数据库统计:
> db.stats();
{
"db" : "qa",
"collections" : 7,
"objects" : 815197,
"avgObjSize" : 622.2093211824872,
"dataSize" : 507223172,
"storageSize" : 610770944,
"numExtents" : 57,
"indexes" : 5,
"indexSize" : 64197952,
"fileSize" : 1056702464,
"nsSizeMB" : 16,
"ok" : 1
}
还有另外一个问题从好奇..从我的主要收集大小,其具有约90k记录和其他非实质性的收藏品,这不应该在大尺寸的,是有合理的周围有1TB的fileSize在这种情况下?有什么我可以做的来帮助降低我的filesize?
请分享你的想法。
解决方案
你似乎越来越多的故障 mongostat
.任何主意,为什么?
这样做的组合插入和原子更像推、拉,inc,dec,设置
你是怎么发出这些更新?通过 _id
?
我已经阅读,其他人可以实现成千上万甚至数千刀片在他们的测试,这是远比我的测试。我不知道如果我失踪的一些基本的东西?
根据 mongostat
你只有3连接活性和你的锁%是只有约10%。
- 你是多线程您的投入?
- 你毁了这一切对相同的计算机?
- 是如何系统IO?
- 是你做的
WriteConcern.Safe
?
所有这些考虑因素可能会影响你的吞吐量。
它是合理的,有大约1TB的fileSize在这种情况下?
基于你的 db.stats()
, 你只有大约600MB的磁盘中的使用。
"storageSize" : 610770944 // = 610,770,944
你平均大小的对象是622字节,但你必须815,197对象,不90k文件的要求。
有什么我可以做的来帮助降低我的filesize?
是的,降低大小的钥匙式文件。例如:
"something1" : "my class is cool !" => ~28 bytes
"s1": "my class is cool !" => ~20 bytes
确保你是正确的储存缩短的名称和让你的数据访问的框架做解除映这些更合理的名称。