资源描述:
《MongoDB入门到精通-PPT版》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、MongoDB技术分享@zhangyu什么是MongoDB?为什么我会使用它?MongoDB是什么?{name:’mongo’,type:’DB’}MongoDB(from“humongous”)MongoDB是一个开源、可扩展、高性能、面向文档文的数据库,用C++编写。浅探原理内存映射存储引擎MongoDB采用内存文件映射引擎(MMAP)将文件映射到进程空间,当查询某块数据时操作系统会以Page方式把这块数据加入物理内存。写入数据时,会先把数据保存到内存中,然后Flush一次进行持久化存储。MongoDB中默认每分钟Flush一次。这部分的管理工作由操
2、作系统完成。客户端内存硬盘浅探原理数据文件DBname.0,DBname.1,DBname.2…DBname.0DBname.1DBname.2DBname.3目录:1.面向文档存储(Document-OrientedStorage)2.全索引支持(FullIndexSupport)3.复制&高可用性(Replication&HighAvailability)4.自动分片(Auto-Sharding)5.查询(Querying)6.Map/Reduce7.GridFS面向文档存储(Document-OrientedStorage)文档是什么?{name:
3、’zhangyu’,email:’zhangyuu@gall.me’}看起来是JSON其实是BSON!二进制编码序列化的JSON扩展{"hello":"world"}"x16x00x00x00x02hellox00x06x00x00x00worldx00x00"优点:轻巧、高效、灵活缺点:BSON的开销在序列化上BSON是JSON扩展!JSON表现力有限,因为只有类型:null、布尔、数字、字符串、数组、对象BSON扩展了类型:时间、正则表达式、函数…BSON是JSON扩展!日期:{“time”:newDate()}正则表达式:{
4、“regex”:/test/}函数:{“function”:function(){/**/}}……http://docs.mongodb.org/manual/reference/bson-types/{//传统“Status”:0,//数组,包含2个元素“Messages”:[“0”,“1”],//内嵌文档“ResponseBody”:{“name”:“zhangyu”,“email”:[“zhangyuu@gall.me”,“uuzhangyu@gmail.com”]}//JavanewDate()“Date”:ISODate("2013-11-25
5、T17:32:45.427+-800")}BSON是JSON扩展NULL没有值Booleantrue、false数字仅支持64位浮点数,其他类型的数字会自动转化为此格式字符串支持UTF-8字符集日期存储标准纪元开始的毫秒数,不含时区newDate();Regex符合JavaScript语法的正则表达式Code任何JavaScript代码Binary可存储任意字节数的字节数组,但在Shell中无法使用数组对象集合或列表在MongoDB可以被存储为数组嵌套文档一个文档可以包含另外一个文档其他详情点击这里MySQLMongoDB数据库数据库表Collectio
6、n记录行Document面向文档存储(Document-OrientedStorage){name:”zhangyu”,age:18,sex:”男”}{name:”malong”,age:28}Collection用户…….{name:”zhangyu”,like:”读书”}{name:”malong”,like:”电影”}Collection喜好…….为什么Document中没有主键ID?ObjectID!ObjectID是_id(_id是MongoDB在每个文档中的默认唯一标识的名称)的默认类型。{"_id":ObjectId(“52610458e4
7、b0975542d34753”),name:”zhangyu”…}01234567891011TimeMachinePIDINCTime:时间戳Machine:一般是机器主机名的散列值,确保了不同主机生成不同的机器hash值PID:进程ID,一台机器不同的mongo进程产生ID不冲突INC:自增计数器,确保在同一秒内产生的objectId也不会发现冲突,允许256的3次方等于16777216条记录的唯一性。初识增删改查添加文档db.users.insert({“_id”:ObjectId("52c3c518498a9646a48133a2"),“name
8、”:“zhangyu”,“email”:“zhangyuu@gall.me”})