到底什么是NoSQL呢
NoSQL(NoSQL = Not Only SQL )
,意即“不仅仅是SQL”,泛指非关系型的数据库。随着互联网web2.0
网站的兴起,传统的关系数据库在应付web2.0
网站,特别是超大规模和高并发的SNS
类型的web2.0
纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL
数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
redis是发展最快的,也是当下使用最多,必须要掌握的一门技术。
关系型数据库:行,列展示。
非关系型数据库:
用户的个人信息,社交网络,地理位置,用户自己产生的数据,用户的操作日志,这样的爆发式增长的数据的数据不需要固定的存储格式。不需要多余的操作就可以横向或纵向扩展——多台机器实现或集群。
Map<String,Object>可存储万事万物!get,set以键值对处理。
NoSQL的特点:
读写速度惊人:
下面是官方的bench-mark数据:
测试完成了50个并发执行100000个请求。
设置和获取的值是一个256字节字符串。
Linux box 是运行 Linux 2.6 , 这是 X3320 Xeon 2.5 ghz 。
文本执行使用 loopback 接口(127.0.0.1)。
结果: 读的速度是 110000次/s(11 W次/s),写的速度是81000次/s(8.1W 次/s)。
NoSQL
,有三大重要的特性:
- 易扩展
- 大数据量高性能
- 多样灵活的数据模型
易扩展:
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。
大数据量高性能:
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache
,每次表的更新Cache
就失效,是一种大粒度的Cache
,在针对web2.0
的交互频繁的应用,Cache
性能不高。而NoSQL
的Cache
是记录级的,是一种细粒度的Cache
,所以NoSQL
在这个层面上来说就要性能高很多了
多样灵活的数据模型:
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦
NoSQL的缓存是一种细粒度的缓存,性能会比较高!数据类型是多量级别的。
不需要事先设计数据库。随取随用。如果是数据量十分大的表,很多人就不需要设计了。
传统关系型数据库和NOSQL的区别:
nosql数据库和传统关系库到底啥区别?
问题来自社区会员,回答来自社区交流,供同行参考
@zhuqibs Mcd 软件开发工程师:
长篇大论就不写了,就写几点:
(1)传统关系型用sql,nosql不用sql
(2)传统关系型数据在表中,nosql基本非结构化
(3)传统关系型结构修改用sql,nosql结构修改不用sql
@priest 系统架构师:
简单可以这样理解:
1、 ACID与BASE的区别
2、持久化or非持久化区别
3、数据结构层面的区别
4、其他层面
@youki2008 广东溢达 系统架构师:
存储方式:
关系型数据库是表格式的,因此存储在表的行和列中。他们之间很容易关联协作存储,提取数据很方便。而 Nosql 数据库则与其相反,他是大块的组合在一起。通常存储在数据集中,就像文档、键值对或者图结构。
存储结构:
关系型数据库对应的是结构化数据,数据表都预先定义了结构(列的定义),结构描述了数据的形式和内容。这一点对数据建模至关重要,虽然预定义结构带来了可靠性和稳定性,但是修改这些数据比较困难。而 Nosql 数据库基于动态结构,使用与非结构化数据。因为 Nosql 数据库是动态结构,可以很容易适应数据类型和结构的变化。
存储规范:
关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以避免重复,获得精简的空间利用。虽然管理起来很清晰,但是单个操作设计到多张表的时候,数据管理就显得有点麻烦。而 Nosql 数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体,这样整块数据更加便于读写。
存储扩展:
这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而 Nosql 数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。
查询方式:
关系型数据库通过结构化查询语言来操作数据库(就是我们通常说的 SQL )。SQL 支持数据库 CURD 操作的功能非常强大,是业界的标准用法。而 Nosql 查询以块为单元操作数据,使用的是非结构化查询语言( UnQl ),它是没有标准的。关系型数据库表中主键的概念对应 Nosql 中存储文档的 ID 。关系型数据库使用预定义优化方式(比如索引)来加快查询操作,而 Nosql 更简单更精确的数据访问模式。
事务:
关系型数据库遵循 ACID 规则(原子性 (Atomicity) 、一致性 (Consistency) 、隔离性 (Isolation) 、持久性 (Durability) ),而 Nosql 数据库遵循 BASE 原则(基本可用( Basically Availble )、软 / 柔性事务( Soft-state )、最终一致性( Eventual Consistency ))。由于关系型数据库的数据强一致性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,并且易于回滚事务。而 Nosql 数据库是在 CAP (一致性、可用性、分区容忍度)中任选两项,因为基于节点的分布式系统中,很难全部满足,所以对事务的支持不是很好,虽然也可以使用事务,但是并不是 Nosql 的闪光点。
柔性事务满足 Base 理论 ( 基本可用、最终一致性 ) 、 CAP 理论。
刚性事务满足 ACID 理论。
性能:
关系型数据库为了维护数据的一致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能非常差,面对海量数据的时候效率非常低。而 Nosql 存储的格式都是 key-value 类型的,并且存储在内存中,非常容易存储,而且对于数据的 一致性是 弱要求。Nosql 无需 sql 的解析,提高了读写性能。
授权方式:
关系型数据库通常有 SQL Server , Mysql , Oracle 等。Nosql 数据库有 redis , memcache , MongoDb等等 。大多数的关系型数据库都是付费的并且价格昂贵,成本较大,而 Nosql 数据库通常都是开源的。
总结:
传统的RDBMS:
- 结构化组织
- SQL
- 数据和关系都存在单独的表中——row col
- 操作,数据定义语言(DDL,DML)
- 严格的一致性
- 基础的事物
- 。。。
NoSQL:
-
不仅仅是数据
-
没有固定的查询语言
-
键值对存储,列存储,文档存储,图形数据库(社交关系)
-
最终一致性:最终结果一致。
-
CAP定律,和BASE理论。(异地多活)。
-
三高:高性能,高可用,高可扩展性。
大数据时代的:3V+3高
主要是用来秒时问题的!三高——对问题的解决。
大数据时代的3V:
- 海量Volume
- 多样Variety
- 实时Velocity
Volume、Variety、Velocity
。这3V
表明大数据的三方面特质:量大、多样、实时。对,不光是数据量大了。对TB、PB数据级的处理,已经成为基本配置。还能处理多样性的数据类型,结构化数据和非结构化数据,能处理Web数据,能处理语音数据甚至是图像、视频数据。实时。以前的决策支持时代,可以用批量处理的方式,隔夜处理数据,等决策者第二天上班,可以看到昨天的经营数据。但现在的互联网时代,业务在24小时不间断运营,决策已经不是第二天上班才做出,而是在客户每次浏览页面,每次下订单的过程中都存在,都会需要对用户进行实时的推荐,决策已经变得实时。
互联网需求的3高:
- 高并发
- 高可扩(随时水平拆分,)
- 高性能(保证用户)
真正在公司企业的实践都是:关系型数据库+非关系型数据库一起使用才是最强的。