Mongodb分片性能问题

时间:2013-05-03 12:39:50

标签: performance mongodb sharding

测试
- 直接使用副本集插入200张图像(300-800Ko / img) - 使用相同的副本设置作为碎片插入200张图像(300-800ko / img)。

我意识到这些操作的执行时间确实不同...... - 使用副本集约30秒内200张图片 - 使用分片大约3秒./picture =>这些200张照片大约7-8分钟 !!!

==>我真的不明白为什么这些插件在分片时速度太慢......< ==

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

资源
(所有服务器都是Proxmox板式OpenVZ VM(全部在同一台机器上(用于测试))) 3 mongod :6Go RAM(插入时为50%),1CPU(插入时空闲率为99%) 2 arbiters :512Mo RAM(100Mo used),1CPU(100%空闲......)
1 config :2Go RAM(使用200Mo),1个CPU(100%空闲......)
1 mongos :512Mo RAM(100Mo使用),1CPU(插入时空闲率为98%)

备注
插入时使用分片
- 所有mongod,mongos和config_svr实例的~1 - >> 5%CPU利用率 - mongos / config_svr的~5%RAM利用率 - 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()
    --- Sharding Status ---
      sharding version: {
            "_id" : 1,
            "version" : 3,
            "minCompatibleVersion" : 3,
            "currentVersion" : 4,
            "clusterId" : ObjectId("518372e807be4a15fb391fab")
    }
      shards:
            {  "_id" : "rs0",  "host" : "rs0/192.168.36.101:27017,192.168.36.102:27017,192.168.36.103:27017" }
      databases:
            {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
            {  "_id" : "test",  "partitioned" : false,  "primary" : "rs0" }
            {  "_id" : "bepics_gallery",  "partitioned" : false,  "primary" : "rs0" }
            {  "_id" : "bepics_images",  "partitioned" : true,  "primary" : "rs0" }
                    bepics_images.fs.chunks
                            shard key: { "files_id" : 1 }
                            chunks:
                                    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,port,priority,RS_name,...
repica set archi。 =>我使用副本集的名称 3个第一个服务器构建连接池,按优先级排序。
分片状态。 =>我使用所有mongos 构建连接池 (连接池中的所有地址都格式化为ip:port)

有人可以帮我解决或向我解释一下吗?

0 个答案:

没有答案