第一章 mongodb 基础知识
前言
从DB-Engines 网站来看,mongodb 历年得分数据呈现持续增长的趋势,最两年来看总排名在前5名左右,从如下图所示:
!](https://img-blog.csdnimg.cn/786efedcab3440ea9bcd78527039b1ce.png#pic_center)
一、mongodb是什么?
mongodb 是一款基于文档的 NoSql的分布式文档数据库,在高性能、动态扩缩容、高可用、易部署、易使用、海量数据存储、高压缩比等方面拥有天然优势。虽然 mongodb 有很多优势,但是在国内缺存在不少的误解,影响力有待提升。
二、基础知识
MongoDB 的核心特性是:No Schema、高可用、分布式(可平行扩展),另外 MongoDB 自带数据压缩功能,使得同样的数据存储所需的资源更少。本节将会依次介绍这些特性的基本知识,以及 MongoDB 是如何实现这些能力的。
1.No Schema
MongoDB 是NoSQL文档型数据库,其文档是由 BSON(Binary Serialized Document Format) 是类 JSON 的二进制存储格式组成的,访问方式和数据结构完全和 JSON 一样。支持动态的添加字段、支持内嵌对象和数组对象,同时它也对 JSON 做了一些扩充,如支持 Date 和 BinData 数据类型。正是 BSON 这种字段灵活管理能力赋予了 Mongo 的 No Schema 或者 Schema Free 的特性。
No Schema 特性带来的好处包括:
- 强大的数据结构表现能力:对象嵌套和数组结构可以让数据库中的对象具备更高的表现能力,能够用更少的数据对象表现复杂的领域模型对象。
- 便于开发和快速迭代:灵活的字段管理,使得项目迭代新增字段非常容易
- 降低运维成本:数据对象结构变更不需要执行 DDL 语句,降低 Online 环境的数据库操作风险,特别是在海量数据分库分表场景。
MongoDB 在提供 No Schema 特性基础上,提供了部分可选的 Schema 特性:Validation。其主要功能有包括:
- 规定某个 Document 对象必须包含某些字段
- 规定 Document 某个字段的数据类型
- 规定 Document 某个字段的取值范围:可以是枚举 i n 或者正则 in或者正则 in或者正则regex
下面可以通过以下例子举例说明:
db.createCollection("saky_test_validation",{validator:
{
$and:[
{name:{$type: "string"}},
{status:{$in:["INIT","DEL"]}}]
}
})
db.createCollection("saky_test_validation", {
validator: {
$jsonSchema: {
bsonType: "object",
required: [ "name", "status", ],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
status: {
enum: [ "INIT", "DEL"],
description: "can only be one of the enum values and is required"
}
} }})