2

测试
- 直接使用副本集
插入 200 个图像(300-800Ko/img) - 使用与 shard 相同的副本集插入 200 个图像(300-800ko/img) 。

我意识到这些操作有一个非常不同的执行时间......
-复制集:大约 30 秒内有200 张图片。
-分片大约 3 秒/图片=>这 200 张图片大约需要 7-8 分钟!!!

==> 我真的不明白为什么这些插入的分片速度如此之慢...... <==

条件
- Php 驱动程序
- GridFS:只有 fs.chunks 分片
- 写入关注点:大多数
- 只有 1 个线程:使用 PHP,我解析一个包含图片路径的数组,然后我使用 GridFS 将图片存储在 MongoDB 中。

资源:(所有服务器都是Proxmox
平台上的 OpenVZ VM(都在同一台机器上(用于测试))
3 mongod:6Go RAM(插入时 50%),1CPU(插入时 99% 空闲......)
2仲裁器:512Mo RAM(使用 100Mo),1CPU(100% 空闲 ...)
1配置:2Go RAM(使用 200Mo),1 CPU(100% 空闲 ...)
1 mongos:512Mo RAM(使用 100Mo),1CPU(插入时 98% 空闲...)

注意:在使用分片
插入时: - 所有 mongod、mongos 和 config_svr 实例的 CPU 使用率 ~1->5% - mongos/config_svr 的 RAM 使用率 ~5% - mongod 的 ~50% -网络吞吐量(在 mongod 上采用的指标) : mongos <--> 主 mongod : ~300Kb/s



在没有分片的情况下插入(直接设置副本):
-网络吞吐量(在 mongod 上采用的指标):托管图片服务器 <--> 主 mongod:~30Mb/s

PHP类 pastebin.com_[mongodb-class](包含与MongoDB交互的所有代码)
我在类的顶部添加:
mongoLog::setLevel(mongoLog::all)
mongoLog::setModule(mongoLog::all)
display_errors=1
error_reporting=-1
客户端直接调用该类的storefile()方法...
结果页面是这里: pastebin.com_[resultPage]

插入的文档甚至很简单:MongoID、picture_binaries_data
没有元数据,只有 MongoDB 在存储过程中生成的数据。

这是mongos 上sh.status()的结果:

    mongos> sh.status()
    --- 分片状态 ---
      分片版本:{
            “_id”:1,
            “版本”:3,
            “最小兼容版本”:3,
            “当前版本”:4,
            “clusterId”:ObjectId(“518372e807be4a15fb391fab”)
    }
      碎片:
            {“_id”:“rs0”,“主机”:“rs0/192.168.36.101:27017,192.168.36.102:27017,192.168.36.103:27017”}
      数据库:
            {“_id”:“admin”,“partitioned”:false,“primary”:“config”}
            {“_id”:“测试”,“分区”:假,“主”:“rs0”}
            {“_id”:“bepics_gallery”,“分区”:假,“主要”:“rs0”}
            {“_id”:“bepics_images”,“分区”:真,“主”:“rs0”}
                    bepics_images.fs.chunks
                            分片键:{“files_id”:1}
                            块:
                                    rs0 9
                            { "files_id" : { "$minKey" : 1 } } -->> { "files_id" : ObjectId("5183926028d40965190000ea") } on : rs0 { "t" : 1, "i" : 1 }
                            { "files_id" : ObjectId("5183926028d40965190000ea") } -->> { "files_id" : ObjectId("5183a1be28d409051e000004") } on : rs0 { "t" : 1, "i" : 3 }
                            { "files_id" : ObjectId("5183a1be28d409051e000004") } -->> { "files_id" : ObjectId("5183a2a728d409051e00008f") } on : rs0 { "t" : 1, "i" : 5 }
                            { "files_id" : ObjectId("5183a2a728d409051e00008f") } -->> { "files_id" : ObjectId("5183b70328d409cc1e00008f") } on : rs0 { "t" : 1, "i" : 7 }
                            { "files_id" : ObjectId("5183b70328d409cc1e00008f") } -->> { "files_id" : ObjectId("5183c6f728d409e526000037") } on : rs0 { "t" : 1, "i" : 9 }
                            { "files_id" : ObjectId("5183c6f728d409e526000037") } -->> { "files_id" : ObjectId("5183c76028d409e526000076") } on : rs0 { "t" : 1, "i" : 11 }
                            { "files_id" : ObjectId("5183c76028d409e526000076") } -->> { "files_id" : ObjectId("5183c7cb28d409ea2600001f") } on : rs0 { "t" : 1, "i" : 13 }
                            { "files_id" : ObjectId("5183c7cb28d409ea2600001f") } -->> { "files_id" : ObjectId("5183c84e28d409ea2600006d") } on : rs0 { "t" : 1, "i" : 15 }
                            { "files_id" : ObjectId("5183c84e28d409ea2600006d") } -->> { "files_id" : { "$maxKey" : 1 } } on : rs0 { "t" : 1, "i" : 16 }

为了连接到集群,我使用 MySQL 表来存储服务器配置,如 ip、端口、优先级、RS_name ......
repica set archi 中。=> 我用副本集的名称和前3 个服务器的名称构建连接池,按优先级排序。
分片存档中。=> 我用所有 mongos构建连接池。
(连接池中的所有地址都被格式化为 ip:port)

任何人都可以帮我解决它或向我解释吗?

4

0 回答 0