MongoDB appendix
- mongo 是数据库shell。一般假定它和mongod 运行在同一台机器上,还假定mongod 绑定了默认端口。 eg. mongo staging.example.com:20000,这样就会连接运行在staging.example.com上端口为20000的mongod。 eg. mongo localhost:27017/admin, 连接本地默认端口的mongod,使用admin数据库(默认使用test数据库)。 eg. mongo --nodb, 启动shell而不连接数据库。
- 从shell可以连接任意多个数据库。eg. mongos = connect("localhost:27017") ,connecting to :localhost:27017 ; shard0 = connect("localhost:30000") , connecting to: localhost:30000; shard1 = connect("localhost:30001"), connecting to: localhost: 30001; 随后,mongos、shard0、shard1可以作为db变量使用。
- mongod 核心的数据库服务器。可以作为单个服务器,主从节点、副本集的成员,还可以做片。通常就是所需要的mongoDB进程。
- BSON:mongoDB的文档是个抽象概念。其具体的呈现形式取决于所用的驱动和编程语言。 因为mongoDB中的通信大量依赖于文档,所以需要一种所有驱动、工具、进程都能共享的文档表达方式。这种表达方式叫BSON(Binary JSON)。
- BSON 是一种轻量的二进制格式。能将mongodb的所有文档表示为字节字符串。数据库能理解BSON。存在磁盘上的文档也是这种格式。
- 当驱动要插入文档,或是将文档作为查询条件,驱动会将文档转换为BSON,然后发往服务器。
- 同样,返回客户端的文档也是BSON格式的字符串。驱动需要将这些数据解码,变成本机的文档表示。最后返回给客户端。
- BSON效率高(更有效的表示数据、占用空间少)、可遍历性(字符串前面加入字符串长度)强、性能好(编码和解码速度快)。
- mongodb 的数据目录中,每个数据库都有几个独立的文件。一个.ns文件和若干个数据文件,数据文件以递增的数字结尾。每个新的以数字结尾的数据文件大小会加倍。
- 在数据文件内部,每个数据库都是按命名空间组织的。一种类别的数据和其它类别的分开存放。 每个集合的文档都有自己的命名空间。索引也是。命名空间的元数据存放在数据库的.ns 文件中。
- 存储引擎:mongodb默认的存储引擎是内存映射引擎。
- 当服务器启动时,将所有数据文件映射到内存。 然后由操作系统负责将缓冲数据写入磁盘,并将数据调入调出内存页面。 这样的引擎有若干特征:
- mongodb 服务器进程的虚拟大小通常会很大。超过了整个数据集的大小。这没有关系,因为操作系统会处理让哪些数据常驻内存。
- mongodb不能控制写入到磁盘的顺序。
- 32位的mongodb服务器有个限制,每个mongod 最多只能处理2GB数据。因为所有数据必须能用32位地址空间访问到。
- mongodb管理内存的代码非常精炼。因为大部分工作给了操作系统。