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.hqwc.cn/news/194080.html

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

相关文章

为什么求职者反感企业招聘用的人才测评?

为什么求职者会对人才测评的不满?大概率是认为性格测评不能完整的定义人的优势,也就是测不准! 这个想法是对的,性格测评并不能100%的展现一个完整的人,目前没有那个测评的信效度能达到如此理想,估计以后也…

2023最新最全【Nacos】零基础安装教程

一、下载Nacos1.4.1 二、单机版本安装 2.1 将下载的nacos安装包传输到服务器2.2 解压文件2.3 进入bin目录下 单机版本启动2.4 关闭nacos2.5 访问Nacos地址 IP:8848/nacos 三、集群版本的安装 3.1 复制nacos安装包,修改为nacos8849,nacos88…

Python开源项目周排行 2023年第38周

#2023年第38周2023年11月19日1easybc用于解析分组加密算法的输入 [EasyDC] 程序,然后根据差分密码分析对分组加密算法进行安全分析。它支持以下功能: EasyBC 的解释器。 基于 SMT 的方法,用于确定各种密码操作的分支数。 S-box 中的差分传播建…

AI对开发者职业的影响,保持领先的7 个行动指南

在不断发展的技术领域,人工智能(AI)已经成为一股变革性的力量,重塑了行业,重新定义了我们解决问题的方式。对于开发人员来说,学习AI的决定不仅仅是为了保持相关性,而是在他们的职业生涯中开启一个新的可能性维度。 1.…

力扣 hot100 最长连续序列 哈希去重 双指针

128. 最长连续序列 ⭐ AC code class Solution {public int longestConsecutive(int[] nums) {if (nums.length 0)// 特判为空的数组&#xff0c;返回0return 0; // set实现去重HashSet<Integer> set new HashSet<>();for (int x : nums)set.add(x);Object[] a…

MySQL 的执行原理(三)

5.4. InnoDB 中的统计数据 我们前边唠叨查询成本的时候经常用到一些统计数据&#xff0c;比如通过 SHOW TABLE STATUS 可以看到关于表的统计数据&#xff0c;通过 SHOW INDEX 可以看到关于索引 的统计数据&#xff0c;那么这些统计数据是怎么来的呢&#xff1f;它们是以什么方…

新手必看!!超详细!STM32-基本定时器

一、基本定时器的作用 定时触发输出直接驱动DAC。 二、基本定时器的框图 以STM32F103系列为例&#xff0c;具体开发板请查看开发手册。 类别定时器总线位数计数方向预分频系数是否可以产生DMA捕获/比较通道互补输出基本定时器TIM6 / TIM7APB116位向上1~65536可以0无通用定时…

线性方程组

线性方程组 设存在线性方程组 { a 1 , 1 x 1 a 1 , 2 x 2 ⋯ a 1 , n x n b 1 a 2 , 1 x 1 a 2 , 2 x 2 ⋯ a 2 , n x n b 2 ⋮ ⋮ a m , 1 x 1 a m , 2 x 2 ⋯ a m , n x n b m \left.\left\{\begin{array}{l}a_{1,1}x_1a_{1,2}x_2\cdotsa_{1,n}x_nb_1\\a_{2,1}…

windows排除故障工具RELI、PSR

RELI 在windows10中&#xff0c;如果按某些书上或网上所属&#xff0c;点击开始按钮&#xff0c;然后再搜书欧昂立输入RELI&#xff0c;在开始菜单中可以看到Reliable History&#xff08;查看可靠性历史记录&#xff09;蓝色的图标。 可惜&#xff0c;我试验后没能找到。 这…

年货FPS大作,艾尔莎EA B450M-E和你玩转《使命召唤20》

说到动视旗下的《使命召唤》系列&#xff0c;相信大家都不陌生&#xff0c;它以出色爽快的游戏体验以及精良的画面著称&#xff0c;而且每年一部的更新节奏也是如今为数不多的“年货”游戏之一了。时至今日&#xff0c;该系列已经来到了第20部作品&#xff0c;也就是《使命召唤…

Sectigo证书——全球SSL证书第一品牌

随着互联网技术的发展和网络安全意识的提升&#xff0c;SSL证书已经成为确保网络数据传输安全的重要工具。而在众多SSL证书品牌中&#xff0c;Sectigo无疑是其中的佼佼者&#xff0c;被誉为“全球证书第一品牌”。 Sectigo是一个有着超过二十年行业经验的老牌认证机构&#xff…

矩阵的QR分解

矩阵的QR分解 GramSchmidt 设存在 B { x 1 , x 2 , … , x n } \mathcal{B}\left\{\mathbf{x}_{1},\mathbf{x}_{2},\ldots,\mathbf{x}_{n}\right\} B{x1​,x2​,…,xn​}在施密特正交化过程中 q 1 x 1 ∣ ∣ x 1 ∣ ∣ q_1\frac{x_1}{||x_1||} q1​∣∣x1​∣∣x1​​ q k …