目录
2.1 MongoDB:面向文档的灵活存储
2.1.1 MongoDB基础与架构
2.1.1.1基本概念
2.1.1.2MongoDB安装与配置
1)安装MongoDB-Linux安装示例(以Ubuntu为例)
2)更新包列表并安装MongoDB
3)启动MongoDB服务
4)使用MongoDB Shell
2.1.1.2架构设计
1)主从复制配置示例
2)分片配置示例
2.1 MongoDB:面向文档的灵活存储
MongoDB是一种开源的、基于分布式文件存储的数据库系统,以其灵活的数据模型、高性能、易扩展性著称。它属于NoSQL数据库的一种,特别适合处理大规模、低延迟的数据存储需求,尤其在处理半结构化和非结构化数据方面表现卓越。MongoDB采用面向文档(BSON)的数据模型,每个文档都是由键值对组成的,这使得数据的存储和查询更为直观和灵活。
2.1.1 MongoDB基础与架构
2.1.1.1基本概念
MongoDB的设计哲学深受现代web应用和分布式系统的需求影响,提供了一种灵活、强大且易于理解的数据模型,使得数据存储和处理更加适应复杂多变的业务场景。下面是对几个核心概念的详细阐述:
1)文档(Document)
文档是MongoDB中最基本的数据结构单元,相当于关系型数据库中的一行记录。但与传统数据库不同,MongoDB的文档不是严格固定的表格结构,而是采用类似JSON(JavaScript Object Notation)的对象格式,称为BSON(Binary JSON)。BSON不仅支持字符串、数字、布尔值等基本数据类型,还支持数组、嵌套文档等复杂数据结构,这使得文档能够自然地表示现实世界中的复杂对象和关系。例如,一个用户文档可能包含姓名、年龄、邮箱等基本信息,同时还嵌套有地址(包括街道、城市、国家等)这样的复杂属性。
2)集合(Collection)
集合是一组文档的集合,可以将其类比为关系数据库中的表,但具有更高的灵活性。在MongoDB中,集合不需要预先定义其结构或列,意味着可以随时向文档中添加新的字段,而不会影响到集合中其他文档的结构。该模式被称为“模式自由”(schema-free),极大地提高了数据模型的灵活性和适应性。但在实际应用中,为保持数据的一致性和便于查询优化,通常会为集合设计一个松散的模式指导文档的结构。
3)数据库(Database)
数据库是MongoDB中用于存储集合的容器。与关系数据库相似,MongoDB允许创建多个数据库来组织和隔离数据。每个数据库都有独立的权限控制和命名空间,使得不同项目或应用可以在同一个MongoDB实例中运行而不互相干扰。数据库名称必须是UTF-8编码,且不能是空字符串,同时,".", "$", 和空字符(空格、制表符等)不允许出现在数据库名称中。使用use <database_name>命令可以切换到指定的数据库进行操作。
MongoDB凭借其灵活的数据模型,允许文档结构随需求动态调整,无需预设字段类型,高度契合快速迭代和数据结构多变的应用场景,展现出卓越的灵活性。集合(Collection)作为文档的集合体,实现模式自由,动态适应数据结构的变化,实践中常辅以松散模式指导以维护数据一致性和查询效率。结合其对现代应用需求的深度贴合,使其成为大数据存储和处理领域的一个强大工具。
2.1.1.2MongoDB安装与配置
访问MongoDB的官方网站:Download MongoDB Community Server | MongoDB ,根据您的操作系统选择合适的MongoDB社区版进行下载。本示例以Linux系统为例,但步骤在其他操作系统(如Windows、macOS)上也类似,只需参考相应系统的安装指南。
1)安装MongoDB-Linux安装示例(以Ubuntu为例)
添加MongoDB官方的APT存储库,代码如下:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
2)更新包列表并安装MongoDB
更新包列表并安装MongoDB,代码如下:
sudo apt-get update
sudo apt-get install -y mongodb-org
3)启动MongoDB服务
更新包列表并安装MongoDB,设置MongoDB开机启动,代码如下:
sudo systemctl start mongod
sudo systemctl enable mongod
4)使用MongoDB Shell
安装完成后,您可以直接在终端使用mongo
命令启动MongoDB Shell,这是与MongoDB数据库交互的命令行界面,代码如下:
mongo
2.1.1.2架构设计
MongoDB采用主从复制和分片技术来实现数据的高可用性和水平扩展。
主从复制(Replication):MongoDB使用主从复制来保证数据的冗余和高可用性。一个集群包含一个主节点和多个从节点。所有写操作首先发生在主节点上,然后被复制到从节点。如果主节点发生故障,其中一个从节点会被自动选为主节点,保证服务的连续性。
分片(Sharding):当单个服务器无法满足数据量增长或性能要求时,MongoDB可以通过分片技术将数据分布在多个服务器上。分片基于分片键(shard key)进行,这个键决定了数据如何在各个分片服务器间分布。
1)主从复制配置示例
假设有两个MongoDB实例运行在本地的27017和27018端口,以下是如何配置一个简单的副本集:
在第一个实例上初始化副本集,代码如下:
mongo --port 27017
use admin
rs.initiate({_id : "myReplicaSet",members: [{ _id : 0, host : "localhost:27017" },{ _id : 1, host : "localhost:27018" }]}
)
在第二个实例上加入副本集,需要修改第二个实例的配置文件(如/etc/mongod.conf
),添加replication.replSetName: "myReplicaSet"
,然后重启服务,连接到第二个实例并执行以下命令,代码如下:
mongo --port 27018
rs.add("localhost:27017")
注意:实际生产环境中,每个实例应部署在不同的物理或虚拟服务器上,以确保高可用性。
2)分片配置示例
分片配置较为复杂,涉及到配置服务器、分片服务器、路由服务器等组件。这里简要介绍基本流程如下:
启动配置服务器,至少需要三个配置服务器来确保高可用性。编辑配置文件(如mongod.conf),设置shardsvr: true,并指定不同的端口和数据目录,然后分别启动。
启动分片服务器,为每个分片服务器设置不同的端口和数据目录,启动时指定shardsvr: true。
配置路由服务器(mongos),安装并配置mongos实例,需要指向配置服务器,代码如下:
mongos --configdb configReplSet/host1:port1,host2:port2,host3:port3
在mongos上启用分片,选择一个数据库进行分片,再选择一个合适的分片键(shard key),代码如下:
use admin
sh.enableSharding("yourDatabaseName")
sh.shardCollection("yourDatabaseName.yourCollectionName", { "yourShardKey": "hashed" })
注意:分片键的选择非常关键,应考虑数据分布的均匀性和查询模式。在生产环境中,确保所有组件都有适当的安全配置,比如启用身份验证、使用SSL连接等。实施分片前,充分测试以确保其符合实际业务性能和扩展需求。