Mongodb三元素:文档、集合、数据库。
- 文档——类似行
多个键值对有序的放置一起就是文档。键不能重复。
{“name”:“jack”,“age”:20}。
键不能含有\0(空字符),。$是被保留的字符。以_开头的键是保留的。不但区分类型还区分大小写。以下文档是不同的:
{“foo”:3}、{“foo”:“3”}、{“Foo”:3}
注:通常文档中键的顺序并不重要。
- 集合——类似表,一组文档
集合是无模式的,可以定义各种各样的文档。不过最好是将相关的文档定义在一个文档,而不是只使用一个文档。
集合命名:不能是空字符串、不能含有\0、不能以system开头、不能含有保留字符$。
“。”字符分开按命名空间划分的子集合。db。blog 、 db。blog。posts。
- 数据库——多个集合组成
一个实例可以有多个数据库,可视为完全独立的,各自都有独立的权限控制,存储在不同的数据文件中。可将一个应用的所有数据都存放在同一个数据库中。
数据库命名:不能是空字符、不得含有‘’(空格)、。、$、/、\、\0、应该全部小写、最多64个字节。其最终变成文件系统里面的文件。
保留的数据库:
admin:“root”数据库. 添加到这个数据库的用户具有所有的权限。
local:不会被复制,可存储限于本地单台服务器的任意集合。
config:当Mongo 用于分片设置时,其在内部使用,用于保存分片相关信息。
命名空间:数据库。集合 admin。blog。posts 其长度不能超过121个字节,实际使用中小于100个字节。
MongoDB Shell :
自带一个javascript shell。可以从命令行与Mondodb实例交互。使用shell之前要确保启动mongod。启动参见(学习笔记1)。shell功能具有完备的javascript解释器,可以运行任何javascript程序。如下图所示:
但是shell真正的威力在于它是一个独立的mongodb客户端。启动时 ,shell会连接到test数据库,并将这个数据库连接连接赋值给全局变量db——是通过shell访问Mongodb的主要入口点。
shell 还具有非javascript语法的扩展。最重要的操作是,可以选择要使用的数据库:( 因为其是一个javascript shell ,因此输入一个变量会将变量的值转换为一个字符串并打印出来)
简介
- 丰富的数据模型
Mongdb是面向文档的数据库,而非关系型的数据库。基本思路:将原来的"row(行)"换成"document(文档)"模型。将文档或者数组内嵌起来,用一条记录就可以表示非常复杂的层次关系。 Mongodb没有模式:文档的键不会事先定义也不会固定不变。由于没有模式需要更改,通常不需要迁移大量数据。
- 容易扩展
采用面向文档的数据模型使其可以自动在多台服务器之间分割数据,还可以平衡集群的数据和负载,自动重排文档。要是需要更大的容量。只需在集群中添加新机器,然后让数据库来处理剩下的事情。
- 丰富的功能
- 索引——支持通用辅助索引,能进行多种快速查询,也提供唯一的、符合的和地理空间索引能力。
- 存储JavaScript——不需要存储过程,直接在服务器端存取JAvascript的函数和值。
- 聚合——支持MapReduce和其他聚合工具。
- 固定集合——集合的大小是用上限的,对某些类型的数据(日志)特别有用。
- 文件存储——支持一种容易使用的协议存储大型文件和文件的元数据。
其不具备关系数据库的常见功能,如jion和复杂的多行事物。因为这两个功能很难在一个分布式系统上实现。
- 不牺牲速度
使用Mongodb传输协议作为与服务器交互的主要方式、对文档进行动态填充、预分配数据文件、使用内存映射文件管理内存、动态查询优化器会“记住”执行查询最高效的方式等。
- 简便的管理
除了启动数据库服务器之外,几乎没有什么必要的管理操作。如有主服务器挂掉,就自动切换到备份服务器,并且将备份提升为活跃服务器。在分布式环境下,集群只需要知道有新增加的节点,就会自动集成和配置新节点。