带你入门NoSQL(真的是太全了)

引子:

在我们开发过程中,数据库是一个很常用的数据存储工具,我们对sql运用的可以说如火纯情了,但不知道大家有没有想过,传统关系型数据库是关系的,而存储结构是面向对象的,这种情况下,每次存储或者查询时,都需要对数据进行转换,随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题。在数据存储方面,关系数据库只能存储关系型数据,不能进行页面、图表存储。

我们不禁会思考,为什么不能有数据库可以适应多种数据结构的存储
有没有数据库在经过简单便捷的配置之后就可以解决高数据并发问题

正题

本文将大家带从正面侧面全面了解NoSQL数据库。
首先从概念说起:

1. 概念

NoSQL,直译:不仅仅是sql,是传统数据库的简化版本,减少不常用的功能,来大幅度提高产品性能

2. 为什么会出现Nosql呢?

以我们最常用的MySQL关系型数据库对比
(1)结构方面:
关系型数据库由于结构的限制不能满足高性能查询需求;
java编程是面向对象的,但数据库是关系型数据库。存储结构是面向对象的,单数据库却是关系的,所以在每次存储或查询时,都需要进行数据转换,对性能要求不高时,MyBatis、Hibernate可以简化优化,但在高数据高性能时效率就有些达不到
(2)扩展方面:
应用程序规模的变大时,扩展复杂;
在网络应用程序的规模变大,数据存储量变大时,我们需要不停地扩展。扩展有以下两种方式
①纵向扩展:提高机器性能
②横向扩展:组建集群,关系型数据库组建集群使用Mycat,需要配置多个数据源,相对复杂
但上述方式要不然增加资金成本,要不然增加人力成本,实现不方便
通俗来讲,就是关系型数据库在某些方面不能满足开发者的需求了,需要改变创新,这时NoSQL就慢慢的出现在大众的视野中。

3. 意义

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

4. NoSQL数据库类型

(1)键值(key-value)对形式存储

代表性数据库:【Redis/Memcached】
键值对形式存储,通过key快速查询到其value,规定了key必须是String类型,而value可以为String、list、hash、set、zset五中数据类型,限制性比较小,并且读写速率也是非常快的。

(2)数据可以使用XML\JSON\JSONB形式等面向文档存储

代表性数据库【MongoDB】
可以使用多种形式存储数据,说明我们在开发时不需要考虑数据库表的设计,大大提高了我们的开发效率
MongoDB自带了副本集的概念,通过设计适合自己业务的副本集和驱动程序,可以非常有效和方便地实现高可用,读负载均衡

(3)列存储

代表性数据库【HBASE】
每一行都有一个可以排序的rowKey和任意多的列,列可以根据需要动态增加,同一张表的不同行可以有截然不同的列。

(4)图存储

代表性数据库【Neo4J】
比起传统的信息存储和组织模式,图数据库能够很清晰揭示复杂的模式
常用于网络拓扑分析图存储

5. 传统关系型数据库与NOSQL区别

关系型:
(1)高度组织化结构化数据
(2)查询语句结构化
(3)数据和关系存储在单独的表中
(4)数据操纵语言,数据定义语言
(5)严格的一致性
(6)基础事务
NOSQL
(1)没有生命性查询语言
(2)没有预定义的存储模式
(3)最终的一致性,而非ACID[原子、一致、隔离、持久]属性
(4)非结构化和不可预知的数据
CAP定力【一致性、可用性、容错性】

6.Nosql的特点:

(1)易扩展  
(2)大数据量高性能
(3)多样灵活的数据关系

7、总结,如何选择

选择数据库是一个相对性问题,需根据系统的功能以及性能选择出适合自己的数据库
这里只对我自己的想法做以陈述:
(1)管理类系统实时性不高数据量小时使用关系型数据库就够了;

(2)商城类秒杀功能的并发量高,性能要求高,可将关系型数据库与【Redis】数据库结合使用

(3)市场分析、社交,物流,金融风控行业系统需要用图片来反应数据的,可使用【Neo4J】图处理数据库

(4)交通、 金融、电商、信息类系统,需要进行海量数据存储,并需要准实时查询的情况,可使用【Hbase】数据库

(5)对象或JSON 数据存储网站实时存储的系统,可使用【MongoDB】数据库
到这里,整个文章就结束了,能看到这里的都是努力小码农

简单介绍一下。我是Myy,一个有灵魂的程序员。两年开发经验,想和大家一起学习,一起成长,我创建了“烧脑程序杂谈”这个公众号,专注于分享有趣的
Java 技术编程和有益的程序人生。

你在看这篇文章的时候,应该也能发现,我们都是努力的小码农,如果你也喜欢我的文章,请记得微信搜索「烧脑程序杂谈」关注我的原创公众号,公众号中有我工作学习中整理的
Java 面试攻略,以及各位老师们的技术视频哦。绝对不容错过,期待与你一同成长,一同进步。

由于个人经验较少,不能保证写的文章中没有问题,但能保证文章中每句话都是我认真推敲、仔细斟酌之后写出来的。
如果你有发现文中有写的不对的地方,欢迎提出您宝贵的意见

你可能感兴趣的:(数据库)