mongodb亿级文件存储方案测试

田毅 发布于 2012/01/04 17:48
阅读 7K+
收藏 7

测试目标:mongodb gridfs version:2.0.2

1 海量小文件(1K-50K)的插入速度测试

2 亿级文件存储的读取速度测试

3 了解mongodb扩展对存储容量、读写速度的影响

4 mongodb的稳定性和缺陷

测试一:单节点测试(4核 * 32G内存)官方Client

每秒插入速度:8000条(4000个1K文件)

单节点保存1亿个文件后,硬盘写满了

测试二:shard集群测试一,每个Replica Set中member数量为3,总共2个集群 自己重写Client

shard1: dxud3c006 + dxud3c007 + dxud3c008

shard2: dxud3c009 + dxud3c010 + dxud3c011

config server:  dxud3c006 + dxud3c009 + dxud3c005

mongos: dxud3c005(4个)

每秒插入速度:3500条(1750个1K文件)

平均每个shard插入速度:1500-2000条(750-1000个1K文件)

测试三:shard集群测试二,每个Replica Set中member数量为2,总共3个集群 自己重写Client

shard1: dxud3c006 + dxud3c007 

shard2: dxud3c008 + dxud3c009

shard3: dxud3c010 + dxud3c011

config server:  dxud3c006 + dxud3c008 + dxud3c010

mongos: dxud3c005(4个)

每秒插入速度:6000条(2000个1K文件)

平均每个shard插入速度:1800-2300条(900-1150个1K文件)

说明:

1 官方的java-client中没有对shard集群模式做任何优化

2 针对本项目的场景(按ID存取文件)对java-client进行优化:

    a 创建collection(files,chunks)时,指定使用_id作为files的shard key,使用files_id作为chunks的shard key

    b 创建files的collection时,使用自己生成的uuid作为_id,以避免插入时,压力集中在一个shard

    c 创建collection(files,chunks)后,手动创建15个chunks,min~1,1~2,2~3......f~max,并且手动将chunks移动到不同的shard上面去

    d 由于项目的性质问题,对数据的完整性和一致性要求很高,导致insert时指定使用REPLICAS_SAFE模式

测试过程中发现的问题:

1 mongodb的集群模式感觉不是很稳定,常出现RS102的问题:指primary节点与secondary节点同步差距过大,而导致secondary节点变为不可用状态。需要手动将primary的数据文件到secondary上(当数据文件很大时,非常慢非常慢)

2 mongodb在插入时的速度不是很稳定,经常会出现3-5秒没有插入一条数据的情况

读取速度的测试稍后放出

以下是话题补充:

@田毅:补充一下,最新的测试报告:2倍冗余(3 shards)条件下插入速度: 1K文件 单shard(双机):1200-1700/秒 600-850文件/秒 10K文件 单shard(双机):500-900/秒 250-450文件/秒 100K文件 单shard(双机):50-100/秒 25-50文件/秒 1000K文件 单shard(双机):30-50/秒 7-12文件/秒 (2012/01/10 08:52)
@田毅:2倍冗余(3 shards)条件下,读取文件的速度 已存储8000万1K文件时 单shard(双机):1500-3000/秒 750-1500文件/秒 已存储1.6亿1K文件时 单shard(双机):200-400/秒 100-200文件/秒 (2012/01/10 08:54)
加载中
0
蟋蟀哥哥
蟋蟀哥哥
这么快就出测试报告了..执行力不错啊.
田毅
田毅
请多提意见,谢谢
0
慕容日华
慕容日华
我想有疑问问问题是没错吧, shard1: dxud3c006 + dxud3c007 这一行具体是什么?我真的不知道,我已经百度了,但是没有找到想要的答案!!楼主,赐教!
慕容日华
慕容日华
@田毅 : 太感谢!!!
田毅
田毅
shard1: dxud3c006 + dxud3c007: dxud3c006等等都是主机名,指的是具体一台主机
0
lucasli
lucasli
不错,比较详细的测试报告,赞一个
0
胡凯
胡凯

我也打算用它用存文件,海量小文件+SSD。

不知MongoDB是否有针对 SSD作优化?是不是出现重复擦写的情况?

比如场景:一次写入N次读取,文件内容不更新的情况下

0
田毅
田毅
目前我了解到的,没看到有什么专门对于SSD的优化,对于你这种 一次写入N次读取的场景来说,不会存在频繁擦写的情况(除非你定期对mongodb执行维护操作)。不过,一般来说,使用mongodb的时候只要把内存搞大一点就可以满足读取速度的需求,SSD和内存比起来性价比还不是很高,mongodb的主页上有专门说明SSD使用的doc,参考:http://www.mongodb.org/display/DOCS/SSD
0
养不胖

楼主请问,我是最近才学mongodb的。在linux服务器上配置了分片和复制集。天测试并发性的时候。总是报错“too may open files” linux系统打开文件限制1024,我用ulimit设置了。

mongodb启动的时候我也用-maxConns=20000设置了。

我是使用的线程数400,添加数据数400.

在mongo登陆后db.serverStatus().connections打印的还最大连接数还是

{ "current" : 1, "available" : 818, "totalCreated" : NumberLong(1) }默认的。

请问这是为什么?请楼主赐教。

返回顶部
顶部