Nosql
什么是Nosql?
不保持ACID,而Nosql数据库遵循BASE原则**(基本可用(Basically Availble)**NoSQL允许分布式系统中某些部分出现故障,那么系统的其余部分依然可用。它不会像ACID那样,在系统出现故障时,进行强制拒绝,允许继续部分访问、**软/柔性事务(Soft-state )**NoSQL在数据处理过程中,允许这个过程,存在数据状态暂时不一致的情况。但经过纠错处理,最终会一致的。**最终一致性(Eventual Consistency)**NoSQL的软状态允许数据处理过程的暂时不一致,但是最终处理结果将是一致的,说明NoSQL对数据处理过程可以有短暂的时间间隔,也允许分更细的步骤一个一个地处理,最好数据达到一致即可。这在互联网上进行分布式应用具有其明显的优势。)
Nosql=Not Only Sql(不仅仅是sql,通过键值对存储),就是非关系型数据库,用于超大规模的存储(比如京东的那么多用户)这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
为什么使用Nosql?
随着用户的信息,社交,用户生成的数据和日志爆发式的增长,以前的互联网不发达,流量不大,就一个mysql,mysql数据库就不适合,Nosql数据库库却可以很好的处理这些大 数据
web1.0和web2.0的主要区别
web1.0是基于浏览器的,用户通过浏览器获取内容,即用户只能去浏览已经创作好的内容;
web2.0基于1.0,增加了用户与系统的交互,使用者既是网络内容的获取者,也是网络数据的提供者,例如:论坛、博客、微博等相关社交类型的平台;
POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
poi(point of interest 感兴趣的)用java通过poi这个jar包操作Excel表
Nosql优缺点
优点:方便扩展(数据没有关系,好扩展)、大数据量,高性能(Redis1秒可以写8万次,读取11万,Nosql的缓存是一种细粒度的缓存,性能高**)分布式计算、没有复杂关系,架构灵活**(传统关系型数据库都是结构化的表,nosql可以是列式存储、key-value和文档存储;
缺点:没有标准化(什么样的类型都有)
为什么不使用关系型数据库?
慢慢数据量太大,一台机器放不下
数据的索引,数据超过300万就需要建立索引,不建立索引的话就查询相对慢,内存也放不下访问量大,读写混合,一个服务器承受不了,出现这些情况就需要进阶,然后就进去第二个Memecached(高速缓存插件)+mysql+垂直拆分(也就是读写分离,完了之后才是分库分表),为啥不用orcge因为非常贵。
减轻服务器的数据压力可以用缓存处理(缓存主要用来解决读的问题)
分库分表+水平拆分(mysql集群)
比如有一个人去访问这个网站,然后就去看缓存有没有,会去集群,在比如这几个集群里各放3分之一的数据,通过一些集群机制去找到对应的数据在哪
本质:数据库就是读写
数据库引擎:最早MyISAM:表锁(100万数据,要去查张三的密码,他会把整个这个表锁起来,剩下的进程是不是得这个结果查询出来,效率低,在高并发下就会出现严重的问题),转到Innodb:行锁(明显比表锁效率高,只锁这一行)
慢慢的就使用分库分表解决写的压力。
json也可以当数据库传输
Bson也是数据库交换格式二进制的json,和json差不多
Nosql表现Map<String,Object>存万事万物,
不仅仅是数据,没有固定的查询语言,以键值对(其中的一种),列存储,文档存储,图形数据库(社交关系),最终一致性
–CAP定理和BASE理论 (异地多活):在redis事务中讲
了解3V+3高
大数据时代的3v:主要是描述问题的
海量Velume(特别多)
多样Variety(各种各样)
实时 Velocity(现在还是4g,所以看直播还有延时)
大数据时代的3高:主要是对程序的要求
高并发()
高可扩(随时水平拆分,服务器不够了,可以扩展机器来)
高性能 (保证用户体验和性能!)
真正在公司中实践:关系型数据库+非关系型数据库结合使用才最强 —(阿里巴巴的架构演进)
Nosql的四大分类
kv(键值对):
- 新浪:Redis
- 美团:Redis+Tair(集群)
- 阿里、百度:Redis+memecache(是一个开源、高性能、分布式内存对象缓存系统)
文档型数据库(用的多,bson格式和json一样,bson是二进制):
- MongoDB(一般必须掌握)在Nosql中
- MongoDB基于分布式文件存储的数据库,c++编写的、redis也是用c编写的(单进程、单线程) 主要就是用来处理大量的文档,主要解决海量数据的访问效率问题。
- MongoDB是一个介于关系型数据库和非关系型数据库中间的产品!MongoDB是非关系型数据库,功能最丰富、最像关系型数据库的ConthDB:国外的了解一哈[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaTLKz3p-1599445583054)(D:\Redis\MongoDB.png)]…mysql是行储存数据库(一行代表一个记录)列存储数据库
- HBase(是一个分布式的、面向列的开源数据库、大数据中的)
- 分布式文件系统
- 图形关系数据库(不是放图片的、是放关系的|如社交拓扑图、朋友圈社交网络)
标准的解决方案Noe4j、infoGrid
四者对比: