MongoDB 6.0 入门(一)

为什么研究MongDB 6.0

今天和老大聊天 聊到了一个场景的设计,我刚开始推荐了 clickhouse ,然后老大指出 前两天 测试的结果,因为clickhouse 因为 是列式存储,导致我们要查询一行数据,需要200ms(库中有2000w条数据)

我大概能理解这个结果,但是我感觉应该可以优化,我打算再测试一下,我又想到mongdb,但是mongdb 因为一些场景问题,也不适合。。。

我就陷入了迷茫,感觉对各个数据库/中间件的优缺点/适合的场景 不是很清晰

今天就整理下 MongDB

用到的所有 软件

链接:https://pan.baidu.com/s/1VSTvDJfpSRlKapzygYhEGQ
提取码:sgu7

image.png

MongoDB 介绍

MongoDB 是一种面向文档的数据库,使用的是行式存储(Row-Based Storage),即将一个文档作为一个整体存储在磁盘上。与传统的关系型数据库不同,MongoDB 不需要在磁盘上预留固定大小的列来存储数据,也不需要在读取数据时去访问多个表格或者分区,而是直接访问整个文档。这种存储方式对于文档的读取和更新操作非常高效,并且可以自由地添加或删除字段,非常适合存储半结构化或非结构化数据。

虽然 MongoDB 使用的是行式存储,但它仍然可以使用一些列式存储的技术来提高查询性能。例如,MongoDB 使用了一种称为“覆盖索引”(Covered Index)的技术,它可以在查询索引时直接从索引中获取所需的数据,而不必访问磁盘上的文档。此外,MongoDB 还支持使用聚合管道(Aggregation Pipeline)来对数据进行分组、排序和筛选等操作,这些操作在某种程度上类似于列式存储中的列操作。

总之,MongoDB 使用的是行式存储,但它可以使用一些列式存储的技术来提高查询性能。

MongoDB 6.0 linux安装

https://www.mongodb.com/try/download/community-kubernetes-operator

选择自己的操作系统

image.png

Package选择 tgz

下载之后 进入到你自己的 linux 服务

二、安装
1.解压

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.5.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-6.0.5.tgz
mv mongodb-linux-x86_64-rhel70-6.0.5 mongodb
mv mongodb /usr/local/
cd /usr/local/mongodb/
vim /etc/profile

2.vim配置环境,添加变量

export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
source /etc/profile

3.验证安装成功

mongod --version

启动mongodb server

mkdir /data/mongo/ -p 
mongod -dbpath /data/mongo/ -logpath /data/mongo/mongo.log -logappend -fork -port 27017 --bind_ip 0.0.0.0 

安装mongodb shell

上传到服务器并解压缩

#解压缩

tar -zxvf mongosh-1.6.0-linux-x64.tgz

#移动文件

mv mongosh-1.6.0-linux-x64 /usr/local/mongosh

启动mongosh

#无密码连接 (第一次使用这种)
/usr/local/mongosh/bin/mongosh

#使用账号密码登录

/usr/local/mongosh/bin/mongosh -u root -p wqft678
10、shell简单使用

创建用户

#创建用户

use admin;
 
db.createUser({user: 'root', pwd: 'wqft678', roles: [{role: 'root', db: 'admin'}]});
 
db.createUser({user: 'admin', pwd: 'wqft678', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]});
 使用账号密码登录



 Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限。

切换 账号密码 登录(不设置密码,容易黑库)

db.shutdownServer()
mongod -dbpath /data/mongo/ -logpath /data/mongo/mongo.log -logappend -fork -port 27017 --bind_ip 0.0.0.0 --auth
//使用账号密码登录
/usr/local/mongosh/bin/mongosh -u root -p wqft678

简单指令的使用


use test_user                                 #创建数据库
db.myuser.insertOne({ name: 'tom', age:18 })  #插入数据
show dbs                                      #显示数据库
show collections                              #显示集合
db.myuser.find();                              #查询
db.myuser.find().pretty();
db.myuser.find( { name: 'tom' } );             #根据条件查询
db.myuser.find( { age: 18} );
db.myuser.find().limit(2);                     #分页查询
db.myuser.find().skip(0).limit(2);
db.myuser.find().skip(2).limit(2);
 
db.myuser.find().sort({ age: 1 });              #正序查询
db.myuser.find().sort({ age: -1 });             #倒序查询
db.myuser.find().skip(2).limit(10).sort({age:1}); #查询数据之后排序
 
 
$gt #大于
 
$lt #小于
 
$gte #大于或等于
 
$lte #小于或等于
db.myuser.find({ age: {$lt: 18} })              #查询年龄小于18
 
db.myuser.find({ $or: [ {name: 'john'},{name: 'mary'} ] });  #或
db.myuser.find({ $and: [ {name: 'john'},{age: 20} ] });      #且
 
#正则查询
db.myuser.find({ name: {$regex: "mar[a-z]"} });  #查询名字中下一个字母是a-z的
db.myuser.find( {"name":{$regex:"(a)"}} );       #查询名字中包含字母a的。
 
db.myuser.find( {age:1} ).explain(true);          #解释执行,类比MySQL的explain
 
 
 
db.myuser.getIndexes();                            #查看索引
 
db.myuser.ensureIndex( {age:1} )                   #添加索引
db.myuser.dropIndex( {age:1} )                     #删除索引,使用正则查询 索引无效
 
db.myuser.ensureIndex( {userid:1},{unique:true} )  #创建唯一索引
 
 
 
#还可以执行如下语句插入
db.myuser.insert( {age: 29} );
db.myuser.insert( {name: 'james'} );
db.myuser.insert( {'location': '北京'} );
 
#修改数据
db.myuser.update({ age: 29 }, {$set: { age: 30 }});                
db.myuser.update({ 'name': 'tom' }, { $set: { 'name': 'snail' } });
 
#删除数据
 
db.myuser.remove({ name: 'snail' });          #根据条件删除
 
db.myuser.remove( {} )                        #删除所有数据
 
#删除集合,类比mysql删除表
db.myuser.drop();
 
#删除数据库
db.dropDatabase();
 
#监控
db.serverStatus();                           #查看所有的监控信息
db.serverStatus().network ;                  #单独查看网络流量信息
db.serverStatus().opcounters;                #统计增、删、改、查的次数
db.serverStatus().connections;               #连接信息

MongoDB 版本列表

MongoDB 4.0

特性

  1. 多文档 ACID 事务:MongoDB 4.0 引入了多文档 ACID 事务,支持多个文档的原子性操作,保证了数据的一致性和可靠性。
  2. 二进制数据类型:MongoDB 4.0 支持新的二进制数据类型,包括 UUID、正则表达式、JavaScript 代码和加密算法等,扩展了 MongoDB 的数据存储能力。
  3. 云原生支持:MongoDB 4.0 针对云原生应用场景进行了优化,提供了更好的云平台支持和集成,包括 Kubernetes、Docker 和 OpenShift 等。
  4. 数据库加密:MongoDB 4.0 引入了新的数据库加密功能,可以对整个数据库进行加密,保护数据在磁盘上的安全性。
  5. 索引优化:MongoDB 4.0 引入了新的查询优化器和索引机制,能够提高查询性能和吞吐量。
  6. 监控和诊断:MongoDB 4.0 引入了新的监控和诊断工具,包括 MongoDB Cloud Manager、Ops Manager 和 Compass 等,可以帮助管理员更好地管理和维护 MongoDB 系统。
  7. 支持 ACID 事务的分布式事务:MongoDB 4.0 引入了支持 ACID 事务的分布式事务功能,允许多个 MongoDB 实例之间进行分布式事务处理。
  8. 支持 GraphQL:MongoDB 4.0 开始支持 GraphQL,允许应用程序使用 GraphQL 来查询和操作 MongoDB 数据库。

MongoDB 5.0

特性

  1. 更快的查询性能:MongoDB 5.0 引入了全新的查询引擎“Pluggable Storage Engine”,可以提高查询性能和吞吐量。
  2. 更好的分布式事务支持:MongoDB 5.0 改进了分布式事务机制,支持更多的事务类型和功能,提高了多个 MongoDB 实例之间进行分布式事务处理的能力。
  3. 更好的安全性:MongoDB 5.0 引入了新的安全功能,包括支持 X.509 证书的认证和授权、更强的加密功能、更好的审计和监控功能等。
  4. 更好的云原生支持:MongoDB 5.0 提供了更好的云原生支持和集成,包括更好的 Kubernetes 集成、更好的自动化管理和部署功能等。
  5. 更好的开发者体验:MongoDB 5.0 提供了更好的开发者体验,包括支持更多的数据类型、更好的索引支持、更好的聚合查询功能等。
  6. 更好的管理工具:MongoDB 5.0 引入了全新的管理工具,包括更好的监控和诊断工具、更好的备份和恢复工具、更好的数据迁移工具等。
  7. 更好的集成和扩展性:MongoDB 5.0 支持更好的集成和扩展性,包括支持更多的编程语言、更好的驱动程序和 ORM 框架、更好的插件和扩展支持等。

总之,MongoDB 5.0 带来了很多新的特性和改进,扩展了 MongoDB 的功能和能力,提高了性能、安全性和可靠性,可以更好地支持现代应用场景的需求。

MongoDB 6.0

  • 新特性

    • [可查询加密(Queryable Encryption)]
    • [集群同步(Cluster-to-Cluster Sync)]
  • 优化项

    • [时序集合(Time Series Collection)]
    • [变更流(Change Streams)]
    • [聚合(Aggregation)]
    • [查询(Query)]
    • [弹性]
    • [安全性]

研究的点

  1. 基础原理
  2. 优缺点
  3. 性能测试结果
  4. 应用场景

mongdb

基础原理

优缺点

性能测试结果

应用场景

遇到的问题

All your data was backed up. You need to email us at rambler+1bydl@onionmail.org to recover your data. CHECK YOUR SPAM FOLDER! If you dont answer we will reach the General Data Protection Regulation, GDPR,and notify them that you store user data in an uns

本来想搞一个demo ,没搞权限,第二天给我出来这个。。。。上面的脚本添加了账号密码

文档数据库有哪些

文档数据库(Document-oriented databases)是一种非关系型数据库,用于存储和管理文档,通常以 JSON 或 BSON 格式存储文档。下面列出一些常见的文档数据库:

  1. MongoDB:最流行的开源文档数据库之一,使用 BSON 存储格式,支持高度可扩展性和灵活性。
  2. Couchbase:开源的文档数据库,支持 JSON 存储格式,提供高度可扩展性、高性能和高可用性。
  3. CouchDB:另一个开源的文档数据库,使用 JSON 存储格式,具有分布式和版本控制功能。
  4. Amazon DocumentDB:Amazon Web Services(AWS)提供的高度可扩展的文档数据库服务,兼容 MongoDB API。
  5. RavenDB:.NET 平台上的文档数据库,支持 JSON 存储格式,提供 ACID 事务和分布式集群。
  6. MarkLogic:面向企业的文档数据库,支持多种数据存储格式,包括 XML、JSON、文本和二进制数据。
  7. ArangoDB:多模型数据库,支持文档、图形和键值存储,使用 JSON 存储格式,提供 ACID 事务和多语言支持。
    具体优缺点还要根据应用场景和需求进行评估。

mongodb 怎么保证的事务

MongoDB 从版本 4.0 开始引入了多文档事务的支持,通过分布式事务协议(Distributed Transaction Protocol)来保证事务的原子性、一致性、隔离性和持久性(ACID)。

在 MongoDB 中,事务的操作单元是一个会话(session),可以跨多个文档和多个集合进行操作。MongoDB 的事务模型与传统的关系型数据库类似,包括开始事务、执行事务中的多个操作、提交事务或者回滚事务等步骤。

在 MongoDB 的事务模型中,事务的隔离级别可以通过设置事务的读取偏好(read preference)和事务的写入级别(write concern)来控制。例如,可以通过设置 read preference 为 primary,将所有的读取操作都发送到主节点,从而保证读取操作的一致性;同时,可以通过设置 write concern 为 majority,将写入操作同步到大多数节点,从而保证写入操作的可靠性和持久性。

需要注意的是,MongoDB 的事务机制只适用于副本集(replica set)和分片集群(sharded cluster)环境下的操作。在单节点(standalone)环境下,事务机制不可用。

总之,MongoDB 的事务机制通过多文档事务协议来保证事务的 ACID 特性,可以为分布式应用程序提供强大的数据操作和管理能力。

mongdb 怎么保证安全

MongoDB 提供了多种方式来保障数据的安全性,下面列举了一些常见的安全措施:

  1. 认证和授权:MongoDB 支持基于角色的认证和授权机制,可以对每个用户进行身份验证和访问控制。用户需要提供用户名和密码才能访问 MongoDB 数据库,而且不同的用户可以被分配不同的角色和权限。
  2. 加密传输:MongoDB 支持 SSL/TLS 加密协议来保证数据在传输过程中的安全性。通过 SSL/TLS 加密协议,MongoDB 可以使用公钥/私钥机制对传输的数据进行加密和解密,从而保障数据的机密性和完整性。
  3. 安全配置:MongoDB 提供了多种配置选项来提高安全性,例如禁用远程访问、限制网络接口、限制数据库访问等。同时,MongoDB 还提供了审计功能,可以记录用户和管理员的所有操作,以便进行安全审计和追踪。
  4. 加密存储:MongoDB 支持对存储在磁盘上的数据进行加密,可以保护数据在非授权访问时的安全性。MongoDB 支持两种加密方式:文件级加密和字段级加密。文件级加密是通过对整个数据库文件进行加密来保护数据的安全性;而字段级加密则是对某个字段进行加密,只有在授权的情况下才能查看该字段的内容。
  5. 漏洞修复:MongoDB 的开发者团队及时修复 MongoDB 的漏洞,并定期发布安全补丁,以便管理员更新 MongoDB 并解决安全漏洞。

总之,MongoDB 提供了一系列的安全措施来保护数据的安全性,管理员可以根据自己的需求和环境选择合适的安全措施来提高 MongoDB 的安全性。

MongoDb 5.0

MongoDB的最新版本是MongoDB 5.0。该版本于2021年7月发布,其中包含许多新功能和改进,包括:

  • Distributed Transactions分布式事务的支持
  • 更好的复制集故障恢复
  • 具有增量备份和恢复的MongoDB备份
  • 可插拔存储引擎API
  • 全新的Mongosh Shell,支持自动完成、语法突出显示等功能
  • 更好的查询性能和索引支持
  • 改进的安全性,包括加密存储引擎、自动TLS等

MongoDB 5.0提供了更多的功能和性能改进,适用于各种用例,包括数据湖、实时分析、人工智能/机器学习、Web应用程序等。

mongodb 版本具体信息

https://help.aliyun.com/document_detail/462614.html

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

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

相关文章

MyBatis源码分析(二、续)SqlSource创建流程,SQL如何解析?如何将#{id}变成?的

文章目录实例一、SqlSource处理入口二、SqlSource处理逻辑1、XMLScriptBuilder 构造方法2、解析动态sql3、DynamicSqlSource4、RawSqlSource解析sql&#xff08;1&#xff09;parse方法解析sql写在后面实例 此处我们分析的sql&#xff1a; <select id"selectBlog&quo…

redis 十. 线程基础

目录一. redis 基础复习与了解redis6二. redis 线程问题总结一. redis 基础复习与了解redis6 redis官网, redis中文网站, redis命令参考网站此处以redis6.0.8或以上版本为例(查看自己redis版本命令"redis- server -v")按照redis6以上版本测试使用时,redis.conf下需要…

Baklib:企业知识管理帮助文档制作平台

在当今的商业环境中&#xff0c;企业面临着越来越多的挑战。其中之一是如何管理并传递企业内部的知识。企业知识管理的重要性不言而喻&#xff0c;它可以帮助企业更好地组织和利用内部的知识资源&#xff0c;提高生产力和竞争力。而Baklib作为一款企业知识管理&帮助文档制作…

新四级强化辅导

词汇题&#xff08;55道&#xff09; 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词&#xff0c;主句谓语动词think over后面缺宾语&#xff0c;后面的宾语从句谓语动…

聚焦“专精特新” 共话高质量发展

3月23日&#xff0c;第七届杭州全球企业家论坛暨第三届中国专精特新企业&#xff08;新三板&#xff09;高峰论坛在杭州国博中心成功举办。超过500位专精特新企业代表、专家学者、政府部门代表、科研院所代表共聚一堂&#xff0c;现场座无虚席&#xff0c;气氛热烈。本届峰会以…

SQL Server 2016安装教程

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;欢迎订阅系列专栏&#xff1a;SQL Server 2016从入门到精通&#x1f947; &#x1f4…

借东风拉马力,龙头券商东方财富发展持续向好

3月17日&#xff0c;互联网券商东方财富公布2022年年报。具体来看&#xff0c;东方财富2022年实现总营收124.9亿元&#xff0c;同比下滑4.6%&#xff1b;归母净利润85.1亿元&#xff0c;同比下滑0.5%&#xff0c;略低于预期。其中&#xff0c;2022年第四季度总营收同比下滑15.4…

【Python课堂】使用Akshare高效获得A股可转债的重要信息

文章目录前言一、准备二、获取基本信息1.引入库2.读入数据3.获取行情数据4.可转债比价表总结前言 Akshare是一个非常好用的开源A股数据获取模块&#xff0c;它是基于 Python 的财经数据接口库&#xff0c;目的是实现对A股、美股、期货等金融产品的基本面数据、实时和历史行情数…

【干货】交换机管理

实验目的 熟悉掌握交换机的管理&#xff0c;包括&#xff1a;密码恢复&#xff0c;IOS升级和备份&#xff0c;IOS恢复 掌握实际工程中控制线的操作 交换机管理&#xff08;一&#xff09; 交换机密码恢复&#xff08;以下实验都需要在真机上操作&#xff09; 控制线和电脑的连…

oracle语句查询时间范围

oracle语句查询时间范围 参考网址 &#xff1a; https://blog.csdn.net/weixin_36436373/article/details/116541220?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167930069316800188562500%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%25…

Web自动化测试入门

1.Web自动化测试的价值&#xff08;为什么要做web自动化测试&#xff09; 我们可以使用脚本语言代替人来进行测试 2.Web自动化测试相关技术&#xff1a; Selenium:支持多语言&#xff0c;行业内最火最主流Pytest/JUnit5:最好用最全面的单元测试框架Allure:测试报告3.Web自动化…

多线程应用:定时器

一. 定时器 定时器(定时任务) 定时器是一种控制任务延时调用&#xff0c;或者周期调用的技术。作用&#xff1a;闹钟、定时邮件发送。 定时器的实现方式 方式一&#xff1a;Timer方式二&#xff1a;ScheduledExecutorService 二. Timer定时器 TimerTask继承了Runnable&#…

APT、对称加密、非对称加密、SSL工作过程技术的介绍

1. APT的简单介绍APT全称&#xff1a;Advanced Persistent Threat 高级可持续威胁攻击。指的是某组织对特定对象展开持续有效的攻击活动。这种攻击活动具有极强的隐蔽性和针对性&#xff0c;通常会运用受感染的各种介质&#xff0c;供应链和社会工程学等手段&#xff0c;实施先…

【Vue全家桶】细说slot

【Vue全家桶】细说slot 文章目录【Vue全家桶】细说slot前言一、认识插槽Slot1.1 插槽的基本使用二、插槽的使用2.1 默认内容2.2 剧名插槽2.3 作用域插槽前言 我们已经了解到组件能够接收任意类型的 JavaScript 值作为 props&#xff0c;但组件要如何接收模板内容呢&#xff1f;…

【翻译】使用Go生成一个随机字符串(密码)

来源&#xff1a; Generate a random string (password) YourBasic Go https://yourbasic.org/golang/generate-random-string/ Random string 随机字符串 This code generates a random string of numbers and characters from the Swedish alphabet (which includes the non…

Linux内核查询

使用uname命令查找Linux内核 uname是用于获取系统信息的Linux命令。您也可以使用它来确定您使用的是32位还是64位系统。 打开一个终端并使用以下命令&#xff1a; [linuxmilinux:~/www.xxx.com]$ uname -r 输出将类似于以下内容&#xff1a; 5.3.0-28-generic 这意味着您正在…

【CocosCreator入门】CocosCreator组件学习 | Sprite(精灵)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中 Sprite 组件是最常用的之一。Sprite 组件用于渲染 2D 图像&#xff0c;并提供了许多可配置的选项&#xff0c;如图像纹理、尺寸、位置、旋转等。在本文中&#xff0c;我们将深入探讨 …

如何成为一个优秀的产品经理?

通过本文您可以清楚地了解产品经理的角色和职责&#xff0c;教您如何摇身一变成为优秀的产品经理的技巧等。 一、什么是产品经理&#xff1f; 产品经理主要的职责在于确定客户需求、将产品或功能实现商业目标的最大化、将产品打造成最终成功的样子&#xff0c;并召集团队将这…

python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)

什么是接口测试 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。  一般来说&#xff0c;测试接…

【Qt】Qt单元测试详解(一):通过QtCreator创建测试工程

1、简述 Qt程序支持多种测试框架,其中QtCreator可以协助创建4种测试框架,分别是: Boost的测试框架——Boost.Test Google测试框架——GTest Qt测试框架——QTest Qt Quick测试框架——QtQuickTest其他框架需要自行创建:Catch2、CTest 2、QtCreator创建测试工程 2.1 创建…