Download presentation
Presentation is loading. Please wait.
1
——网鸟老兵系列课程之10天掌握MongoDB
陈颜铭出品 第一天:认识MongoDB ——网鸟老兵系列课程之10天掌握MongoDB 网鸟出击,必属精品! 微博: QQ: (ymind chan) Q群: (刺客巅峰)
2
声明 声明一哈 网鸟QQ群 本PPT根据《MongoDB: The Definitive Guide》原版制作而成;
我很穷,但我大胆的承认我看的是盗版PDF; 如果您发现翻译或描述有误,请不吝赐教; 制作PPT时,我不一定会100%的引用书中提供的示例,看书的朋友不要见怪; 如果有任何疑问请通过微博或QQ反馈给我; 网鸟QQ群 刺客巅峰( )——IT技术综合交流群组,这里神马都有。欢迎各种程序猿加入! NoSQL( )——新建的NoSQL专用群组,来吧!来吧!欢迎各位光临! 研发团队( )——想入此群请先xx,呵呵,请先加老陈QQ( )!
3
MONGODB简介 功能丰富 可扩展性 无模式 高性能 易管理
索引 聚合 分布式文件系统 存储JavaScript 定容集合 可扩展性 数据分片 负载均衡 海量数据支撑 无模式 非关系型 面向文档的数据存储 高性能 空间预分配 内存映射 非事务性 易管理 Server自治机制 自动故障转移 动态集群 很多朋友将MongoDB亲切的译为“芒果”,老陈反对这个叫法,发音也相差较远,依着我,应该翻译为“猛狗”,酱紫才够强大够给力!
4
MONGODB数据架构 文档 集合 数据库 Database Collection Document
5
数据库、集合、文档命名规范 数据库 集合 文档 任意UTF-8字符串(比如:网鸟); 不能是空字符串;
不得包含以下字符: (空格) 、 .、$、/、\、\0; 长度不得超过64字节; 保留字:admin、local、config等; 集合 不能包含\0 、 $; 不能以system.开头; 文档 不能包含\0、 $; 不能以_开头;
6
版本选择 平台选择 下载安装 MONGODB的下载与安装 MongoDB的版本命名规范如:x.y.z;
详情: 版本选择 生产环境使用32位机器的,老陈无话可说,反正64位又运行不了,你没的选; 在64位机器上坚决要使用64位版本,可以获得更大的内存映射空间,提升MongoDB的性能; 至于操作系统,MongoDB是跨平台的,在下载页面找自己对应的版本即可; 平台选择 下载地址: 直接运行:解压后,在命令行执行%setupPath%\bin\mongod.exe即可; 作为Windows服务:请参考 其他操作系统请参考: 下载安装
7
MONGODB SHELL 运行Shell 数据操作 打开命令行;
执行%setupPath%\bin\mongo.exe即可进入MongoDB Shell; 在MongoDB Shell中可以运行任何JavaScript脚本; 在Shell中可以键入help以获取帮助,当然,都是E文的; 数据操作 创建: db.test.insert({ “Name” : “ymind chan”, “age” : 8 }); 读取: db.test.find({ “Name” : “ymind chan” } ); 更新: db.test.update(“Name” : “ymind chan”, { “$set” : { “age” : “5” } } ); 删除: db.test.remove({ “Name” : “ymind chan” } ); 这里只是简单示例,更详细的教学还在后面!
8
MONGODB的数据类型 MongoDB底层使用Bson来维护数据,Bson是一种二进制下的类似于Json的数据格式。 以下是MongoDB中几个值得啰嗦一下的数据类型: MongoDB的基本数据类型 MongoDB的数组 MongoDB的文档嵌套 MongoDB的ObjectId
9
MONGODB的基本数据类型 null bool 数字 字符串 日期 regex code binary 数组 嵌套文档 其他
这个有神马好说的?? null true、false; bool 仅支持64位浮点数,其他类型的数字会自动转化为此格式; 数字 支持UTF-8字符集; 字符串 存储标准纪元开始的毫秒数,不含时区; 日期 符合JavaScript语法的正则表达式; regex 任何JavaScript代码; code 可存储任意字节数的字节数组,但在Shell中无法使用; binary 对象集合或列表在MongoDB可以被存储为数组; 数组 一个文档可以包含另外一个文档; 嵌套文档 详细内容请参考 其他
10
MONGODB的数组 MongoDB中的数组既可以作为有序对象(如列表)来操作,也可以作为无序对象(如集合)来操作。MongoDB可以以原子操作的形式来修改或删除数组中的元素。 下面是一个数组示例(不用怀疑,这就是Json语法): { // 这个不是数组 "Status" : 0, // 这个是空数组 "Messages" : [], // 包含3个元素的数组 "ResponseBody" : [ "h010t ", "h010t ", "h010t “ ] }
11
MONGODB的文档嵌套 文档式存储的特色就是允许文档对象的嵌套,这能够使我们的实体数据在MongoDB的存在形式更加自然。
老陈忠告:不要滥用嵌套文档,对于需要复杂运算才能完成的嵌套应当使用外键模式来解决,否则之后的DAL(Data Access Layer,数据访问层)开发会相当痛苦! 以下是一个嵌套文档的格式示例: // 根文档 { "Status" : 0, // 嵌套文档 "ResponseBody" : { "CityName" : "北京", "Keyword" : "钓鱼台", // 再套一个数组,数组的每个元素又是文档,NB吧! "Landmarks" : [ { “Name” : “北京钓鱼台国际旅行社” }, { "Name" : "钓鱼台“ } ] }
12
MONGODB的OBJECTID ObjectId是_id(貌似前面木有提过?木有关系,_id是MongoDB在每个文档中的默认唯一标识的名称)的默认类型。 ObjectId的结构如下: 如上图所述,ObjectId可以保证同一台机器上不同进程(即MongoDB实例)生成的值都是唯一的。详情请参考: 注意事项: 当插入的文档并没有指定_id的时候,MongoDB会自动创建,并使用ObjectId类型; _id可以被指定为其他的类型,比如整数; 关于自增标识,MongoDB没有内置自增标识,在目前的roadmap中也没有相关的规划,自定义自增标识的方法将会在后续内容中专门讲解;
13
结束语 采纳 缺点 分享 老陈接触MongoDB一年多了,已经被彻底征服;
我自己的项目( 缺点 最大的缺点就是无法支持复杂运算,因为按照MongoDB的架构思想来说呢,是想把这些都转移到驱动或App上; 为了解决这个缺点,老陈自行研发了EntityDB与之互补(小声的说一句:EntityDB是使用C#开发的内存数据库托管框架,以较低的硬件成本换取高性能的复杂运算,但不保证绝对的稳定性)。 GEO搜索不支持传统意义上的距离运算,而是使用“经纬度”“差值”,这个让我很纠结,甚至我放弃了其内置的GEO特性; 分享 我强烈的推荐大家使用各种NoSQL方案来逐步的替代已有的关系型数据库(我不特指MongoDB); 对于新技术要多创建原型程序进行实践论证,而不是人云亦云,实际上我并不认为MongoDB就是绝对的最好; 我主要做.NET开发,当前MongoDB官方提供的C#驱动中的连接池管理机制存在一些问题,在使用的时候应当尽量避免并发!
14
广告 老陈诚邀有志之士以及乐于分享的朋友加盟组 团共建此站,此站定位是非营利性技术交流平台, 如果您抱着捞一把的心态加盟,请绕行。
老陈一年前就想组建MongoDB中文社区,但命不好,注册MongoDB.CN失败(你们懂的),第二天 被无耻的易名中国抢注,在此,偶强烈建议大家不要到易名中国查询未注册域名,那丫心贼黑!省略脏字 3000个。后来无奈,我注册了MongoDB.CC。 老陈诚邀有志之士以及乐于分享的朋友加盟组 团共建此站,此站定位是非营利性技术交流平台, 如果您抱着捞一把的心态加盟,请绕行。 祝您好运!
Similar presentations