nosql之MongoDB总结

本文深入探讨MongoDB的特性与优势,包括其高性能、丰富查询语言、高可用性及水平扩展能力。详细介绍了MongoDB的文档存储方式,与传统数据库的对比,以及数据库、集合、文档的操作规范。同时,讲解了数据插入、查询、更新、删除的方法,索引创建,聚合功能,并概述了复制与分片机制。

mongoDB简介

1.MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB是一个文档存储数据库,将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

主要特征

1、高性能:提供JSON、Xml等可嵌入数据快速处理功能;提供文档的索引功能,以提高查找数据的速度(相对传统数据库而言)。
2、丰富的查询语言:为数据聚合、结构文档、地理空间提供丰富的查询功能。
3、高可用性:提供自动故障转移和数据冗余处理功能。
4、水平扩展能力:提供基于多服务器集群的分布式数据处理能力,具有处理时分主从和权衡(基于Hash自动推选)两种处理模式(意味可以处理大数据)。
5、多个存储引擎的支持:MongoDB提供多个存储引擎,如WiredTiger引擎、MMAPv1引擎和in-Memory,前两个为基于硬盘读写的存储引擎,后一个为基于内存的存储引擎。
6、mongodb基于硬盘数据处理,速度比SQL数据库提高10几倍;文档数据库的值具备复杂文档结构数据的处理能力,查询统计性能相对比键值数据库更强,具备大数据处理能力;无事务处理能力。

杂记

1、mongoDB官网:https://docs.mongodb.com
2、使用工具:robo 3t、studio 3t
3、推荐一个很有用的json工具网站:https://www.bejson.com
4、经典cap图:
在这里插入图片描述
5、看了cap图,其实mongdb可选择一致性和可用性,这个我在下面再说。
6、文档存储的缺点:

  • 缺少约束
  • 数据出现冗余
  • 相对低效

MongoDB和传统数据库的比较

MongoDB0TRDB比较说明
集合一个集合对应一个表,MongoDB无须事先定义表结构
文档一个文档类似于一个传统数据库一行记录,每个文档有一个特殊的_id,_id的值在文档所属集合中是唯一的,默认是MongoDB自己维护,也可以由程序员编程指定。
键值对字段值文档一个键值对类似于传统数据库的一个字段值,不过文档里的值可以嵌入更复杂的数据结构

MongoDB使用

集合名称定义规则

  • 不能是空字符串,如“”
  • 不得含有$、\0(空字符)
  • 不能以“system.”开头,这是为系统集合保留的前缀
  • 用“.”来组织子集合,如book.itbook

文档的键的定义规则

  • 不能包含\0字符(含空字符),这个字符表示键的结束
  • “.”和“$”是被保留的,只能在特定的环境下用
  • 区分类型(如字符串和整数等),同时也区分大小写
  • 键不能重复,在一条文档里起唯一作用

数据库建立

数据库类型

  • Admin数据库:一个权限数据库,如果创建用户的时候将该用户添加到admin数据库中,那么该用户就自动继承了所有数据库的权限;
  • Local数据库:这个数据库永远不会被负责,可以用来存储本地单台服务器的任意集合;
  • Config数据库:当MongoDB使用分片模式时,config数据库在内部使用,用于保存分片的信息;
  • Test数据库:MongoDB安装后的默认数据库,可以用于数据库命令的各种操作,包括测试;
  • 自定义数据库:根据应用系统需要建立的业务数据库。

MongoDB数据库建立相关命令

1、创建自定义数据库:use 数据库名
2、查看数据库:show dbs
3、统计某数据库信息:db.stats()

insert()语句

插入语句,插入json。
可以传入多个键值对。
例:
db.数据库名.insert(
{
键1:值1,
键2:{
键3:值3,
键4:值4
},
键5:[键6:值6,键7:值7]
}
)

find()函数

操作符

操作格式
等于{:}
小于{:{$lt:}}
小于或等于{:{$lte:}}
大于{:{$gt:}}
大于或等于{:{$gte:}}
不等于{:{$ne:}}

or条件

db.col.find( { $or: [ { key1:value1 },{ key2:value2 } ] } ).pretty()

and和or联合使用

db.col.find({"likes":{$gt:50},$or:[{"by":"书"},{"title":"Mongodb"}]}).pretty()

模糊查询

1、查询title含有“教”的文档:db.col.find({title:/教/})
2、查询title字段以“教”开头的文档:db.col.find({title:/^教/})
3、查询title字段以“教”结尾的文档:db.col.find({title:/教$/})

update

1、修改一条简单文档(set关键字)

2、加法运算–$inc

3、乘法运算–$mul

4、更改字段名称–$rename

5、删除字段名称–unset

6、删除文档–remove(旧版本)

做了个删除标记,不是真正意义上的删除,这是做了一个删除标记,没有释放空间。
若要删除整个集合,采用db.数据库名.drop()方法的效率会更高;remove()方法,并不会释放空间,需要继续执行db.repairDatabase()或者db.runCommend({repairDatabase:1})来回收磁盘空间。

7、使用delete删除

remove()方法已经过时了,现在官方推荐使用deleteOne()和deleteMany()方法。
如删除集合下全部文档:
db.数据库名.deleteMany({})
删除status等于A的全部文档:
db.数据库名.deleteMany({status:“A”})
删除status等于D的一个文档:
db.数据库名.deleteOne({status:“D”})

索引

1、单一字段(健)索引

db.数据库名.createIndex(
{
name:1
}
)

2、字段值唯一索引

db.数据库名.createIndex(
{name:1},{uniqe:true}
)
//name这个字段值一定是唯一的

3、多字段索引

db.数据库名.createIndex(
{
name:1,sex:-1
}
)

聚合(分组)

为集合文档数据提供各种处理数据方法,并返回计算结果。MongoDB提供了三种方式来执行聚合命令:聚合管道方法,Map-reduce()方法,单一目标聚合方法。聚合相当于在mysql为group by关键字;

聚合管道方法

db.数据库名.aggregate{
[
{KaTeX parse error: Expected 'EOF', got '}' at position 14: match:{键1:值1}}̲,//拿出所有键1等于值1的数…group:{键名1:“KaTeX parse error: Expected '}', got 'EOF' at end of input: 键2",键名2:{sum:”$键3"}}//根据键2的值分为两个集合,并对键3的值求和
}
])

*7、复制—replication

mongodb数据库在实际生产环境下,都是基于多服务器集群运行,并进行相应的数据分布式处理。由此,必须考虑数据读写的可用性和安全性。如一台服务器出现故障时,应该保证MongoDB数据处理的正常运行。复制就是在解决上述问题而产生的,通过复杂功能可以实现:

  • 多服务器数据冗余的备份操作
  • 使备份数据的服务器具备额外提供独立访问请求的功能
  • 当服务器出故障时,还能自动提供故障的转移,自动数据恢复

主节点与从节点

如何复制

oplog

心跳机制

oplog(2秒一次检测数据更新,10秒如若没有数据更新,便认为主机宕机):

*8、分片

随着信息技术在管理上越来越深入而广泛的应用,作为学校以及一些培训机构,都在用信息化战术来部署线上学习以及线上考试,可以与线下的考试有机的结合在一起,实现基于SSM的小码创客教育教学资源库的设计与实现在技术上已成熟。本文介绍了基于SSM的小码创客教育教学资源库的设计与实现的开发全过程。通过分析企业对于基于SSM的小码创客教育教学资源库的设计与实现的需求,创建了一个计算机管理基于SSM的小码创客教育教学资源库的设计与实现的方案。文章介绍了基于SSM的小码创客教育教学资源库的设计与实现的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本基于SSM的小码创客教育教学资源库的设计与实现有管理员,校长,教师,学员四个角色。管理员可以管理校长,教师,学员等基本信息,校长角色除了校长管理之外,其他管理员可以操作的校长角色都可以操作。教师可以发布论坛,课件,视频,作业,学员可以查看和下载所有发布的信息,还可以上传作业。因而具有一定的实用性。 本站是一个B/S模式系统,采用Java的SSM框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SSM的小码创客教育教学资源库的设计与实现管理工作系统化、规范化。
### 如何连接 NoSQL 数据库 MongoDB 连接 MongoDB 的过程涉及配置连接字符串并使用客户端工具或编程语言驱动程序建立通信。以下是详细的说明: #### 1. 配置连接字符串 为了连接到远程主机上的 MongoDB 实例,需要定义一个标准的 URI (Uniform Resource Identifier) 字符串。该字符串包含了必要的参数以定位目标实例。例如: ```plaintext mongodb://<username>:<password>@<host>:<port>/<database>?options ``` 其中 `<username>` 和 `<password>` 是用于身份验证的凭据;`<host>` 表示 MongoDB 主机地址;`<port>` 默认为 `27017` 或自定义端口;`<database>` 则指定了默认使用的数据库名称。 具体示例如下所示[^1]: ```bash mongo "mongodb://mongodb0.example.com:28015" ``` 此命令尝试通过指定的主机名 (`mongodb0.example.com`) 及其监听端口 (`28015`) 来启动与 MongoDB 的交互会话。 #### 2. 测试连接状态 当应用程序试图接入 MongoDB 后,应当确认整个流程无误。一般而言,这是经由评估客户端返回的结果或者监控潜在引发的异常实现的。比如,在某些情况下,成功连入将会触发消息 `"Connected to MongoDB!"` 显示于终端界面;反之,若有差错发生,则相应地反馈错误提示信息给开发者以便排查问题所在[^2]。 #### 3. 编程环境下的实际应用案例 除了直接利用 shell 命令外,还可以借助多种流行开发框架所提供的 API 接口完成更为复杂的业务逻辑构建工作。下面给出一段 Python 脚本片段作为示范用途之一种方法展示如何创建持久化 session 并对其进行基本操作测试: ```python from pymongo import MongoClient, errors try: client = MongoClient('mongodb://localhost:27017/') database_names = client.list_database_names() print("Databases:", database_names) except errors.ServerSelectionTimeoutError as e: print(f"Connection failed: {e}") ``` 上述代码块展示了怎样运用 PyMongo 库去初始化一个新的 Client 对象,并列举当前可用的所有 databases 名字列表出来供后续分析参考之需。同时设置了 try-except 结构用来捕捉可能出现的各种 server selection timeout 错误情形从而增强健壮性和用户体验满意度。 --- ### 性能优化建议 考虑到性能因素时,值得注意的是 MongoDB 自身具备良好的伸缩特性——它采用内存映射文件机制使得频繁的数据存取变得极为迅速高效;另外一方面也允许管理员轻松部署 sharding 架构进而满足日益增长的大规模数据集管理需求以及高强度请求负载场景的要求[^5]. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值