SQL与NoSQL
sql简介
sql,即structured query language 结构化查询语言,用于存取数据以及查询、更新和管理关系型数据库。
常见的关系型数据库有mysql、sql server、access、oracle 等,sql是关系型数据库的通用语言。
sql只是一个标准,由各关系数据库厂商来实现,所以并不是完全支持的。就像w3c制定web标准,由各浏览器厂商来实现,但不是所有厂商都完全支持w3c制定的标准。除了 sql 标准之外,大部分 sql 数据库都有自己的专有扩展。
sql同时也是数据库脚本文件的扩展名。
关系型数据库遵循acid规则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
1、a (atomicity) 原子性
事务中的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
2、c (consistency) 一致性
数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。
3、i (isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现在有个交易是从a账户转100元至b账户,在这个交易还未完成的情况下,如果此时b查询自己的账户,是看不到新增加的100元的。
4、d (durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使宕机也不会丢失。
nosql 简介
nosql即 nosql = not only sql "不仅仅是sql",泛指非关系型的数据库。
现在的主流数据库仍是关系型数据库,但随计算机网络的发展,产生、需要处理的数据量爆炸式增加,传统的关系型数据库处理大数据显得力不从心,尤其是处理超大规模、高并发的数据时,关系型数据库暴露了很多难以克服的问题。
nosql数据库就是为了解决大数据应用难题而产生的,nosql 是一项全新的数据库革命性运动。
nosql适用于超大规模数据的存储、挖掘。
比如谷歌或facebook每天要产生万亿比特级的数据,如果要对这些用户数据进行存储、挖掘,sql数据库力不从心, nosql 数据库却能很好的处理这些大的数据。
nosql提倡运用非关系型的数据存储,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
分类 | 举例 | 典型应用场景 |
数据模型 |
优点 | 缺点 |
---|---|---|---|---|---|
键值数据库(key-value) | redis | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 | key 指向 value 的键值对,通常用hash table来实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 |
列存储数据库 | cassandra, hbase | 应对分布式存储的海量数据,比如分布式的文件系统。 | 键仍然存在,但指向多个列。以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档型数据库 | mongodb | web应用 | 数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如json。文档型数据库类似于键值存储,可以看作是键值数据库的升级版,文档型数据库比键值数据库的查询效率更高。key-value对应键值对,value为结构化数据。 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法。 |
图形(graph)数据库 | neo4j, infinite graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 可利用图结构相关算法。比如最短路径寻址,n度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |
nosql的共同特征
-
不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
-
无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。nosql往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
-
弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
-
分区:相对于将数据存放于同一个节点,nosql数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
-
异步复制:和raid存储系统不同的是,nosql中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
-
base:相对于事务严格的acid特性,nosql数据库保证的是base特性。base是最终一致性和软事务。
nosql数据库并没有一个统一的架构,两种nosql数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,nosql各有所长,共同点是它们都可以处理超大量的数据。成功的nosql必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的nosql。
nosql的适用场景
1、数据模型比较简单;
2、需要灵活性更强的it系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境。
nosql的优点、缺点
1、优点
- 高可扩展性
- 分布式计算
- 低成本
- 架构灵活,半结构化数据
- 没有复杂的关系
一句话,高性能、高可用性、可伸缩性,没有复杂的关系。
2、缺点
- 查询功能有限
推荐阅读
-
PHP与已存在的Java应用程序集成
-
iOS开发之tableView点击下拉扩展与内嵌collectionView上传图片效果
-
html5 div布局与table布局详解
-
spark: RDD与DataFrame之间的相互转换方法
-
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
-
Android中AsyncTask与handler用法实例分析
-
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
-
详解iOS应用使用Storyboard布局时的IBOutlet与IBAction
-
Python跳出循环语句continue与break的区别
-
Android实现计时与倒计时的常用方法小结