数据模型

简介: MongoDB 是一种基于文档的非关系型数据库,以 BSON 格式存储数据,兼具灵活性与高效性。支持丰富的数据类型和查询操作,具备高性能、高可用、易扩展等特点,适用于处理结构化与非结构化数据。

MongoDB的最小存储单位就是文档(document)对象。文档(document)对象对应于关系型数据库的行。数据在MongoDB中以BSON(Binary-JSON)文档的格式存储在磁盘上。

BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON。BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。 BSON采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。

Bson中,除了基本的JSON类型:string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括 date,object id,binary data,regular expression 和code。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详细信息。

BSON数据类型参考列表:

数据类型

描述

举例

字符串

UTF-8字符串都可表示为字符串类型的数据

{"x" : "foobar"}

对象id

对象id是文档的12字节的唯一ID

{"X" :ObjectId() }

布尔值

真或者假:true或者false

{"x":true}+

数组

值的集合或者列表可以表示成数组

{"x" : ["a", "b", "c"]}

32位整数

类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。

shell是不支持该类型的,shell中默认会转换成64位浮点数

64位整数

不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数

shell是不支持该类型的,shell中默认会转换成64位浮点数

64位浮点数

shell中的数字就是这一种类型

{"x":3.14159,"y":3}

null

表示空值或者未定义的对象

{"x":null}

undefined

文档中也可以使用未定义类型

{"x":undefined}

符号

shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串


正则表达式

文档中可以包含正则表达式,采用JavaScript的正则表达式语法

{"x" : /foobar/i}

代码

文档中还可以包含JavaScript代码

{"x" : function() { /* …… */ }}

二进制数据

二进制数据可以由任意字节的串组成,不过shell中无法使用


1.5 MongoDB的特点

高性能

MongoDB提供高性能的数据持久性。特别对嵌入式数据模型的支持减少了数据库系统上的I/O活动。

索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求、地理位置索引可用于构建各种 O2O 应用) mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求。 Gridfs解决文件存储的需求。

高可用性

MongoDB的复制工具称为副本集(replica set),它可提供自动故障转移和数据冗余。

高扩展性

MongoDB提供了水平可扩展性作为其核心功能的一部分。 分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展) 从3.4开始,MongoDB支持基于片键创建数据区域。在一个平衡的集群中,MongoDB将一个区域所覆盖的读写只定向到该区域内的那些片。

丰富的查询支持

MongoDB支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。

目录
打赏
0
0
0
0
11
分享
相关文章
知道什么是聚簇索引,什么是二级索引吗?
本文介绍了数据库中的聚簇索引与二级索引概念。聚簇索引将数据与索引存储在一起,每张表仅有一个,通常为主键索引。若无主键,则会选择非空唯一索引或自动生成rowID作为聚簇索引。二级索引则存储主键值,支持多条索引,用于加速查询过程。
|
18天前
|
MyBatis场景面试题
MyBatis与MyBatisPlus均属ORM框架,前者擅长复杂SQL及动态查询,后者封装API简化单表操作。常用XML标签如if、foreach提升SQL灵活性。MyBatis支持一级(SqlSession级)与二级(NameSpace级)缓存,提升查询效率。#{}防SQL注入,${}用于动态表名等场景。
143 62
谈谈建立数据目录的6个步骤
数据目录是所有数据的系统性列表,以表、文件、报告等形式存在于公司的各种源系统中。
谈谈建立数据目录的6个步骤
阿里云发布工业物联数智平台 三位一体快速构建未来工厂
在2022云栖大会IoT智能峰会上,阿里云IoT发布的工业物联数智平台主要由架构+系统+生态三层体系构成。
877 15
阿里云发布工业物联数智平台 三位一体快速构建未来工厂
IDEA 设置Java项目使用的JDK版本 最全篇
IDEA 设置Java项目使用的JDK版本 最全篇
1526 0
IDEA 设置Java项目使用的JDK版本 最全篇
Pytest系列(30)- 使用 pytest-xdist 分布式插件,如何保证 scope=session 的 fixture 在多进程运行情况下仍然能只运行一次
Pytest系列(30)- 使用 pytest-xdist 分布式插件,如何保证 scope=session 的 fixture 在多进程运行情况下仍然能只运行一次
375 0
Pytest系列(30)- 使用 pytest-xdist 分布式插件,如何保证 scope=session 的 fixture 在多进程运行情况下仍然能只运行一次
官宣!上汽奥迪和阿里云在一起了
上汽奥迪与阿里云宣布达成合作,合作内容涵盖全域营销、车联网、数字生态、智慧物流建设等领域。
406 0
官宣!上汽奥迪和阿里云在一起了
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问