gpt4 book ai didi

java - 如何加快 mongodb 测试速度?

转载 作者:行者123 更新时间:2023-12-02 07:56:06 24 4
gpt4 key购买 nike

根据我的测试,我每秒大约进行 500 次插入、200 次查询、400 次更新。我想知道我可以调整什么来增加这些数字。

我读到其他人在他们的测试中可以实现数千甚至数万的插入,这比我的测试要好得多。我想知道我是否缺少一些基本的东西?

所以,事实如下:

  • 我使用的是 win 32 位 mongodb v2.0.3,默认配置
  • Java 驱动程序(2.7.3)与 spring mongo,(我不强制 fsync)
  • 结合插入和原子更新,例如推、拉、递增、递减、设置,
  • 并重复所有这些 50 万次。
  • 目的是模拟用户操作,例如插入和更新
  • 没有定义特定索引,但我认为默认情况下 id 上总会有唯一索引?
  • 在 eclipse IDE 中运行的 java 应用程序与 mongod 服务器在同一台机器上运行
  • 硬件规范:Core i5、内存 4GB、Thinkpad Edge
  • 我注意到 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 的文件大小是否合理?我可以做些什么来帮助减少我的文件大小?

请分享您的想法。

最佳答案

您似乎在 mongostat 上遇到了很多错误。知道为什么吗?

Doing a combination of insertion and atomic updates like push, pull, inc, dec, set

您如何发布这些更新?通过_id

I have read that others can achieve thousands or even tens of thousand of inserts in their tests, which is far better than my test. I wonder if i am missing something basic?

根据 mongostat,您只有 3 个 Activity 连接,并且您的锁定百分比仅为 10% 左右。

  • 您的输入是否采用多线程处理?
  • 您会在同一台计算机上毁掉这一切吗?
  • 系统IO怎么样?
  • 您在使用WriteConcern.Safe吗?

这些都是可能影响您的吞吐量的注意事项。

is it reasonable to have around 1TB of fileSize in this case ?

根据您的 db.stats(),您仅使用了大约 600 MB 的磁盘空间。

"storageSize" : 610770944 // = 610,770,944

您的平均对象大小为 622 字节,但您有 815,197 个对象,而不是您声称拥有的 90k 文档。

Is there anything i can do to help reduce my filesize ?

是的,减少 JSON 文档中键的大小。例如:

"something1" : "my class is cool !"  => ~28 bytes
"s1": "my class is cool !" => ~20 bytes

确保您正确存储缩短的名称,并让您的数据访问框架将这些名称映射到更合理的名称。

关于java - 如何加快 mongodb 测试速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com