非结构化存储

1.常见的NoSQL数据库 Redis、

HBase、MongoDB、InfoGrid

2.NoSQL定义及特点

全称是Not Only Sql ,是非关系型数据存储的广义定义。它存储的不再是结构化的数据,即数据再没有固定的长度,类型和固定的格式等,比较主流的是以key-value键值对存储。

3.非结构化数据库类型

文档存储数据库、键\值数据库、列存储数据库、图存储数据库

4、NoSQL中的概念与关系数据库的对应关系

在这里插入图片描述

5、数据库、集合、文档

多个键及其关联的值有序地放置在一起就是文档
一组没有固定结构的文档就是集合
多个集合组成数据库

6、什么是固定集合

性能出色且有固定大小的集合,在创建是“capped”参数为‘true’,且max为最大值时,新文档会替换最先进入集合的老文档,产生的文档集合为固定集合

7、固定集合与普通集合的区别

普通集合:集合里的文档可以是多种多样的;没有表头,无结构,自动识别每个字段的类型
固定集合: 是性能出色且有着固定大小的集合,事先创建好了,大小固定的集合;固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。

8、什么是内嵌文档

把整个MongDB文档作为另一个文档中键的值称为内嵌文档。

9、MongoDB的存储原理?

MongoDB的所有数据实际上是存放在硬盘的,然后把部分或者全部要操作的数据通过内存映射存储引擎映射到内存中。
读操作:直接从内存中取数据(尽可能的放在内存中)
写操作:修改内存中对应的数据( 0S的虚拟内存管理器把数据重新保存到硬盘中)只修改内存中的数据

10、MapReduce的三个过程?

Map,shuffle,Reduce
(1)Map:映射,将大的分布切片分割,分配给不同的map
(2)shuffle:洗牌,重新分配,排列、组合
(3)Reduce:归并,把数据映射到分区,进行统计归并

11、部署一个分片集群需要几大部分?

Shard Server、Config Server、Router Process
Shard Server :用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
Config Server :mongod实例,存储了整个 C1usterMetadata ,其中包括chunk信息。
Router Process:前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

  • 集合
    一组没有固定结构的文档就是集合

  • 主从复制

  • 分片
    将数据进行拆分,把数据分散的保存在不同的机器上的过程,MongoDB实现了自动分片的功能,能够自动地切换数据和做负载均衡

  • GridFS
    是大文件存储系统,它能够将超过16MB的文件分割,保存,对大型数据进行分块处理,然后将这些切分后的小文档,保存在数据库中(分片的依据是片键,分为:fs.files,fs.chunks两个文件)

  • 聚合
    对文档进行过滤、查询

  • 固定集合
    性能出色且有固定大小的集合,在创建是“capped”参数为‘true’,且max为最大值时,新文档会替换最先进入集合的老文档,产生的文档集合为固定集合

  • 内嵌文档
    把整个MongDB文档作为另一个文档中键的值称为内嵌文档。

  • 聚合管道
    通过数据处理管道来实现,一次操作可以使用多个管道来处理数据文档,使用管道是有顺序的,会依照管道的序列,将管道的结果传递给下一个管道中继处理,最后显示结果。

  • 地理空间索引
    找到距离当前最近的N个场所,为坐标查询提供专门索引,基于位置服务,能够帮助我们在包含地理空间形状和点集的集合上,高效地执行空间查询的索引

  • 部署MongoDB分片集群的步骤
    (1)创建配置服务器
    (2)启动查询路由器
    (3)在集群中添加分布服务器
    (4)对数据库启用分片
    (5)对集合启用分片

    在这里插入图片描述

db. GeoJson.createIndex({personloc:'2dsphere'},{name:” personloc”});  

db.runCommand({  
    geoNear:' GeoJson ',  
    near:{type:'Point',coordinates:[116.403981,39.914935]},  
    spherical:true,  
    minDistance:100,  
    maxDistance:3000  
});
db.educoder.aggregate([{$group:{_id:'$author',first_course:{$first:'$course'}}}]);  

db.educoder.aggregate([{$group:{_id:'$author',learning_avg:{$avg:'$learning_num'}}}]);  

db.educoder.aggregate([{$unwind:'\$tags'},{$group:{_id:'$tags',course_num:{$sum:1}}}]);

1.在编号大于2000的文档中,将相同单位的重量求和,即筛选“SysNo”大于2000的文档,将相同字段“ProductMode”的“Weight”求和,并将结果保存到“Produce_Mapreduce”集合中;

var mapFunction = function()
{
    emit(this.ProductMode,this.Weight);
}
var reduceFunction = function(key,values)
{
    var total=0;
    for(var i=0; i<values.length; i++)
    {
        total+=values[i];
    }
    return total;
}
db.produce.mapReduce(
                    mapFunction;
                    reduceFunction;
                    {
                    query:{SysNo:{$gt:2000}};
                    out:"Produce_Mapreduce"
                    }
)

2.

在这里插入图片描述


①创建三个 shard sever。命令代表: mkdir

②创建配置文件。分别为三台服务器创建配置文件内容中 shard ever 必须为 True

③从配置文件启动 mongodb 服务。

④启动 MongoDB shell

⑤导入数据集添加分片并启动 mangos,然后对分片进行初始化。

⑥验证分片,将对应数据集_id 字段设置为片键

3.Nosql定义

NOSQL是指“不仅仅是SQL”,这旨在强调一点的是:NOSQL数据库并非SQL的替代品,它实际上也可使用类似于SQL的查询概念。
NOSQL的全称是Not Only Sql,是非关系型数据存储的广义定义。它存储的不再是结构化的数据,即数据再没有固定的长度,类型和固定的格式等,比较主流的是以key-value键值对存储。

数据表→ JDBC读取→ POJO(VO、PO)→控制层转化为JSON数据→客户端

4.Nosql缺点

(1)不提供对sql的支持

(2)支持的特性不够丰富(不支持事务,不支持多表联查)

(3)现有的NOSQL产品,相对于已有的Mysql,Oracle等关系型数据库来说成熟度不高。

5.

在这里插入图片描述

db.test.insert({
	name: '张小凡', 
    sex: '女',
    age: 20,
    department: { id: 1,name: “研发部”,工资:8000}
})

6.MongoDB特点

1.数据文件存储格式为BSON(JSON的扩展)
例如:BSON格式

{ 				name:New Project”,
                version: 1,
                languages: {JavaScript,”HTML”,”CSS},
                admin: {name:Brad,password:****},
                paths: {temp:/tmp”,project:/opt/project”,
                html:/opt/project/html”}
  }

在此文档结构中,包含类型为:字符串、整数、数组和对象的字段、属性,跟Javascript对象是一样的。
2.面向集合存储,易于存储对象类型和JSON形式的数据
所谓集合(collection)优点类似一张表格,区别在于集合没有固定的表头。
3.模式自由
一个集合中可以存储一个键值对的文档,也可以存储多个键值对的文档,还可以存储键不一样的文档,而且在生产环境下可以轻松增减字段而不影响现有程序的运行
4.支持动态查询
MongoDB支持丰富的查询表达式,查询语句使用JSON形式作为参数,可以很方便的查询内嵌文档和对象数组。
5.完整的索引支持
6.支持复制和故障恢复
7.二进制数据存储
8.自动分片(支持水平的数据库集群,可动态添加机器。)
分片的功能实现海亮数据的分布式存储,分片通常与复制集配合起来使用,实现读写分离,负载均衡,如何选择片键是实现分片功能的关键
9.支持多种语言
10.使用的是内存映射存储引擎

7.MongoDB基础知识

1、MongoDB中数据库、集合、文档的概念?关系?
数据库包含集合,集合包含文档
2、MongoDB中的基本类型,日期类型用什么表示?
ISODate
3、MongoDB的存储引擎包括哪些?
MMAP引擎,inMemory引擎,wriedTiger引擎
4、MongoDB的工作原理?
MongoDB的所有数据实际上是存放在硬盘的,然后把部分或者全部要操作的数据通过内存映射存储引擎映射到内存中
5、在MongoDB中数据存储的格式是JSON

10、GridFS工作原理

在GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个块进行存储,GridFS使用两个集合(collection)存储文件,一个集合是chunks,用于存储文件的二进制数据;一个集合是files,用于存储文件的元数据(文件名称,大小,上传时间等信息)。

11、MongoDB使用GridFS的优缺点

优点
1:能够简化技术栈,如果已经使用了MongoDB,那么使用GridFS,就不需要其它独立的存储工具了

2:GridFS会自动平衡已有的复制,或者为MongoDB设置的自动分片,所以对文件存储做故障转移或者是横向扩展会更容易 。

3:GridFS的功能不错,能自动解决一些其他文件系统遇到的问题,如在同一个目录下存储大量的文件

缺点
1: 性能较低,不如直接访问文件系统快。

2:无法修改文档。如果要修改GridFS里面的文档,只能是先删除再添加

12、文档的增、删、改、查

1、在文档中插入数据insert与save的区别?
如果我们在插入数据的时候不添加一个主键时,系统会随机分配一个主键,则不存在下面所说的情况,若新增的数据中存在主键,则再次插入相同的主键时insert() 会提示错误,而save() 则更改原来的内容为新内容。
当遇到_id相同的情况下save完成保存操作insert则会报错

2、查询
在student集合中,查找年龄小于20岁的学生信息

db.student.find({sage:{$lt:20}})

在student集合中,查找出Jim的最后一本书

db.student.find({{sname:”Jim”},{books:{$slice:-1}}})

假设mdb集合中_id为“2012014”的文档已经存在,请在mdb集合中插入以下数据:
{“_id”:“202103105”,“name”:“徐金鑫”,age:23,“books”:[MongoDB,Python,C++]}

db.mdb.save({"_id":"202103105","name":"徐金鑫",age:23,"books":[MongoDB,Python,C++]})

查询出persons数据集中的所有数据,不显示_id;

db.persons.find({},{_id:0})

查询出persons集合中的年龄大于25岁同学的信息;

db.persons({age:{$gt:25}});

利用聚合管道aggregate方法操作persons数据集,统计出“范明硕”books中的元素个数;

db.persons.aggregate([{$match:{name:"范明硕"}},
{$project:{'书籍数量':{$size:'$books'}}}])

统计persons数据集合中年龄大于23岁学生的年龄和人数;

db.getCollection('persons').aggregate([{$group:{_id:"$age",total:{$sum:1}}}])

修改persons数据集合中所有男同学的年龄减少1岁;

 db.persons.update({sex:”男”},{$inc:{sage:-1}}falsetrue)    

在persons数据集合中,给姓”王”的同学追加一本“语文”书籍;

db.persons.update({})

删除persons数据集合中sname是“徐金鑫”的文档;

db.persons.remove({sname:”徐金鑫”})

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


1.假设mdb集合中_id为“2012014”的文档已经存在,请在mdb集合中插入以下数据:
{“_id”:“202103105”,“name”:“徐金鑫”,age:23,“books”:[MongoDB,Python,C++]}(使用命令save进行写入)

db.mdb.save({"_id":"202103105","name":"徐金鑫",age:23,"books":[MongoDB,Python,C++]})

2.查询出mdb集合中的年龄大于等于27岁同学的信息;

 db.persons({age:{$gt:27}}); //gt为大于

3.查询出mdb集合中拥有4本书的学生信息;($where)

db.persons.find({$where:"this.books.length>=4"}) 

4. 利用聚合管道操作mdb集合,统计出jim喜欢看书的数量;

db.persons.aggregate([{'$match':{name:'jim'}}, {'$project':{ '_id':0,'name':1,'数量':{'$size':'$books'}} }]) 

5.将mdb集合中的zhaoliu同学的年龄增加1岁;

db.persons.update({name:"zhaoliu"},{$inc:{age:1}})

6.在mdb集合中,给“zhangsan”同学增加他的父母信息,并将各自父母亲的姓名、职业、年龄等信息录入内嵌文档;例如:{“name”:“张传”,“关系”:“父亲”,“工作”:“教授”},{“name”:“孙一丽”,“关系”:“母亲”,“工作”:“处长”}

在这里插入代码片

7.删除mdb集合中name是“Jim”的记录;

db.persons.remove(name:"Jim"})

8.为mdb集合中的name和age创建唯一索引,并按sname升序、sage降序排序;

db.persons.ensureIndex({sname:1,sage:-1},{unique:true,name:"mdb.Index"})

9.查询出mdb集合中名字中存在”li”的学生的信息;

db.student.find({sname:/li/g},{_id:0,sname:1}) 

10.利用命令创建mytest数据库,并在该数据库下创建固定集合col。

use mytest
db.createCollection("col")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340