第2章 数据存储篇

目录

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连接等。实施分片前,充分测试以确保其符合实际业务性能和扩展需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760006.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring 动态增强逻辑执行分析

1、假如UserService中存在被增强的public 普通方法&#xff0c;那么spring ioc时就会创建对应的代理对象放置到容器中&#xff1b; 2、那么Controller中注入的userService就是代理对象&#xff1b; Service public class UserService {Transactionalpublic void f2(String us…

【训练篇】MLU370-M8 完成 qwen1.5-7b-chat-lora训练及推理

文章目录 前言一、平台环境配置二、环境 or 模型准备1.模型下载2.环境准备2.1 modelscope2.2 transformers2.3 accelerate2.4 deepspeed2.5 peft2.6 环境代码修改 3训练代码准备4 代码修改 三&#xff0c;训练后推理验证四.推理效果展示1.微调前2.微调后 前言 本期我们采用魔塔…

【雷达原理】雷达测角原理及实现方法

目录 一、雷达测角原理1.1 测角研究历史和现状1.2 测角方法总结1.3 3DFFT测角1.3.1 基本原理1.2.2 测角性能 二、MATLAB仿真案例参考文献 一、雷达测角原理 1.1 测角研究历史和现状 &#xff08;1&#xff09;早期采用窄波束对准目标&#xff0c;目标的角度对应于天线的角度读…

【高性能服务器】服务器概述

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 服务器概述 服…

[深入理解DDR] 总目录

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 蓝色的是传送门&#xff0c;点击链接即可到达指定文章。 图。 DDR 分类 导论 [RAM] DRAM 导论&#xff1a;DDR4 | DDR5 | LPDDR5 | GDRR6 | HBM 应运而生 运存与内存&#xff1f;内存与存…

Golang-GMP

GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的&#xff0c;为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的&#xff0c;为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率&#xff0c;但多进程、多线程都存在局限性。比如多进程通过时…

第三方服务提供商的五大风险

亚马逊如何应对网络安全挑战 关键网络安全统计数据和趋势 移动优先世界中安全和隐私策略 当今数字时代网络安全的重要性 用户无法停止犯安全错误的 3 个原因 首席安全官可能过于依赖 EDR/XDR 防御 随着业务流程变得越来越复杂&#xff0c;公司开始转向第三方来提高其提供关…

Unity动画系统(1)

6.1 动画系统基础1-5_哔哩哔哩_bilibili 模型信息 Generic非人型 Configure 虚线圈可以没有&#xff0c;实线圈必须有&#xff0c;15个骨骼是必须的 p313 尾巴、翅膀属于非人型 p314 一般使用create from this model 游戏对象不再旋转 游戏对象不再发生位移 调整中心位置

WP黑格导航主题BlackCandy

BlackCandy-V2.0全新升级&#xff01;首推专题区(推荐分类)更多自定义颜色&#xff01;选择自己喜欢的色系&#xff0c;焕然一新的UI设计&#xff0c;更加扁平和现代化&#xff01; WP黑格导航主题BlackCandy

springcloud第4季 分布式事务seata实现AT模式案例2【经典案例】

一 seata案例 1.1 背景说明 本案例使用seata的at模式&#xff0c;模拟分布式事务场景&#xff1a;【下订单&#xff0c;减库存&#xff0c;扣余额&#xff0c;改状态】 AT模式原理&#xff1a;是2pc方案的演变&#xff0c; 一阶段&#xff1a;业务数据和回滚日志记录在同一…

kubernetes中使用Helm搭建Redis集群

1. 环境要求 首先需要有kubernetes集群环境&#xff0c;搭建kubernetes集群可以使用kubeSphere、kubespray等工具安装集群。其次要安装helm&#xff0c;并且添加了可用的Chart仓库 2. 确认合适的Chart包 helm官网上搜索redis 找到Star数多的Chart包&#xff0c;一类是redis包…

JVM(12):虚拟机性能分析和故障解决工具之JConsole

1 JConsole作用 查看Java应用程序的运行概况&#xff0c;监视垃圾收集器管理的虚拟机内存(堆和元空间)的变化趋势&#xff0c;以及监控程序内的线程。 2 使用说明 代码如下&#xff1a; package com.example.demo;import java.io.IOException; import java.util.ArrayList; …

04.Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法

文章目录 设置方法配置文件设置Custom xxx配置文件详细的配置方法.xml文件的整体格式基础参数格式value-attributes配置介绍设置属性在服务安装后不可修改设置允许字段为空是否显示配置名称参数类型设置字符串类型PasswordBooleanIntFloatDirectoryDirectoriesContent-多行文本…

2024 vue3入门教程:windows系统下部署node环境

一、打开下载的node官网 Node.js — 下载 Node.js 二、根据个人喜好的下载方法&#xff0c;下载到自己的电脑盘符下 三、我用的是方法3下载的压缩包&#xff0c;解压到E盘nodejs目录下&#xff08;看个人&#xff09; 四、配置电脑的环境变量&#xff0c;新建环境变量的时候…

【Flink】Flink SQL

一、Flink 架构 Flink 架构 | Apache Flink 二、设置TaskManager、Slot和Parallelism 在Apache Flink中&#xff0c;设置TaskManager、Slot和Parallelism是配置Flink集群性能和资源利用的关键步骤。以下是关于如何设置这些参数的详细指南&#xff1a; 1. TaskManager 设置 …

【TB作品】智能台灯控制器,ATMEGA128单片机,Proteus仿真

题目 8 &#xff1a;智能台灯控制器 基于单片机设计智能台灯控制器&#xff0c;要求可以调节 LED 灯的亮度&#xff0c;实现定时开启与关闭&#xff0c; 根据光照自动开启与关闭功能。 具体要求如下&#xff1a; &#xff08;1&#xff09;通过 PWM 功能调节 LED 灯亮度&#x…

RabbitMQ-交换机的类型以及流程图练习-01

自己的飞书文档:‌‍‬‍‬‍​‍‬​⁠‍​​​‌⁠​​‬‍​​​‬‬‌​‌‌​​&#xfeff;​​​​&#xfeff;‍​‍​‌&#xfeff;⁠‬&#xfeff;&#xfeff;&#xfeff;​RabbitMQ的流程图和作业 - 飞书云文档 (feishu.cn) 作业 图片一张 画rabbit-mq 消息发…

Java 并发编程常见问题

1、线程状态它们之间是如何扭转的&#xff1f; 1、谈谈对于多线程的理解&#xff1f; 1、对于多核CPU&#xff0c;多线程可以提升CPU的利用率&#xff1b; 2、对于多IO操作的程序&#xff0c;多线程可以提升系统的整体性能及吞吐量&#xff1b; 3、使用多线程在一些场景下可…

前端笔记-day11

文章目录 01-空间-平移02-视距03-空间旋转Z轴04-空间旋转X轴05-空间旋转Y轴06-立体呈现07-案例-3D导航08-空间缩放10-动画实现步骤11-animation复合属性12-animation拆分写法13-案例-走马灯14-案例-精灵动画15-多组动画16-全民出游全民出游.htmlindex.css 01-空间-平移 <!D…

Linux随记(十)

一、升级harbor v2.6.4 --> harbor-offline-installer-v2.11.0-rc3 --> v2.9.4 – 随记 漏洞信息&#xff1a; CVE-2023-20902timing condition in Harbor 2.6.x and below, Harbor 2.7.2 and below, Harbor 2.8.2 and below, and Harbor 1.10.17 and below allows an…