一.数据库的分类
目前的数据库主要分为关系型数据库和非关系型数据。
关系型数据库:
- 通过SQL结构化查询和存储语句,最常见的就是Oracle和MySQL
- 保持数据一致性理论,遵循ACID原理
非关系型数据库:
- Not Only SQL,是对不同于传统的关系型数据库的数据库管理系统的统称,典型产品memcached (纯内存),redis(持久化缓存),mongodb(文档的数据库)
- 用于超大规模数据的存储,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展
- CAP定理 ,高性能,高可用性和可伸缩性
二.MongoDB的概念
MongoDB是一个开源文档数据库(Document Database),其具有高性能、高可用性和自动缩放的特性。
1.主要特性
高性能
MongoDB具有高性能的数据存储功能。尤其是下面两方面:
- 对嵌入式数据模型的支持减少了数据库系统的I/O交互
- 文档和数据的键可以建立索引,提高查询效率
丰富的查询语言
MongoDB提供丰富的查询语言,除了支持增删改查(CRUD)操作,还支持以下操作:
- 数据聚合
- 文本搜索和地理空间搜素
高可用性
MongoDB的复制工具,也称为副本集,有如下特点:
- 自动的故障转移机制
- 数据备份
水平扩充
MongoDB的核心功能之一就是水平可扩展:
- 通过分片将数据分布在集群机器中
- 从3.4开始,MongoDB支持基于碎片键创建数据区域。在一个平衡的集群中,MongoDB只将区域覆盖的读写定向到区域内的碎片。有关更多信息,请参阅区域手册页
支持多存储引擎
- WiredTiger存储引擎(包括对静止加密的支持)
- 内存存储引擎
- MMAPv1存储引擎(MongoDB 4.0弃用)
2.文档、集合和数据库的概念
文档:
文档是基本单位,类似于关系数据库中的行,比行稍微复杂。多个键值对有序的放在一起就构成了文档。格式如下:
{“name”: “mongo”, “value”: “hello”}
key: 必须为字符串类型。
value:可以包含如下类型。
● 基本类型,例如,string,int,float,timestamp,binary 等类型。
● 一个document。
● 数组类型。
使用文档的优势:
- 在许多编程语言中,文档对应其本地的数据类型
- 嵌入式的文档和数组减少了数据连接的代价
- 动态模式的支持使其灵活多变
集合:
集合就是一组文档,类似于关系数据库中的表,但是可以存储不同结构的文档。例如,{“hello,word”:“Mike”}和{“foo”: 3},它们的键不同,值的类型也不同,但是它们可以存放在同一个集合中,也就是不同模式的文档都可以放在同一个集合中。
数据库:
多个文档构成集合,多个集合构成数据库。一个Mongo实例可以承载多个数据库,数据库之间可以看做相互独立,它们有独立的权限控制。在磁盘上,不同的数据库存放在不同的文件中。
参考链接:
https://docs.mongodb.com/manual/introduction/