抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文主要学习了数据库的定义和分类,以及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绝不会后悔。

评论