MongoDB 简介

1. 易于使用:没有固定的模式,根据需要添加和删除字段更加容易

2. 易于扩展:MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易的再多台服务器之间进行分割。自动处理跨越集群的数据和负载,自动重新分配文档。

以及将用户请求路由到正确的机器上。

3. 丰富的功能:索引,聚合,特殊的集合类型(过期,固定大小的集合),文件存储。

4. 卓越的性能

MongoDB基础知识

1. 文档:文档就是键值对的一个有序集。

 1). MongoDB不但区分类型,而且区分大小写。

2). 文档中的键值对是有序的:{"x":1,"y":2}与{"y":2,"x":1}是不同的。

2. 集合:集合就是一组文档

1). 集合是动态模式的。这意味着一个集合里面的文档可以是各式各样的。

2). 集合命名:不能包含"system.",不能有保留字符'$'

3). 子集合:组织集合的一种管理是使用"."分割不同命名空间的子集合。很多MongoDB工具类都使用了子集合。在MongoDB中使用子集合来组织数据非常高效,值得推荐。

3. 数据库:在MongoDB中,多个文档组成集合,而多个集合可以组成数据库。

1). 数据库名区分大小写,即便是在不区分大小写的文件系统中也是如此。简单起见,数据库名应该全部小写。

 2). 数据库最终会变成文件系统里的文件,而数据库名就是相对应的文件名。

3). 保留数据库:

admin: 如果将一个用户添加到admin数据库,这个用户将自动获取所有数据库权限。再者,一些特定的服务器命令也只能从admin数据库运行,如列出所有数据库或关闭服务器。

local: 这个数据库永远不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。

config:MongoDB用于分片设置时,分片信息会存储在config数据库中。

4). 把数据库名添加到集合名前,得到集合的完全限定名,即命名空间。命名空间的长度不得超过121字节,且在实际使用中应小于100字节。

4. shell中的基本操作

1). insert

2). find和findOne

 3). update , 至少两个参数,第一个是限定条件(用于匹配待更新的文档),第二个是新的文档

    4). remove , 永久删除,如果没有任何参数,它会删除所有文档

5. 数据类型

1). 基本类型:null({"x":null}) , 布尔型 , 数值 ,字符串,日期({"x":new Date()} 日期被存储为自新纪元已经过的毫秒,不存储时区),正则表达式,数组,内嵌文档,对象id,

二进制数据,代码

    2). ObjectId是"_id"的默认类型。ObjectId的12字节按照如下方式生成:时间戳  机器  PID 计数器

    3). 如果插入文档时没有"_id"键,系统会自动帮你创建一个。可以由MongoDB服务器来做这件事,但通常会在客户端由驱动程序完成。

6. 使用MongoDB shell 

 1). 在启动shell时指定机器名和端口,就可以连接到一台不同的机器: mongo some-host:30000/myDB           //    IP:port/dbname

    2). 启动mongo shell 时不连接到任何mongod有时很方便。通过--nodb参数启动shell,启动时就不会连接任何数据库:mongo --nodb 

启动之后,在需要时运行new Mongo(hostname)命令就可以连接到想要的mongod了: conn = new Mongo("some-host:30000") , 然后执行 db=conn.getDB("myDB")

3). 对应MongoDB 特有的功能,shell内置了帮助文档,可以使用help命令查看:help

4). 可以通过db.help()查看数据库级别的帮助,使用db.foo.help()查看集合级别的帮助

5). 直接在shell中输入函数名(函数名后不要输入小括号),这样就可以看到相应的JS实现代码。

7. 使用shell执行脚本

1). 直接在命令中传递脚本:mongo  s1.js   s2.js

2). 如需在指定的主机或端口上执行脚本,需指定地址和脚本名称:mongo --quiet server-1:30000/foo s1.js   s2.js

3). 使用load函数:load("s1.js")

4). 可以使用脚本将变量注入到shell

8. 创建.mongorc.js 文件

1). 如果某些脚本会被频繁的加载,可以将它们添加到mongorc.js 文件中。这个文件会在 启动shell时 自动运行。

2). .mongorc.js最常见的用途之一是移除那些比较"危险的函数"。可以在这里集中重写这些方法。这种方式并不能保护数据库,只能预防自己手误。

9. 定制shell提示

通常来说,提示函数中应该包含对getLastError的调用。这样可以捕获数据库错误,而且可以在shell断开时自动重连。

10. 编辑复合变量

1). shell不可以编辑之前的行。对于大块的代码或者对象,你可能更愿意在编辑器中编辑。为了方便地调用编辑器,可以在shell中设置EDITOR变量(也可以在环境变量后总设置)。

EDITOR="/usr/bin/emacs"

现在编辑一个变量,可以使用"edit 变量名"这个命令。修改完后,保存并退出编辑器。变量就会被重新解析然后加载会shell。

2). 在.mongorc.js文件中添加一行内容,EDITOR="编辑器路径";,以后就不用单独设置EDITOR变量了。

11. 集合命名注意事项:

      1). 可以使用db.collectionName获取一个集合内容,但是如果集合名称中包含保留字或者无效的JS属性名,db.collectionName就不能正常工作了。

 2). 访问一些包含保留字或者无效的JS属性名的集合可以使用:db.getCollection("collectionName")

      3). 数组访问法

启动和停止MongoDB

1. 启动MongoDB

1). 执行mongod程序可启动MongoDB服务器,mongod在启动时可使用很多可配置的选项,在命令行中运行mongod --help可列出这些选项。

2). mongod 常用配置选项:

--dbpath : 使用此选项可以指定一个目录为数据目录。需要启动前建立好目录。mongod启动时,会在其数据目录中创建一个mongod.lock文件,以阻止其他mongod进程使用该目录。

--port : 指定服务器监听端口。默认27017。

--fork : 启动此选项以调用fork创建子线程,在后台运行MongoDB。启用--fork选项时,必须同时启用--logpath选项。

--logpath:使用此选项,所有输出信息会被发送到指定文件,而非在命令行上输出。文件不存在就新建,如果存在覆盖。如需保留旧日志,需启动时再增加选项--logappend选项。

--directoryperdb:启动该选项可将每个数据库存放在单独的目录中。

--config:额外加载配置文件。该选项通常用于确保每次重新启动时的选项都是一致的。

举例:./mongd  --port 5586 --fork --logpath mongodb.log --logappend

 3). 首次安装启动MongoDB时,应查看一下日志,看看都会有哪些警告。

4). 使用配置文件,启动命令:./mongod --config  mongodb.conf

配置文件内容举例:

  1. # 这里可以写注释
  2. port=5586
  3. fork=true # 后台启动
  4. logpath=/var/log/mognodb.log
  5. logappend=true

2. 停止MongoDB

1). 使用shutdown命令--{"shutdown":1}

2). shell提供了一个辅助函数,用以简单执行shutdown命令:db.shutdownServer()

3). 可使用force选项,强制关闭主节点:db.adminCommand({"shutdown":1,"force":true})

4). kill -2 pid 或者 kill pid

    5). 在主节点上运行shutdown命令时,服务器在关闭前,会等待备份节点追赶主节点以保持同步。这将回滚的可能性降至最低,但shutdown操作有失败的可能。如果几秒内没有

         备份节点成功同步,则shutdown操作失败,主节点亦不会停止运行。可以使用force选项,强制关闭主节点。这相当于发送一个SIGINT或者SIGTERM信号(几种做法都能使

         MongoDB安全地停止运行,但可能会有数据未能完成同步)。如服务器正在终端作为前台进程运行,那么按下Ctrl+C快捷键也能发送一个SIGINT信号。另外,kill之类的命令,

         也可以用于发送这些信号。假设mongod的PID为10014,那么相应的命令就是kill -2 10014(发送SIGINT信号)或kill10014(发送SIGTERM信号)

    6). mongod收到SIGINT或者SIGTERM信号后,会安全地停止运行。这意味着mongod会等当前正在进行的操作或者文件预分配结束(耗时一定时间),再关闭所有打开的连接,将

         缓存写入硬盘,继而结束运行。但不会等待备份节点追赶上主节点。

3. 安全性

 1). 最好的方式是设置防火墙,只允许内部网络地址对MongoDB的访问。

2). --bind_ip : 指定MongoDB监听的接口。我们通常将其设置为一个内部IP地址,从而保证应用服务器和集群中的其他成员访问,同时拒绝外网访问。

3). --nohttpinterface : 关闭默认启动的微型HTTP服务器

4). --nounixsocket : 禁用UNIX socket 来进行连接。

5). --noscripting : 禁用服务器端JavaScript脚本的运行。可能会引起一些辅助函数失效。

6). 数据加密和SSL安全连接

4. 日志

1). MongoDB会输出大量日志消息,但请不要使用--quiet选项(该选项会隐藏部分日志消息)。保持日志级别为默认值通常不错,此时日志中有足够的信息进行基本调试(如耗时

过长或启动异常的原因等)。调试应用某特定异常问题时,可以使用一些选项从日志中获取更多信息。

 2). 在重启MongoDB时,可通过在参数中附加数据更多的"v"(即:-v,-vv,-vvv,-vvvv,-vvvvv) 或者运行setParameter命令,完成日志级别(log level)的更改。

db.adminCommand({"setParameter":1,"logLevel":3})

记得将日志级别重设为0,否则日志中会存在过多不必要内容。日志级别调高到5时,mongod会在日志中记录几乎所有操作,包括每一个请求所处理的内容。如果记录所有

         内容,会产生大量的磁盘读写操作(IO),可能会拖慢系统运行。

3). 如需即时看到正在运行的所有操作,打开分析器不失为一个更好的方法。

4). MongoDB默认记录耗时100毫秒的查询,可以通过setProfilingLevel命令来更改次阈值。

5). 设置一个计划任务以便每天或者每周分割日志文件。如果使用--logpath选项启动MongoDB,以进程发送一个SIGUSR1信号即时其对日志进行分割。也可以使用logRotate

命令达到相同目的:db.adminCommond({"logRotate":1})

Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB的更多相关文章

  1. 《Programming Hive》读书笔记(两)Hive基础知识

    <Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...

  2. tensorflow笔记(一)之基础知识

    tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...

  3. php面试笔记(5)-php基础知识-自定义函数及内部函数考点

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...

  4. php面试笔记(3)-php基础知识-运算符

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而运算符相关的考 ...

  5. Linq的简介和基础知识学习

    学习LINQ之前,我们要知道LINQ是干什么,解决什么问题的,怎样学习? 一.LINQ简介 1.什么是LINQ? 什么是LINQ?LINQ中文翻译为语言集成查询(Language Integrated ...

  6. mac系统下安装、启动、停止mongodb

    mongodb是非关系型数据库,mysquel是关系型数据库,前者没有数据表这个说法,后者有 一. 下载nodejs,安装,一直到 node -v显示版本号,表示安装成功. 二. 本文主要讲解,安装包 ...

  7. php面试笔记(2)-php基础知识-常量和数据类型

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...

  8. MOGRE学习笔记(2) - MOGRE基础知识总结

    前一篇配置了MOGRE的运行环境,这里记录一些MOGRE基础知识,仅仅是最基础的一些东西.由于本人接触ogre的时间比较短,对于很多知识都是一知半解,所以理解起来不免会有一些错误,本人也希望自己在对o ...

  9. C++入门笔记(一)零碎基础知识

    零碎基础知识 一.创建和运行程序 1.使用文本编辑器编写程序,保存为文件,该文件就叫源代码. 2.编译源代码:运行一个程序,将源代码翻译为主机使用的内部语言----机器语言.包含了 编译后程序的文件就 ...

随机推荐

  1. bata4

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组 ...

  2. 软工网络15团队作业4——敏捷冲刺日志的集合贴(Alpha阶段)

    Alpha阶段 第 1 篇 Scrum 冲刺博客 第 2 篇 Scrum 冲刺博客 第 3 篇 Scrum 冲刺博客 第 4 篇 Scrum 冲刺博客 第 5 篇 Scrum 冲刺博客 第 6 篇 S ...

  3. 设置session的过期时间

    1)修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了 session.gc_maxlifetime = 86400 然后,重启你的web服务(一般是apa ...

  4. Android Holo Theme的三种表现形式

    摘录自:http://blog.csdn.net/xyz_lmn/article/details/12000941 Holo Theme的三种表现形式 Holo Theme是android4.0开始提 ...

  5. ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))

    终于讲到反演定理了,反演定理这种东西记一下公式就好了,反正我是证明不出来的~(-o ̄▽ ̄)-o 首先,著名的反演公式 我先简单的写一下o( ̄ヘ ̄*o) 比如下面这个公式 f(n) = g(1) + g ...

  6. windows结束端口对应的进程

    netstat -ano |findstr " //window查看端口占用 taskkill /pid 54828taskkill /F /pid 54828 //强制中止 转载请注明博客 ...

  7. Java中线程安全的集合

    如果多线程并发的访问与一个数据结构,那么很容易破坏一个数据结构. 例如,一个线程可能要向一个散列表中插入一条数据的过程中,被剥夺了控制权.如果另外一个线程也开始遍历同一个链表,很可能造成混乱,抛出异常 ...

  8. Opera官网打不开 下载Opera最新版本的实际地址

    目前Opera官网可以打开,但是点下载时就会出错,国内无法访问Opera的下载地址,无法通过官网直接下载Opera浏览器.下面提供下载的方式. 一.通过官方的ftp站点下载 FTP地址为 http:/ ...

  9. ACdream1093

    给你三种正多面体,正四面体,正六面体,正八面体.求从某一种正多面体中的某一点走到另一个点,且步数不超过k(1018)的方案数. 首先说明一下我交题的时候遇到的问题,起点和终点为同一点的时候,算不算走了 ...

  10. java 循环时候当达到这个类型的极值时 会停止输出