MongoDB随记

MongoDB

  • 1、简单介绍
  • 2、基本术语
  • 3、shard分片概述
    • 背景
    • 架构
    • 路由功能
    • chunk(数据分片)
    • shard key(分片键值)
  • 4、常用命令

1、简单介绍

MongoDB是一个分布式文件存储的数据库,介于关系数据库和非关系数据库之间,支持的数据结构类型为BSON,类似于JSON。MongoDB中的记录是一个document,由字段和值对组成的数据结构。

MongoDB适合在数据量大,读写频繁,对事务性要求不高的场景应用。


2、基本术语

  • database:数据库
  • collection:表
  • document:一条数据
  • field:字段
  • index:索引

3、shard分片概述

分片(sharding)是 MongoDB 用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。

背景

高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。为了解决这些问题,有两个基本的方法: 垂直扩展和水平扩展。垂直扩展:增加更多的CPU和存储资源来扩展容量。水平扩展:将数据集分布在多个服务器上。水平扩展即分片。

分片为应对高吞吐量与大数据量提供了方法。使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,集群可以提高自己的存储容量和吞吐量。举例来说,当插入一条数据时,应用只需要访问存储这条数据的分片。而且当某个shard的负载超过一定阙值后,就会自动的重新分发数据,用来保证系统的负载均衡。

架构

在这里插入图片描述

  • shard:分片,数据的真正存储位置,以chunk为单位存数据。

  • mongos:数据路由,和客户端打交道的模块。提供对外应用访问,所有操作均通过mongos执行

    ​ mongos本身没有任何数据,他也不知道该怎么处理这数据,会去找config server。

  • config server:存储元数据和所有shard节点的信息,分片功能的一些配置信息。

Mongos本身并不持久化数据,Sharded cluster所有的元数据都会存储到Config Server,而用户的数据会议分散存储到各个shard。Mongos启动后,会从配置服务器加载元数据,开始提供服务,将用户的请求正确路由到对应的碎片。

路由功能

  • 当数据写入时,MongoDB Cluster根据分片键设计写入数据。

  • 当外部语句发起数据查询时,MongoDB根据数据分布自动路由至指定节点返回数据。

chunk(数据分片)

在一个shard server内部,MongoDB还是会把数据分为chunks,每个chunk代表这个shard server内部一部分数据。chunk的产生,会有以下两个用途:

Splitting:当一个chunk的大小超过配置中的chunk size时,MongoDB的后台进程会把这个chunk切分成更小的chunk,从而避免chunk过大的情况

Balancing:在MongoDB中,balancer是一个后台进程,负责chunk的迁移,从而均衡各个shard server的负载,系统初始1个chunk,chunk size默认值64M,生产库上选择适合业务的chunk size是最好的。ongoDB会自动拆分和迁移chunks。

shard key(分片键值)

MongoDB 中数据的分片是以集合为基本单位的,集合中的数据通过片键(Shard key)被分成多部分。其实片键就是在集合中选一个键,用该键的值作为数据拆分的依据。

片键必须是一个索引。

对集合进行分片时,你需要选择一个片键,片键是每条记录都必须包含的,且建立了索引的单个字段或复合字段,MongoDB按照片键将数据划分到不同的数据块中,并将数据块均衡地分布到所有分片中。

MongDB查询结果按照shard key排列,且每一shard中按索引有序排列。


4、常用命令

show dbs # 查看所有数据库
use [database] # 选择某一数据库
show tables # 查看数据库中的所有表
db.[collection].find() # 查看某一集合的数据
db.[collection].find({"id":{$regex:"^a*"}}) # 正则查询,^:表示匹配字符串开头;*:匹配任意字符;$:表示匹配字符串结尾
db.[collection].find().limit() # 限制查询结果条数
db.[collection].find({}, {id:1, name:1}) # 限制返回结果字段只有id和name
db.[collection].insert({}) # 插入一条数据
db.[collection].update({"id":"123456"}, {$set:{"name":"minh"}}) # 更新id为123456的name字段值为minh
db.[collection].sort() # 对查询结果按某字段排序
pretty() # 查询结果进行格式化处理
findOne() # 查询单条数据
db.[collection].remove({"name":"minh"}) # 删除数据
db.[collection].find().hint({name:1}) # 强制使用某个索引查询
$and $or

示例:

show dbs
use books
show tables
use literaturedb.literature.find()
db.literature.findOne()
db.literature.find().pretty()
db.literature.find().sort()
db.literature.find().hint({name:1})
db.literature.find().limit(10)
db.literature.find({"name":"WeThree"})
db.literature.find({"name":"WeThree"}, {name:1, author:1, price:1})
db.literature.find({$and:[{"name":"WeThree"}, {"price": {$gte: 30}}]})
db.literature.find({$or:[{"name":"WeThree"}, {"name": "homeless"}]})
db.literature.find({"name": {$in : ["a", "b", "c"]}})db.literature.insert({id:"2", name:"name", author:"minh", price:NumberInt(66), date:NumberLong(12345678)})db.literature.update({name:"name"}, {$set: {name:"minh"}})db.literature.remove({id:"2"})

参考:

https://www.mongodb.com/docs/manual/sharding/

https://zhuanlan.zhihu.com/p/598892366

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSON 格式的接口测试流程【Eolink Apikit】

在进行JSON格式的接口测试时,需要使用工具发送HTTP请求并获取响应。测试工具可以是单独的测试框架,如 Eolink Apikit。测试人员需要根据接口文档和测试用例编写测试脚本,然后运行测试并分析结果,以确保接口的质量和稳定性。 当我…

UnitTest + Selenium 完成在线加法器自动化测试

1. 任务概述 利用 UnitTest 与 Selenium 编写自动化用例,测试在线加法器中的整数单次加法功能【如123 】 人工操作流程(测试 12 是否等于 3): 打开在线加法器点击按钮1,再点击按钮,再点击按钮2&#xff0c…

Linux 串口应用编程

1 串口 API Linux串口通信: 在 Linux 系统中,操作设备的统一接口就是: open/ioctl/read/write 。 对于 UART ,又在 ioctl 之上封装了很多函数,主要是用来设置行规程。所以对于 UART ,编程的套路就是…

LINUX入门篇【7】--git提交指令以及代码调试工具gdb

前言: 我们今天来介绍一下我们工具篇的最后两个工具,即git提交指令以及代码调试工具gdb,再结合前面的知识点,我们就可以基本完成我们VS上的基本的功能:编写,调试,编译,执行程序的这些过程。 1…

西南科技大学814考研一

C语言基础 字节大小 char:1 字节 unsigned char:1 字节 short:2 字节 unsigned short:2 字节 int:通常为 4 字节(32 位平台)或 8 字节(64 位平台) unsigned int&#x…

【FFmpeg实战】ffmpeg播放器-音视频解码流程

音视频介绍 音视频解码流程 FFmpeg解码的数据结构说明 AVFormatContext:封装格式上下文结构体,全局结构体,保存了视频文件封装格式相关信息AVInputFormat:每种封装格式,对应一个该结构体AVStream[0]:视频文件中每个视频&#xff…

Java值传递和引用传递

在Java中,有值传递(Pass-by-Value)和引用传递(Pass-by-Reference)两种参数传递方式。 值传递(Pass-by-Value):当使用值传递方式时,方法将参数的副本传递给调用方法。这意…

【Java】抽象类和接口

文章目录 一、抽象类1.抽象类的概念2.抽象类的语法3.抽象类的特性4.抽象类的作用 二、接口1.接口的概念2.语法规则3.接口的使用4.接口的特性5.实现多个接口6.接口间的继承7.接口的使用实例8.Clonable 接口和深拷贝9.抽象类和接口的区别 三、Object类1.获取对象信息2.对象的比较…

Jmeter 如何监控目标服务的系统资源

下载Jmeter插件管理下载 perfmon 将这个插件管理放到Jmeter的\lib\ext目录下 然后重启Jmeter jmeter-plugins-manager-1.10.jar 下载 perfmon插件 添加 io 内存 磁盘的监听 并且添加监听 在宿主机中安装代理监听程序 并启动 ServerAgent.tar.gz

UDP网络套接字编程

先来说说数据在网络上的传输过程吧,我们知道系统其实终究是根据冯诺依曼来构成的,而网络数据是怎么发的呢? 其实很简单,网络有五层。如下: 如上图,我们知道的是,每层对应的操作系统中的那些地方…

系列一、堆里面的分区:Eden、From、To、老年代各自的特点

一、堆里面的分区:Eden、From、To、老年代各自的特点 堆是对象共享的区域,也是垃圾回收器主要工作的地方。主要分为新生区、养老区和元空间,而这三块地方中GC主要工作在新生区和养老区,其中新生区占1/3、养老区占2/3,新…

《微信小程序开发从入门到实战》学习二十二

3.3 开发创建投票页面 3.3.10 使用switch开关组件 用switch开关组件增加一个设置是否匿名投票的功能。 switch常用属性如下: checked 开还是关,默认false关 disabled 是否禁用,默认false不禁用&#xff0…

openssl1.0.2版本Windows安装问题

之前安装过1.1版本,Windows环境下C 安装OpenSSL库 源码编译及使用(VS2019)_vs2019安装openssl_肥宝Fable的博客-CSDN博客 后来发现linux编译不过,以为是版本问题,相差太大,所以降一下版本,以免…

NAS层协议栈学习笔记

NAS(Non-Access Stratum)是无线网络中非接入层及包括移动性管理(MM)和会话管理(SM)协议 ,在5G(NR)系统中连接管理(Connection Management)用于建立和释放UE与AMF之间的控制面(CP)信令连接。 5G中移动性管理是通过NAS信令在UE与核心网之间进行交互的,连接…

设计模式常见面试题

简单梳理下二十三种设计模式,在使用设计模式的时候,不仅要对其分类了然于胸,还要了解每个设计模式的应用场景、设计与实现,以及其优缺点。同时,还要能区分功能相近的设计模式,避免出现误用的情况。 什么是…

第十一周任务总结

本周任务总结 本周物联网方面主要继续进行网关的二次开发与规则引擎实现设备联动的实现 非物联网方面主要复习了docker的使用与算法的学习 1.网关的二次开发,本周将实现debug调试输出的文件下载到了网关,但网关出了问题无法连接,最终跟客服…

Web之CSS笔记

Web之HTML、CSS、JS 二、CSS(Cascading Style Sheets层叠样式表)CSS与HTML的结合方式CSS选择器CSS基本属性CSS伪类DIVCSS轮廓CSS边框盒子模型CSS定位 Web之HTML笔记 Web之JavaScript(jQuery)笔记 二、CSS(Cascading Style Sheets层叠样式表&…

Selenium安装WebDriver最新Chrome驱动(含116/117/118/119)

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

Halcon Solution Guide I basics(2): Image Acquisition(图像加载)

文章目录 文章专栏前言文章解读文章开头流程图算子介绍案例自主练习读取一张图片读取多张图片 文章专栏 Halcon开发 Halcon学习 练习项目gitee仓库 前言 今天来看Halcon的第二章,图像获取。在第二章之后,后面文章就会提供案例了。到时候我会尽量完成每一…

Kotlin 知识体系

Kotlin 知识体系 1、Kotlin 文档2、Kotlin 基础3、桌面应用程序4、Android 与 iOS 应用程序 1、Kotlin 文档 Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复…