NoSQL非关系型数据库技术和应用PPT课件
- 格式:ppt
- 大小:2.00 MB
- 文档页数:86
MySQL之五——⾮关系型数据库(nosql)介绍⾮关系型数据库也叫Nosql数据库,全称是not noly sql。
2009年初,Johan Oskarsson举办了⼀场关于开源分布式数据库的讨论,Eric Evans在这次讨论中提出了NoSQL⼀词,⽤于指代那些⾮关系型的,分布式的,且⼀般不保证遵循ACID原则的数据存储系统。
Eric Evans使⽤NoSQL这个词,并不是因为字⾯上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫“**SQL”,所以为了表⽰跟这些关系型数据库在定位上的截然不同,就是⽤了“NoSQL“⼀词。
⾮关系型数据库提出另⼀种理念,例如,以键值对存储,且结构不固定,每⼀个元组可以有不⼀样的字段,每个元组可以根据需要增加⼀些⾃⼰的键值对,这样就不会局限于固定的结构,可以减少⼀些时间和空间的开销。
使⽤这种⽅式,⽤户可以根据需要去添加⾃⼰需要的字段,这样,为了获取⽤户的不同信息,不需要像关系型数据库中,要对多表进⾏关联查询。
仅需要根据id取出相应的value 就可以完成查询。
♂ 关系型数据库与⾮关系型数据库的区别:关系型数据库通过外键关联来建⽴表与表之间的关系,⾮关系型数据库通常指数据以对象的形式存储在数据库中,⽽对象之间的关系通过每个对象⾃⾝的属性来决定。
♂ nosql数据库的特点:模式⾃由不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式。
逆规范化不遵循范式要求,去掉完整性约束,减少表之间的依赖弹性可扩展可在系统运⾏的过程中,动态的删除和增加节点。
多副本异步复制数据快速写⼊⼀个节点,其余节点通过读取写⼊的⽇志来实现异步复制。
弱事务不能完全满⾜事务的ACID特性,但是可以保证事务的最终⼀致性。
♂ 什么时候⽤nosql数据库:数据库表schema经常变化数据库表字段是复杂数据类型⾼并发数据库请求海量数据的分布式存储Mongodb➡ Mongodb简介MongoDB.inc 公司研发的⼀款nosql类型的⽂档型数据库。
nosql数据库解读ppt课件•引言•NoSQL数据库类型与特点•NoSQL数据库与关系型数据库比较•NoSQL数据库核心技术解析目录•典型NoSQL数据库产品介绍及案例分析•NoSQL数据库发展趋势与挑战01引言互联网时代的快速发展,数据量爆炸式增长,传统关系型数据库在扩展性、性能等方面面临挑战。
NoSQL数据库应运而生,满足大数据处理、高并发读写等需求,成为数据库领域的重要补充。
NoSQL数据库在实时分析、日志存储、社交网络、物联网等领域具有广泛应用前景。
背景与意义NoSQL数据库概述NoSQL数据库定义非关系型数据库的统称,主要区别于传统关系型数据库。
NoSQL数据库特点灵活的数据模型、高可扩展性、高性能、高可用性等。
NoSQL数据库分类键值存储、列存储、文档存储、图存储等。
典型NoSQL数据库Redis、MongoDB、Cassandra、HBase等。
02NoSQL数据库类型与特点优点简单的数据模型、高性能的读写操作、易于扩展。
缺点无法进行复杂的查询操作、数据一致性难以保证。
典型代表Redis、Memcached等。
优点高效的压缩和编码技术、快速的聚合操作、支持复杂的数据分析。
缺点不适合进行大量的单条记录查询、写入操作相对较慢。
典型代表HBase、Cassandra等。
灵活的数据模型、易于扩展、支持复杂的数据结构。
优点缺乏统一的数据结构和模式、查询性能相对较低。
缺点MongoDB 、CouchDB 等。
典型代表文档型数据库优点能够高效地处理复杂的关系数据、支持高度的并发访问、易于扩展。
典型代表Neo4j 、OrientDB 等。
缺点数据模型相对复杂、需要专门的图形查询语言。
图形数据库03NoSQL数据库与关系型数据库比较1 2 3关系型数据库基于严格的关系模型,数据以表格形式存储。
具有固定的数据结构,需要预先定义表结构。
0203NoSQL数据库无固定数据结构,数据可以灵活存储。
数据完整性通过ACID事务保证。
⾮关系型数据库(nosql)1、⾮关系型数据库(nosql)区别:mongodb数据存在磁盘上,redis和memcache数据不存在磁盘,存在内存⾥。
特点:模式⾃由:不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式。
逆规范化:不遵循范式要求,去掉完整性约束,减少表之间的依赖。
弹性可扩展:可在系统运⾏的过程中,动态的删除和增加节点。
多副本异步复制:数据快速写⼊⼀个节点,其余节点通过读取写⼊的⽇志来实现异步复制。
弱事务:不能完全满⾜事务的ACID特性,但是可以保证事务的最终⼀致性。
什么时候使⽤nosql类型数据库?数据库表schema经常变化;数据库表字段是复杂数据类型;⾼并发数据库请求;海量数据的分布式存储。
mongodb:概念:集合==表⽂档==数据键值对:{"name":"酸酸","sex":"⼥","age":"25"}命令关键词:show dbs; #查看数据库show collectios; #查看集合(表)create collection #创建⼀个集合use #切换数据库insert #插⼊数据find #查找数据update #修改数据remove #删除数据use 数据库名; #切换数据库,如果不存在即新建⼀个数据库(use关键字创建数据库)db; #查看当前的数据库db.dropDatabase(); #删除数据库创建数据:⽤insert关键字来插⼊数据,db.collectios.insert(doc);同⼀张表⾥的数据可以不⼀样,如果插⼊数据的时候表不存在,执⾏插⼊语句会⾃动创建表①.直接执⾏insert语句db.集合名.insert({"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});②.通过定义变量的⽅式变量名={"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});db.集合名.insert(变量名);更新数据:⽤update关键字来更新数据,db.collectios.update({条件},{更新的值})同⼀张表⾥的数据可以不⼀样,如果更新数据的值不存在,插⼊⼀条语句①.所有字段加全,否则会影响其他字段数据db.集合名.update({"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});②.$set⽅式只更新指定的字段db.集合名.update({"条件列名1":"条件值"},{$set:{"修改列名":"修改值"}});③.$inc,在原来的值上增加值,只适⽤于数字型db.集合名.update({"条件列名1":"条件值"},{$inc:{"修改列名":20}});删除数据:⽤remove关键字来删除数据,db.collectios.remove();①.删除整个集合⾥的数据db.集合名.remove();②.删除指定的数据,多条匹配删除多条db.集合名.remove({"条件列名1":"条件值1","条件列名2":"条件值2"});③.删除指定数据的前n条,多条匹配删除多条db.集合名.remove({"条件列名1":"条件值1","条件列名2":"条件值2"},n);查询数据:⽤find关键字来查询数据,db.collectios.find();①.查询所有的数据db.集合名.find();②.格式化显⽰数据db.集合名.find().pretty();③.指定条件查询db.集合名.find({"条件列名1":"条件值1"});④.and操作db.集合名.find({"条件列名1":"条件值1","条件列名2":"条件值2"});⑤.or操作db.集合名.find({$or:[{"条件列名1":"条件值1"},{"条件列名2":"条件值2"}]});⑥.and和or合⽤db.集合名.find({"条件列名1":"条件值1"},$or:[{"条件列名2":"条件值2"},{"条件列名3":"条件值3"}]);⑦.查询所有的⾏数db.集合名.find().count();⑧.排序,1是升序,-1是降序db.集合名.find().sort("条件列名":1);条件表达式:等于 {"列名":"值"}⼩于 {"列名":{$lt:"值"}}⼩于或等于 {"列名":{$lte:"值"}}⼤于 {"列名":{$gt:"值"}}⼤于或等于 {"列名":{$gte:"值"}}不等于 {"列名":{$ne:"值"}}Profile(慢查询):记录执⾏时间超过多久的语句profile级别有三种:0:不开启1:记录慢命令,默认为⼤于100ms2:记录所有命令db.getProfilingLevel(); #获取当前profile级别db.setProfilingLevel(); #设置当前profile级别举例:db.setProfilingLevel(1,2000); #记录超过2s查询profile(慢查询)记录:db.system.profile.find();ts:该命令在何时执⾏op: 操作类型query: 本命令的详细信息responseLength: 返回结果集的⼤⼩ntoreturn: 本次查询实际返回的结果集millis: 该命令执⾏耗时,以毫秒记索引:创建索引①.单列索引db.集合名.ensureIndex({"列名":1});②.多列索引db.集合名.ensureIndex({"列名1":1,"列名2":1});③.唯⼀索引db.集合名.ensureIndex({"列名":1},{"unique":true});查看索引①.查看索引db.system.indexes.find();②.查看当前集合中的索引db.集合名.getIndexes();删除索引:⽤dropIdenx来删除索引①.删除指定索引db.集合名.dropIndex({"列名1":1});②.删除所有的索引er.dropIndexes();explain:解析查询语句db.collection.find({"列名":"值"}).explain();explain说明:cursor: 返回游标类型(BasicCursor 或 BtreeCursor)nscanned: 被扫描的⽂档数量n: 返回的⽂档数量millis: 耗时(毫秒)indexBounds: 所使⽤的索引,如果这个字段没有的话,代表没有使⽤索引isMultiKey:是否使⽤了多键索引scanAndOrder:是否在内存中对结果集进⾏了排序indexOnly:是否只使⽤索引就能完成查询(覆盖索引)redisredis-server #启动redisredis-cli #进⼊redis命令⾏增删改查:select 1 #⽤select关键字,选择第⼀个数据库set 键值 #⽤set关键字,插⼊数据set 键值 EX 失效时间 #设置失效时间(单位:s)get 键 #⽤get关键字,获取数据del 键 #⽤del关键字,删除数据hset 键字段 '值' #hash类型,添加hash类型数据hget 键字段 #hash类型,获取hash类型单⼦字段数据hgetall 键 #获取hash类型⾥所有字段值hdel 键字段 #删除指定的某个字段keys * #查看当前数据库有哪些keyinfo #查看redis当前系统信息(监控)memcache启动参数:-p #监听的端⼝-c #最⼤同时连接数,默认是1024-m #最⼤内存使⽤,单位MB。
NoSQL数据库系列课程四、MongoDB:文档型NoSQL数据库(一)MongoDB简介MongoDB是一个基于分布式文件存储的数据库。
由C++语言编写。
旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
他支持的数据结构非常松散,是类似json的bson格式,是一种文档型的NoSQL数据库,因此可以存储比较复杂的数据类型。
Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引什么是文档型数据库?(二)MongoDB的体系结构与安装(1)、MongoDB的体系结构MongoDB是一个可移植的数据库,它在流行的每一个平台上都可以使用,即所谓的跨平台性,在不同的操作系统上虽然略有差别,但是从整体架构上来看,MongoDB在不同的平台上是一样的,如数据逻辑结构和数据存储等等。
一个运行着的MongoDB数据库就可以看成是一个MongoDB Server,该Server由实例和数据库组成,在一般情况下,一个MongoDB Server机器上包含一个实例或者多个与之对应的数据库,但是在特殊情况下,如硬件投入成本或者特殊的应用需求,也允许一个Server机器上可以有多个实例或者多个数据库。
MongoDB中一系列物理文件(数据文件、日志文件等)的集合与之对应的逻辑结构(集合、文档等)被称之为数据库,简单的说,就是数据库是由一系列与磁盘有关系的物理文件的组成。
●逻辑存储结构MongoDB的逻辑结构是一种层次结构,主要由:文档(Document)、集合(Collection)、数据库(database)这三部分组成,逻辑结构是面向用户的,用户使用MongoDB开发应用程序使用的就是逻辑结构。
⏹MongoDB的文档(Document),相当于关系数据库中的一行记录。