mongodb知识点总结

还是为了那个搜索的自动化框架,在学习mongodb,记一下mongo的一些主要知识点。

##数据结构
1,键值队是有序的,有区分大小写的
2,集合是无模式的,可以存合法的任意类型的键值队文档
5,mongodb的数据很灵活,值可以是文档和数组
6,_id自动生成,但不是递增

1
2
0,1,2,3|4,5,6|7,8|9,10,11
时间戳 |机器 |pid|计数器

7,插入的数据转成bson,只验证是否有_id和文档数据有没有超过4mb就直接存入,这样允许插入无效数据,不过数据更安全,不执行代码,避免了注入的问题。
9,以数组为值的数据,有点像redis,可以pop和push(当成队列用)
25,固定集合,环形结构,会删除较早的数据。(用来存日志或缓存少量文档)
26,GridFS,mongodb中存大二进制的机制

  • 可以不使用独立的文件存储架构
  • 有自己的复制与分片机制,故障处理和扩展很容易。
  • 避免文件系统对存储的限制(文件数或大小)
  • 不产生磁盘碎片,文件以2GB为块

##使用
8,更新有覆盖和部分更新两种,更新有元子性,会分开执行,更新同一个数据,后到的实际生效。
10,不用修改文档大小的update速度快(如inc等 ),反之(push,改到大小的set)慢。
11,mongodb支持upsert(sava也很方便),这是一个元子操作,不存在则创建。可以省去一步查询。
12,mongodb插入修改数据默认是不等待结果返回的,除非使用安全操作。调试要使用安全操作。
14,不能使用变量做查询条件,如{“state”:”status”}
15,查询条件支持正则表达试
16,取出数据,修改后写回,最好使用快照
17,数据库游标操作。注意销毁。
18,explain( 查询信息,扫描数等 )和hint(强制使用指定索引)
19,地理位置索引
21,distinct,返回给定键的不同值,可以用来去重
30,数据库引用DBRef,用来访问可以确定的唯一文档。可以实现跨集合访问

##mapreduce和分布式
22,MapReduce可以实现包含count,distinct,group的整合功能,MapReduce速度比group更慢,不能用在实时环境中

  • <1>,映射(map)到集合中的每个文档(无作为或产生键和值)
  • <2>,洗牌(shuffle),按键分组,将产生的键值组成列表,放到对应的键中
  • <3>,化简(reduce),将列表中的值化简为单个值,这个值被返回
  • <4>,再执行第二步,直到所有键的列表都只有一个值为止

23,MapReduce支持key:finalize,keeptemp,output,query,sort,limit,scope(作用域),verbose
35,副本集,会自动切换的备份,活跃节点故障会与备份节点功能互换

  • standard:常规节点,有完整的数据副本,可成为活跃节点
  • passive:被动节点,可以参与活跃节点的选举,但不能成为活跃节点
  • arbiter:仲裁者,只参与投票,不复制数据也不能成为活跃节点

36,主从分离时,从节点是复制但不同步,也就是有一小段时间,从节点上不是最新的
37,数据库自动分片,自动做负载均衡。新加入片,mongodb会对原有的数据做切分

##shell命令
3,mongodb shell, 可以通过脚本执行管理,检查等操作
24,mongodb命令行的背后是runCommand(“命令的文档”),命令是一种特殊的查询
27,mongodb与javascript结合,可以用db.eval执行js脚本,也可以将js脚本存到数据再调用,很灵活
28,system.js可以存储全局变量

##安全
31,账户管理,adduser也可以用做修改用户权限
32,mongodb传输协议默认是不加密的,如需加密,可以用ssh或类似的技术做客户端和服务端的加密
33,可以通过–nohttpinter-face启动参数关闭http后台,–noscripting禁止js脚本执行
29,mongodb的注入是通用js实现的。主要是在处理字符串的时候。使用new MongoCode来避免

##文件系统
34,备份相关,mongodump,mongorestore,fsync锁(内部命令)
38,内部存储使用bson,效率,可遍历性和编解码性能都不错,特别是存储二进制文件或大数,比json好
39,数据库文件,单文最大为2G,文件空间为预先分配,不够用了再加倍,直到2G
40,内存映射存储引擎,将内存调度交给操作系统。(调用系统的文件读写模块,系统会处理文件缓存)
不能控制数据写入到磁盘的顺序。每个32位的mongod只能处理2GB数据

##其他
13,mongodb连接池