mongodb简介、安装、搭建复制集

news2024/11/20 11:23:25

一、 简介

NoSQL数据库四大家族:列存储 Hbase,键值(Key-Value)存储 Redis,图像存储 Neo4j,基于分布式文档存储的数据库MongoDb。

MongoDB 和关系型数据库对比

关系型数据库MongoDB
database(库)database(库)
table(表)collection(表)
row(行)document(BSON文档)
column(列)field(字段)
index(索引)index(地理索引、全文索引、hash索引)
join(主外键关联)embedded Document (嵌套文档)
primary key(指定1至N个列做主键)primary key(指定1至N个列做主键)

 BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文 档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和Binary Data类型。

 二、Linux安装Mongodb

解压: tar -xvf mongodb-linux-x86_64-4.1.3.tgz

 启动的两种方式:

1)默认27017的端口启动:./bin/mongod 

2)指定配置文件的方式启动:./bin/mongod -f mongo_37017.conf

注意:若启动报目录缺失, 需要创建对应的目录的文件,如: mkdir -p /data/mongo/data/server1

mongo shell 的启动

启动mongo shell :./bin/mongo

指定主机和端口的方式启动 :./bin/mongo --host=主机IP --port=端口

三、MongoDb的GUI工具

NoSQLBooster是MongoDB CLI界面中非常流行的GUI工具。它正式名称为MongoBooster。

默认安装即可。

四、简单操作

查看数据库:

         show dbs;

切换数据库 如果没有对应的数据库则创建:

         use 数据库名;

创建集合:

         db.createCollection("集合名")

查看集合:

         show tables;

        show collections;

删除集合:

         db.集合名.drop();

删除当前数据库:

         db.dropDatabase();

聚合操作:

        单目的聚合操作:count() 和 distinct()

        聚合管道(Aggregation Pipeline):

        聚合(aggregate)主要用于统计数据(诸如统计平均值,求和等),并返回计算后的数据结果。

        MapReduce 编程模型:

        MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结 果合并成最终结果(REDUCE)。

五、索引

1. 单键索引

2. 复合索引

3. 多键索引

4. 地理空间索引

5. 全文索引

6. 哈希索引

六、索引底层实现原理

        MongoDb使用BSON格式保存数据。与mysql使用B+树不一样,MongoDb用的是B-树,所有节点都有Data域,每个节点既保存数据又保存索引,搜索时相当于二分查找。

        B-树的特点: (1) 多路 非二叉树 (2) 每个节点 既保存数据 又保存索引 (3) 搜索时 相当于二分查找

        B+ 树的特点: (1) 多路非二叉 (2) 只有叶子节点保存数据 (3) 搜索时 也相当于二分查找 (4) 增加了 相邻节点指针

七、高可用

7.1 主从复制架构

        主从结构没有自动故障转移功能,需要指定master和slave端,不推荐在生产中使用。 mongodb4.0后不再支持主从复制!

[main] Master/slave replication is no longer supported

7.2 复制集replica sets

        原理:一个复制集中Primary节点上能够完成读写操作,Secondary节点仅能用于读操作。Primary节点需要记录所有改变数据库状态的操作,这些记录保存在 oplog 中,这个文件存储在 local 数据库,各个Secondary 节点通过此 oplog 来复制数据并应用于本地,保持本地的数据与主节点的一致。oplog 具有幂等性,即无论执行几次其结果一致,这个比 mysql 的二进制日志更好用。

        复制集数据同步分为初始化同步和keep复制同步。初始化同步指全量从主节点同步数据,如果Primary 节点数据量比较大同步时间会比较长。而keep复制指初始化同步过后,节点之间的实时同步一般是增量 同步。

        初始化同步有以下两种情况会触发: (1) Secondary第一次加入。 (2) Secondary落后的数据量超过了oplog的大小,这样也会被全量复制。

        主节点选举触发的时机:

         第一次初始化一个复制集

        Secondary节点权重比Primary节点高时,发起替换选举

        Secondary节点发现集群中没有Primary时,发起选举 Primary节点不能访问到大部分(Majority)成员时主动降级

        当触发选举时,Secondary节点尝试将自身选举为Primary。主节点选举是一个二阶段过程+多数派协议。

第一阶段: 检测自身是否有被选举的资格,如果符合资格会向其它节点发起本节点是否有选举资格的 FreshnessCheck,进行同僚仲裁

第二阶段: 发起者向集群中存活节点发送Elect(选举)请求,仲裁者收到请求的节点会执行一系列合法性检查,如果检查通过,则仲裁者(一个复制集中最多50个节点 其中只有7个具有投票权)给发起者投一票。

pv0通过30秒选举锁防止一次选举中两次投票。

pv1使用了terms(一个单调递增的选举计数器)来防止在一次选举中投两次票的情况。

多数派协议:

        发起者如果获得超过半数的投票,则选举通过,自身成为Primary节点。获得低于半数选票的原因,除了常见的网络问题外,相同优先级的节点同时通过第一阶段的同僚仲裁并进入第二阶段也是一个原因。因此,当选票不足时,会sleep[0,1]秒内的随机时间,之后再次尝试选举。

 7.3 环境搭建

1. 创建目录: mkdir replica_sets

2. 进到目录中,解压mongodb: tar -xvf mongodb-linux-x86_64-4.1.3.tgz

3. 确保当前没有正在运行的monodb

4. 创建,编写mogo的配置文件:vi mongo_37017.conf

# 主节点配置

dbpath=/data/mongo/data/server1

bind_ip=0.0.0.0

port=37017

fork=true

logpath=/data/mongo/logs/server1.log

replSet=lagouCluster

#从节点配置

dbpath=/data/mongo/data/server2

bind_ip=0.0.0.0

port=37018

fork=true

logpath=/data/mongo/logs/server2.log

replSet=lagouCluster

#从节点配置

dbpath=/data/mongo/data/server3

bind_ip=0.0.0.0

port=37019

fork=true

logpath=/data/mongo/logs/server3.log

replSet=lagouCluster

 5. 创建缺失目录:

6. 根据配置文件加载启动3个节点:

./bin/mongod -f mongo_37017.conf

./bin/mongod -f mongo_37018.conf

./bin/mongod -f mongo_37019.conf

7. 初始化节点配置,进入任意一个节点比如37017节点运行如下命令:

var cfg ={"_id":"lagouCluster",
... "protocolVersion" : 1,
... "members":[
... {"_id":1,"host":"192.168.0.203:37017","priority":10},
... {"_id":2,"host":"192.168.0.203:37018"}
... ]
... }
 

 37017初始化后,该节点由“SECONDARY”变为“PRIMARY”。

 

8. 主节点可以进行增删节点操作:

 rs.add("192.168.0.203:37019")

rs.remove("192.168.0.203:37019")

9. 插入数据验证结果:

进入主节点 ----- 插入数据 ------ 进入从节点验证

注意:默认节点下从节点不能读取数据。调用 rs.slaveOk() 解决。

37017主节点:

37018从节点:

节点说明:

        PRIMARY 节点: 可以查询和新增数据

        SECONDARY 节点:只能查询 不能新增 基于priority 权重可以被选为主节点

        ARBITER 节点: 不能查询数据 和新增数据 ,不能变成主节点 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.net也能写内存挂

最近在研究.net的内存挂。 写了很久的c,发现c#写出来的东西实在太香。 折腾c#外挂已经有很长时间了。都是用socket和c配合。 这个模式其实蛮成功的,用rpc调用的方式加上c#的天生await 非常好写逻辑 类似这样 最近想换个口味。注入托管dll到非托管进程 这样做只…

基于 SOFAJRaft 实现注册中心

文章目录 1.前言2.git 示例地址3.官网示例分析3.SOFAJRAFT 注册中心实现(服务端)3.1 核心功能3.2 模块设计3.3 请求消息数据结构设计3.3.1 Registration 注册消息3.3.2 GetServiceInstancesRequest 获取服务实例请求3.3.3 GetServiceInstancesResponse 获…

Android中级——ListView和RecycleView解析

ListView和RecycleView ListViewRecycleView ListView 使用步骤可看Android基础——ListView,其setAdapter()如下,回调getCount()获取Item个数 Override public void setAdapter(ListAdapter adapter) {if (mAdapter ! null && mDataSetObserv…

v-model绑定input、textarea、checkbox、radio、select

1.input <div><!-- v-model绑定input --><input type"text" v-model"message"><h2>{{message}}</h2></div><script>const App{template:#my-app,data() {return {message:Hello World,}},}Vue.createApp(App).…

Java:设计模式之结构型-装饰者模式(decorator pattern)

装饰者模式(decorator pattern): 动态地将责任附加到对象上 意图&#xff1a;为对象动态添加功能 类图 实现 设计不同种类的饮料&#xff0c;饮料可以添加配料&#xff0c;比如可以添加牛奶&#xff0c;并且支持动态添加新配料。每增加一种配料&#xff0c;该饮料的价格就…

微信怎么查看名下所有微信号?

一般大家都会有两个或者更多的微信号&#xff0c;那怎么知道自己名下有几个微信号呢&#xff1f; 微信号要使用支付或者其他一些功能是要实名才可以使用的&#xff0c;有时候不知道自己的名下绑定了多少微信号&#xff0c;怎么查询呢&#xff1f; 微信最近出了开通小号的功能&…

当下测试行业中UI自动化面临的难点及如何解决

经常有人会问&#xff0c;什么样的项目才适合进行UI自动化测试呢&#xff1f;UI自动化测试相当于模拟手工测试&#xff0c;通过程序去操作页面上的控件。而在实际测试过程中&#xff0c;经常会遇到无法找到控件&#xff0c;或者因控件定义变更而带来的维护成本等问题。 哪些场…

Python数组添加元素append的时间复杂度分析

由于数组需要连续的存储空间&#xff0c;append&#xff08;&#xff09;函数的时间复杂度可能为1也可能为n&#xff0c;主要看在后面添加元素时&#xff0c;当前位置是否可以添加&#xff0c;有位置可以添加的话&#xff0c;则直接在后面添加&#xff0c;此时时间复杂度为1&am…

工学云打卡签到自动完成在异地的问题就解决了|蘑菇钉

工学云打卡助手&#xff0c;能解决你在异地时每天不间断签到的问题&#xff0c;仔细看图哦 1.自动签到 2.自定义打卡地区 3.生成日周月报与总结自动发表 4.支持随机通用内容 5.支持打卡结果推送 对于许多即将步入职场的新人来说&#xff0c;实习是一个非常重要的阶段。实习…

【算法挨揍日记】day13—— DP34 【模板】前缀和、DP35 【模板】二维前缀和

DP34 【模板】前缀和 【模板】前缀和_牛客题霸_牛客网 题目描述&#xff1a; 给定一个长度为n的数组. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出 输入描述: 第一行包含两个整数n和q.第二行包含n个整数, 表示.接下来q行,每行包含两个整数 l和r. …

聊聊Android签名检测7种核心检测方案详解

聊聊Android签名检测总结与反思 背景&#xff1a; 这篇文章只讲Android端签名检测&#xff0c;安卓发展到现在&#xff0c;因为国内环境没有谷歌市场&#xff0c;所以很多官方推荐的Api没法使用 &#xff0c;所以国内的签名检测方式也是“千奇百怪” 。发展至今每种方法都有一…

智安网络|揭开云服务的神秘面纱:其含义和功能的综合指南

随着信息技术的不断发展&#xff0c;云服务已经成为了我们生活中的一个不可或缺的部分。无论是在个人生活中还是在商业领域&#xff0c;云服务都具有广泛的应用。 什么是云服务&#xff1f; 云服务是一种基于互联网的计算和存储资源提供方式&#xff0c;它允许用户通过互联网访…

CTF Misc(3)流量分析基础以及原理

前言 流量分析在ctf比赛中也是常见的题目&#xff0c;参赛者通常会收到一个网络数据包的数据集&#xff0c;这些数据包记录了网络通信的内容和细节。参赛者的任务是通过分析这些数据包&#xff0c;识别出有用的信息&#xff0c;例如登录凭据、加密算法、漏洞利用等等 工具安装…

智能优化算法常用指标一键导出为EXCEL,CEC2017函数集最优值,平均值,标准差,最差值,中位数,秩和检验,箱线图...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 之前出了一篇关于CEC2005函数集的智能算法指标一键统计&#xff0c;然而后台有很多小伙伴在询问其他函数集该怎么调用。今天采用CEC2017函数集为例&#xff0c;进行展示。 为了突…

手动下载/安装Xcode的simulator

目录 前言解决方案1.获取simulator包下载地址1.1 Apple后台1.2 手动 2.使用三方下载工具下载3.使用命令安装simulator 前言 Xcode某个版本更新之后不带iOS的Simulator,导致全新下载一个Xcode后没法编译项目.公司的网又很坑,每次断掉点重试都重新下载,导致完全没法下下来.特别影…

lazada商品列表数据接口,关键词搜索lazada商品数据接口

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取lazada网站上的商品页面。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#xff0c;lazada…

大规模语言模型人类反馈对齐--强化学习

​OpenAI 推出的 ChatGPT 对话模型掀起了新的 AI 热潮&#xff0c; 它面对多种多样的问题对答如流&#xff0c; 似乎已经打破了 机器和人的边界。这一工作的背后是大型语言模型 (Large Language Model&#xff0c;LLM) 生成领域的新训练范式&#xff1a;RLHF (Reinforcement Le…

专题二:二叉树的深搜【递归、搜索、回溯】

深度优先遍历&#xff08;DFS&#xff0c;全称为DepthFirstTraversal&#xff09;&#xff0c;是我们树或者图这样的数据结构中常用的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀&#xff0c;直到⼀条路径上的所有节点都被遍历完毕&#xff0c;然后再回溯到上⼀层&a…

为什么要做CRM?

客户管理的痛点&#xff1a; 1、销售经常性漏跟错跟客户&#xff0c;客户转化率低造成资源浪费 2、客户信息繁杂&#xff0c;难整理和查找 3、销售离职带走客户资源&#xff0c;损失大 4、传统报价审批流程长&#xff0c;效率低 企业做CRM系统有以下几点好处&#xff1a; …

纸、纸板和纸制品 有效回收组分的测定

声明 本文是学习GB-T 42944-2023 纸、纸板和纸制品 有效回收组分的测定. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了纸、纸板和纸制品中有效回收组分的测定方法。 本文件适用于各种纸、纸板和纸制品&#xff0c;也适用于铝箔…