MongoDB 概念解析

基本概念

MongoDB 和 SQL 的概念区别

SQL 术语 MongoDB 术语 解释
database database 数据库
table collection 表/集合
row document 行/文档
column field 字段或列/域
index index 索引
table joins 表连接/不支持
primary key primary key 主键/MongoDB字段将_id字段设置为主键

数据库

一个 mongoDB 中(单个实例)可以建立多个数据库

默认数据库为 db,该数据库存储在 data 目录中

# 显示所有数据库列表
show dbs

# 显示当前数据库
db

# 连接到指定数据库(这里是连接到数据库local)
use local

数据库名称要求:

  • 不能是空字符串
  • 不得含有空格,点.,美元符号$,正反斜杠/\和空字符\0
  • 应该全部小写
  • 最多64字节
  • 保留的特殊数据库
    • admin
    • local
    • config

文档

文档是一组键值对:key-value(BSON),需要注意以下几点:

  • 键值对是有序的
  • 区分类型和大小写
  • 不能有重复的键
  • 键是字符串
  • 命名规范:
    • 不能含有空字符\0,这个字符用于表示键的结尾
    • . 和 $ 都有特别的意义,只有在特定环境下才能使用
    • 以下划线 _ 开头的键是保留的

集合

集合即文档组,一个集合当中有着多个文档

如果说文档类似于 SQL 的行,那么集合就类似 SQL 中的表格

集合名称同样不能包含空字符串和空字符,并且不能以 system. 开头

capped collections 一种特殊的集合

Capped collections 就是固定大小的collection。

它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。

Capped collections 是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能和标准的 collection 不同,你必须要显式的创建一个capped collection,指定一个 collection 的大小,单位是字节。collection 的数据存储空间值提前分配的。

Capped collections 可以按照文档的插入顺序保存到集合中,而且这些文档在磁盘上存放位置也是按照插入顺序来保存的,所以当我们更新Capped collections 中文档的时候,更新后的文档不可以超过之前文档的大小,这样话就可以确保所有文档在磁盘上的位置一直保持不变。

由于 Capped collection 是按照文档的插入顺序而不是使用索引确定插入位置,这样的话可以提高增添数据的效率。MongoDB 的操作日志文件 oplog.rs 就是利用 Capped Collection 来实现的。

要注意的是指定的存储大小包含了数据库的头信息。

# 创建一个 capped 集合
db.createCollection("mycoll",{capped:true,size:100000})
  • 可以添加新的对象
  • 可以进行更新,然而对象不会增加存储控件
  • 不能删除其中的一个文档,但可以使用 drop() 方法删除 collection 的所有行
  • 删除之后必须显式的重新创建这个 collection

元数据

数据库的信息存储在集合中,他们使用了系统的命名空间:

dbname.system.*
集合命名空间 描述
dbname.system.namespaces 列出所有名字空间。
dbname.system.indexes 列出所有索引。
dbname.system.profile 包含数据库概要(profile)信息。
dbname.system.users 列出所有可访问数据库的用户。
dbname.local.sources 包含复制对端(slave)的服务器信息和状态。

数据类型

数据类型 描述
String 字符串,存储数据常用的数据类型,应当使用UTF-8
Integer 整型数值
Boolean 布尔值
Double 双精度浮点型
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。(???)
Array 数组
Timestamp 时间戳
Object 内嵌文档
Null 创建空值
Symbol 符号,大致等同字符串,但一般用于采用特殊符号类型的语言
Date 日期
Object ID 用于创建文档的ID
Binary Data 二进制数据
Code 代码类型,用于存储JS代码
Regular expression 正则表达式

ObjectId

类似唯一主键,包含 12 bytes,可以很快的生成和排序:

  • 前 4 个字节:创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚 8 小时
  • 之后 3 个字节:机器标识码
  • 之后 2 个字节:进程 id 组成 PID
  • 之后 3 个字节:随机数

MongoDB 存储的文档必须有一个 _id 键,值可以是任何类型,默认是 ObjectId

BSON 时间戳

主要用于 MongoDB 内部,余普通的日期类型不相关,共 64 位,前 32 位是一个 time_t 值,后 32 位是在某秒中操作的一个递增的序数;在复制集中,oplog 有一个 ts 字段,这个字段中的值使用 BSON 时间戳表示了操作时间

日期

正数表示当前距离 Unix 新纪元(1970 年 1 月 1 日)的毫秒数,负数代表之前

# 时间格式
> var mydate1 = new Date()     //格林尼治时间
> mydate1
ISODate("2018-03-04T14:58:51.233Z")
> typeof mydate1
object

> var mydate2 = ISODate() //格林尼治时间
> mydate2
ISODate("2018-03-04T15:00:45.479Z")
> typeof mydate2
object

# js Date 类型的方法
> var mydate1str = mydate1.toString()
> mydate1str
Sun Mar 04 2018 14:58:51 GMT+0000 (UTC) 
> typeof mydate1str
string

# 函数输出
> Date()
Sun Mar 04 2018 15:02:59 GMT+0000 (UTC)   
posted @ 2021-11-03 10:09  景北斗  阅读(45)  评论(0编辑  收藏  举报