由网络副手--寻路人于2016.06.12 17:05:00发布在NoSql技术 MongoDB 前言--MongoDB介绍 阅读4100 评论0 喜欢0 一、什么是MongoDB 面向文档的数据库 一 . 优点 1. 使用 (文档取代行,一条记录表达复杂层级关系;去K-V化,字段的添加删除更加方便) 2. 扩展 (易于拓展,自动处理跨集群数据和负载,集群加入硬盘,横向拓展自动数据传输) 内置分片对范围自动分片机制: 一个collection可按照记录的范围,分成若干个段,切分到不同的Shard上。 Shards可以和复制结合,配合Replica sets能够实现Sharding+fail-over,不同的Shard之间可以负载均衡 查询是对 客户端是透明的。客户端执行查询,统计,MapReduce等操作,这些会被MongoDB自动路由到后端的数据节点。这让我们关注于自己的业务,适当的 时候可以无痛的升级。MongoDB的Sharding设计能力最大可支持约20 petabytes,足以支撑一般应用。 这可以保证MongoDB运行在便宜的PC服务器集群上。PC集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本 3. 功能模块丰富 3.1 索引 二级索引,多种快速查询 唯一索引 / 复合索引 / 地理空间索引 / 全文索引 3.2 聚合 支持聚合管道,自动优化。(过滤,重新组合输出,指定字段分组,排序(操作符表达代替MapReduce)) 3.3 特殊的集合类型 例如(场景1 :定时过期会话; 场景2: 固定大小集合日志) 3.4 文件存储 4. 性能好 4.1 BJSON 二进制存储,存入性能快。内存用作缓存,为查询分配索引 4.2 内置GridFS(布式文件系统),支持大容量的存储,能够满足对大数据集的快速范围查询 4.3 对于非索引字段查询在千万级别会非常快 二. 缺点 1. 不支持事务,join,空间占用大 申请机制(64,128,256 逐次递增,直到单个2G) 2. 删除记录不释放空间,只标志删除 二、MongoDB 拓展机制 ![图片1.png][1] 三、文档、集合、数据库 文档(一行数据)即:对象 键值对的有续集{“name” : “张三”,“age” : “24”} 键值不能包含 (\0 , . , $),不区分大小写 集合(动态表) 命名:禁止’’,\0,system开头,$, . 数据库(集合的组合) 命名:禁止 / , \ ,’ ’, . , < , > , * , : , ? , | , \0 . 只能使用 ASCII 中字母和数字 只能小写,最长64位 数据库: local,config,admin 这些数据库是保留的 四、数据类型 1、null。{"x":null}。 2、Boolean。{"x":true} 、{“x":false}。 3、数据类型。在Mongodb Shell中默认使用64位浮点型数据,如{“x":2.32}、{"x":2},如果要使用整数类型则用{"x":NumberInt(2)}、{"x":NumberLong(2)}。 4、字符串。Mongodb中字符串采用UTF-8编码方式,{"x":"hello world"}。 5、日期类型。{"x":new Date()}。 自新纪元以来经过的毫秒数,不存储时区 6、正则表达式。{"x":/itbilu/i}。 7、数据。{"x":["hello","world"]}。 8、内嵌文档。{"x":{"y":"Hello"}}。 9、Id和ObjectId()。ID为一个12字节24个16进制数字组成. 10、代码。{"x":function aa(){}}。 查询文档中可包含任意代码. 11、二进制。任意字节的字串,保存UTF8唯一方式 12、数组。{“brave” : [“pie”,3.14]} 可以包含不同类型元素,Mongodb能自动理解其结构,并操作内容 五、object _ID 生成的原理 机器如何保证ObjectId生成唯一 原理: 12字节 24位16进制数字组成 0|1|2|3|4|5|6|7|8|9|10|11 时间戳|机 器 |PID |计数器 模块一(前4): 从纪元开始时间戳,单位秒 模块二(5-7):机器名HASH 模块三(8/9):多线程ID号 模块四(后3):计数器 阀值: 256三次方ID/S [1]: http://blogimg.bravedu.com/2016/06/3645831305.png 赞 0 分享 赏 您可以选择一种方式赞助本站 支付宝扫码赞助 BraveDu 署名: 网络副手~寻路人