Mongodb技术报告总结
1.目的
提供技术人员进行参考
2.技术优势
大数据量:
内置GridFS,支持大容量的存储
高扩展性:
Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病。
高性能:
在使用场合下,千万级别的文档对象,近10G的数据,对有索引的ID的查询不会比mysql慢,而对非索引字段的查询,则是全面胜出。 mysql实际无法胜任大数据量下任意字段的查询,而mongodb的查询性能可以,同时它的写入性能也很厉害,可以写入百万级别的数据。
灵活的数据模型:
无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
高可用:NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如mongodb通过mongos、mongo分片就可以快速配置出高可用配置。
MongoDB的缺陷:
1. 事务关系支持薄弱(4.0版本后修改支持事务操作)。
2. 稳定性有些欠缺,大量的查询会影响插入速度,会造成插入非常不稳定。
3.MongoDB一方面在方便开发者的同时,另一方面对运维人员却提出了相当多的要求。业界并没有成熟的MongoDB运维经验。
3.性能分析
由于机器以及测试环境缺乏等原因,没能够进行具体的性能以及压力测试,所以引用了网上比较符合基本的业务场景的测试报告文件,该测试结果仅提供参考。
测试环境:
服务器:X86 pcserver
cpu: 单颗8核
内存:64G
磁盘:raid 10
操作系统:centos 6.5
mongodb:3.0
java驱动:2.13.0
jdk:1.6
网络:千兆以太网
测试一:单台monodb服务,一台同配置服务器作为压力服务器,数据量不超过内存大小。
场景一:每文档1000字符,10线程同时写。

结果:每秒平均写入22413 个文档。
场景二:每文档10K字符,10线程同时写。

结果:每秒平均写入9038个文档
场景三:每文档35K字符,10线程同时写。

结果:每秒平均写入2261个文档.插入速度不稳定
结论:插入速率于文档大小有关,插入速率与文档成反比
测试二:单台monodb服务,一台同配置服务器作为压力服务器,数据量不超过内存大小。库里背景为1亿条大小为10K的数据。查询会随机按ID进行,插入为每次插入10k的数据。10线程插入,10线程查询。测试之前,先进行大量的随机查询,直到内存不增长

结果:插入速度平均每秒9229
查询速度平均每秒2102
场景:10线程插入,20线程查询

结果:插入速度平均每秒4622 插入速度非常不稳定
查询速度平均每秒2530
结论:在数据并发量大的情况下,大量的查询会影响插入速度,会造成插入非常不稳定(将查询分布到副本上是个好的选择)
4.技术框架
建议架构模式:副本模式

框架优点:
[if !supportLists]① [endif]读写分离,解决节点的读写压力过大
[if !supportLists]② [endif]集群数据一致性,采用从节点复制主节点数据,保证集群内数据一致
[if !supportLists]③ [endif]集群高可用,主节点挂了能自动切换连接(支持手动切换)
[if !supportLists]④ [endif]
5.部署(待)