关系型数据库与非关系型数据库

关系型数据库与非关系型数据库

​ 先来了解一些概念,慢慢来:

NoSQL

​ 查百度真的是云里雾里的,好在知乎的老哥们说话都很好听,人家的名字叫Not Only SQL(不仅仅是SQL),缩写叫NoSQL,取名叫非关系型数据库,其他的我们等等再说

ACID

​ 事务的特性,【这可是我遇到的第一道面试题啊我怎么能忘了呢?】原子性、一致性、隔离性、持久性,照理来说关系型数据库都支持ACID,而NoSQL是让你在CAP(一致性,可用性,分区容忍度)中的任意两项做选择

面向对象与关系型

​ 好吧这个标题起的并不好,但我想用日常学和用的东西来理解什么是关系型,我们的Java是个面向对象的语言,关系型数据库也就是我们平时最常用的主流数据库,他们一般有固定的表结构、表与表的关系(对象间的关系)。关系数据库与SQL离不开,可以说关系数据库就是基于SQL而产生的,使用SQL语句使我们的认知与计算机所能理解的数据库衔接在一起。

​ 【所以面向对象对应的就是关系型数据库…】

​ 关系型数据库有很多优点呀比如易理解使用方便,毕竟操作起来是通过SQL的,我们通常把一个类的数据存在一张表里,那么为什么会发展出非关系型数据库呢?首先最严重的瓶颈是高并发与高频率,这个很好理解,比如网站每秒产生的数据量非常巨大,在海量的数据库表中做增删改查效率很低,还有一点就是难以扩展,比如当你有了很多数据之后,当我想对项目进行更新维护,难免要遇到数据迁移,或一个服务器内的这个数据库占得太大了,但我又没法方便快捷的对其进行升级与扩展,

​ 那么NoSQL就衍生了,他以键值对存储,且结构不固定,没有固定的对象结构,你可以根据需要往同一个uid后面加上需要的与之相关的不同“字段”,那么其实一直学并用的关系型数据库的强大的SQL搜索能力是比NoSQL好得多,它不能像SQL一样通过where给很多条件进行多表查询,事实上他根本没有表的概念,但它的优点弥补了SQL几乎所有的缺点,事实上生产中我们应该避免过复杂的多表连接

​ 上面说到传统关系型数据库支持ACID,特别是一致性,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,像微信微博等对消息高并发的应用来说一致性并没有这么重要,所以这就是“NoSQL是让你在CAP(一致性,可用性,分区容忍度)中的任意两项做选择”的意思

​ 现在我已经理解了什么是关系型非关系型,比如关系型数据库有Oracle,MySQL,非关系型有redis,才疏学浅,其他的还不会用。

​ 可能我言语间可能有强调非关系型数据库,因为看到的很多答案都是非关系型更好更快怎么样,这也许是这些回答的大佬们认为我们已经非常了解什么叫关系型吧,但其实这两个没有孰优孰劣,看到一篇文章中说这就像问轮船会不会取代汽车一样,现在NoSQL很火,那可能是因为我们需要他的时代来得相对晚一些,认为这是一个新的趋势,但完全替代还是不可能的,对不太需要后续增删改查的数据放进关系型数据库,对高并发需要扩展的数据采用非关系型数据库,对面向文档的数据存在MongoDB。

​ 我真是太菜了呀,码这些字花了我好久时间啊哈哈!有哪里不对的还请指正呀