More Related Content
Similar to Mongo db技术分享 (20)
Mongo db技术分享
- 3. MongoDB 简介 memcached sqlserver s iis iis Mongo 是一个高性能,开源,无模式的文档型数据库 ( 采用文件内存映射机制 ) ,它在许多场景下可用于替代传统的关系型数据库或键 / 值存储方式。 Mongo 使用 C++ 开发。
- 4. MongoDB 版本对比 Mongo 当前稳定版是 1.8.2( 见附件 mongodb.rar ) 比前一版本 1.4 做了很多改进 ( 使用 C# 驱动 MongoDB.Driver.dll 和 MongoDB.Bson.dll( 见附件 C# 驱动类库 .rar )): # 改进和提高了并发性能。 # Mongodb 存储文件申请磁盘空间的方式做了改进。 # 增加了 $or 等查询操作符。 # Replication 的同步方面做了改进。 select 方面 , 性能提升显著,合计有 83% 性能提高 update 方面有 75% 的性能提高
- 5. MongoDB 性能测试 Mongo 测试数据 ( suse11-64bit 、 xeon3.6*2 、 4G DDR333 、 scsi73G*2 无 raid 的机器) 1 、 insert 九百万条简单数据( 3 个字段):平均值大约在 24000/s (最高 2.8W ,最低 2.1W );同时,插入第一个一百万和第九个一百万效率没有明显差异,数据文件体积大概在 3.8G ,比较大; 2 、 select 一万条数据(有索引): 57~61ms ,一千条大概在 6ms 左右,非常稳定; 数据量约 2 千万,数据库 300G 的情况下,读写 2000rps , CPU 等系统消耗是相当的低
- 6. MongoDB 特点 高性能、易部署、易使用,存储数据非常方便。主要功能特性有: * 面向集合存储,易存储对象类型的数据。 * 模式自由 ( 没有行,列,关系等概念 ) 。 * 支持动态查询 , 拥有与 sqlserver 相似的查询功能 。 * 支持完全索引,包含内部对象。 * 支持查询。 * 支持复制和故障恢复。 * 使用高效的二进制数据存储,包括大型对象(如视频等)。 * 自动处理碎片,以支持云计算层次的扩展性 * 支持 C# , Python , PHP , Ruby , Java , C , Javascript , Perl 及 C++ 语言的驱动程序,社区中也提供了对 Erlang 及 .NET 等平台的驱动程序。 * 文件存储格式为 BSON (一种 JSON 的扩展) * 可通过网络访问
- 9. MongoDB 安装 mongod --logpath D:ebrootongodbogongoDB.log --logappend --dbpath D:ebrootongodbata --directoryperdb --serviceName MongoDB1 --port 25436 --install 注:此处是将 mongod.exe 注册为 windows 服务 ,必须先在相应目录下建立 data 与 log 目录,否则安装时提示错误 ( 附件 mongodb.rar 为 mongodb 安装文件 )
- 10. MongoDB 命令行操作 普通操作 1 、新建集合集: > db.createCollection("user"); 2 、 插 入数据: > db.user.insert({uid:1,username:"Falcon.C",age:25}); > j = { name: "mongo"}; > db.things.save(j); > for( var i = 1; i < 10; i++ ) db.tables.save( { x:4, j:i } ); 3 、更新数据: > db.user.update({uid:1},{$set:{age:26}}) #age=26 > db.user.update({uid:1},{$inc:{age:-1}}) #age=age-1
- 13. MongoDB 命令行操作 普通操作 4 、查询: 4.1 遍历集 > var cursor = db.things.find(); > while (cursor.hasNext()) { print(tojson(cursor.next())); } 4.2 方法 2 > db.things.find().forEach( function(x){print(tojson(x));}); 4.3 、获取结果集 > var cursor = db.things.find(); > print (tojson(cursor[4])); > var arr = db.things.find().toArray(); > arr[5];
- 15. MongoDB 命令行操作 普通操作 5 、条件查询: > db.things.find({name:"mongo"}).forEach(function(x) { print(tojson(x));}); 等价于: SQL : SELECT * FROM things WHERE name="mongo" >db.things.find({x:4}, {j:true}).forEach(function(x) { print(tojson(x));}); 等价于: SQL : SELECT j FROM things WHERE x=4
- 19. MongoDB 操作 普通操作 6 、 sort 用法 >db.things.find({tags :'economy'}).sort({ts:-1}).limit(10); 等价于: SQL: select * from things where 'economy' in tags order by ts DESC limit 10 7 、 findOne 用法 > var mongo = db.things.findOne({name:"mongo"}); > print(tojson(mongo)); 8 、 limit 用法 db.things.find().limit(3);
- 21. MongoDB 操作 索引 >db.u_info.insert({uid:1,name:"Falcon.C",address:"Beijing"}); >db.u_info.insert({uid:2,name:"sexMan",address:"Wuhan"}); 添加: >db.u_info.ensureIndex({uid:1}); >db.u_info.ensureIndex({name:1}); 删除: >db.u_info.dropIndex("name_1") 查询索引 >db.u_info.find({name:"Falcon.C"}).explain(); 查询的条件中有索引时,查询走 BtreeCursor 的索引,而没有索引时走 BasicCursor 。
- 34. MongoDB 操作 同步复制 1 、 Master 对 Slave [Master] bin/mongod --dbpath=/data/db/m_data --logpath=/data/db/m_log --logappend --port=27017 --master --auth & [Slave] bin/mongod --dbpath=/data/db/m_data --logpath=/data/db/m_log --logappend --port=27017 --slave --source=192.168.100.202:27017 --auth &
- 36. MongoDB 技巧汇总 备份 ./mongodump -u admin -p 123456 -d user -o user -d db -o path 还原 ./mongorestore -u admin -p 123456 -d user -c user user/user/user.bson 帮助信息 db.help(); db.user.help();