摘要:本文主要学习了数据库的定义和分类,以及MongoDB数据库的基本知识。
环境
Windows 10 企业版 LTSC 21H2
MongoDB 6.0.21
1 数据库
1.1 定义
数据库是按照数据结构来组织、存储和管理数据的仓库。
程序是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失。所以需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性。而数据库就是数据持久化的最佳选择。
比较简单的数据库就是类似LowDB这种使用文本存储的数据库,使用比较简单,单功能也比较有限。
1.2 分类
如果按数据模型分类,可以将数据库分为关系型数据库和非关系型数据库。
1.2.1 关系型数据库
通常适用SQL(Structured Query Language)表示。
以表格的形式组织数据,表格之间通过关系相连,使用SQL语言进行数据操作。
常见的数据库有:MySQL、Oracle、SQL Server、PostgreSQL等等。
适用于需要复杂查询和事务处理的场景,比如银行系统和企业资源规划系统等等。
1.2.2 非关系型数据库
通常使用NoSQL(Not only SQL)表示。
非关系型数据库根据存储形式不同还可以进一步分类。
1.2.2.1 键值存储数据库
以键值对的形式存储数据,键是唯一的,值可以是任意类型的数据。
常见的数据库有:Redis、Riak。
适用于需要快速读写操作的场景,比如缓存系统和会话存储。
1.2.2.2 文档型数据库
以文档的形式存储数据,文档可以是JSON和XML等格式,每个文档都是独立的。
常见的数据库有:MongoDB、CouchDB。
适用于需要灵活的数据结构和快速的读写操作,比如内容管理系统和实时分析系统。
1.2.2.3 列族数据库
以列族为单位存储数据,适合存储大量稀疏数据。
常见的数据库有:HBase、Cassandra。
适用于需要处理海量数据和高写入速率的场景,如物联网数据存储、日志分析。
1.2.2.4 图数据库
以图的形式存储数据,擅长处理实体之间的关系。
常见的数据库有:Neo4j、OrientDB。
适用于需要处理复杂关系的数据,如社交网络、知识图谱。
2 简介
2.1 概述
MongoDB是一种流行的开源文档型数据库,属于NoSQL数据库的一种。它以其灵活的数据模型、高性能和可扩展性而闻名,特别适合处理大量结构化和非结构化数据的应用程序。
官网网站:
2.2 特点
MongoDB数据库的特点如下:
- 高可用性:通过复制集(Replica Set)机制,实现数据的自动备份和故障转移。复制集由多个节点组成,包括一个主节点和多个从节点,数据在这些节点之间自动同步。
- 模式自由:使用动态模式(Schema-less)架构,同一集合中的文档可拥有不同属性,开发过程中可随时调整结构,减少迁移成本。
- 高性能:利用内存映射文件加速数据访问,支持多种索引类型(如复合、全文、地理空间)。
- 水平扩展:支持分片(Sharding)技术,允许将数据集拆分成多个部分,每个部分存储在不同的服务器上,从而提高系统的处理能力和存储容量。
- 复杂查询:支持复杂的查询表达式和操作符,包括聚合(Aggregation)、文本搜索(Text Search)和地理空间查询(Geospatial Queries)等,使得数据的检索和处理更加方便。
- 事务支持:在4.0版本后支持跨文档事务,满足一致性要求较高的场景,但需权衡性能。
- 多语言驱动:支持多种编程语言的驱动,比如Ruby、Java、C#、JavaScript、C、C++、PHP、Perl和Python等,方便开发者在不同的编程环境中使用。
2.3 术语
MongoDB使用BSON(Binary JSON)格式存储数据,是一种类似JSON的二进制形式的存储格式,具有更高的存储效率和处理速度。每个文档都可以包含不同数量和类型的属性,使得数据模型更加灵活。
MongoDB被称为“最像关系型数据库的NoSQL数据库”,其术语对比如下:
SQL术语 | SQL说明 | MongoDB术语 | MongoDB说明 |
---|---|---|---|
database | 数据库 | database | 数据库 |
table | 表 | collection | 集合 |
row | 行 | document | 文档 |
column | 字段 | field | 属性 |
index | 索引 | index | 索引 |
primary key | 主键 | primary key | 主键,默认将_id作为主键 |
数据库用于存储集合,集合用于合并文档,文档则是数据的基本单位,由键值对组成,类似于JSON对象。
在MongoDB中,数据库和集合都不需要手动创建,在创建文档时,如果文档所在的集合或者数据库不存在,则会自动创建数据库或者集合,不需要预先定义固定的模式,非常灵活。
2.4 业务场景
具体的应用场景:
- 社交场景,存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能。
- 游戏场景,存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问。
- 物流场景,存储订单信息,订单状态在运送过程中会不断更新,以内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
- 物联网场景,存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
- 视频直播,存储用户信息,点赞互动信息等。
这些应用场景中,数据操作方面的共同点有:
- 数据量大。
- 写入操作频繁。
- 价值较低的数据,对事务性要求不高。
在架构选型上,除了上述三个特点之外,还要考虑下面这些问题:
- 应用不需要事务及复杂JOIN支持。
- 应用需要快速迭代开发,数据模型无法确定。
- 应用需要2000-3000以上的读写QPS。
- 应用需要TB甚至PB级别数据存储。
- 应用需要快速水平扩展。
- 应用需要高可用,存储的数据不能丢失。
- 应用需要大量的地理位置查询,文本查询。
如果有1个符合,可以考虑使用MongoDB,如果2个及以上的符合,选择使用MongoDB绝不会后悔。
条