什么是NoSQL?
- 开发人员正在使用一些创建大量的、快速变化的数据类型的应用程序,数据类型有结构化的,半结构化的,非结构话的和多态的样式
- 12到18个月的瀑布发展周期已经过去了。现在,小团队在没日没夜地工作着,软件快速更新换代,每周或两周推送代码,甚至会有每天多次的推送代码,以更新软件
- 曾经服务于有限受众的应用程序,现在必须一直处于开放状态提供服务,可从不同的设备访问并且来自世界各地的访问者多达百万级别
- 现在,各个组织都在使用开源软件、商品服务器和云计算,而不是大型单片机服务器和存储基础设施的横向扩展架构
NoSQL数据库的类型
- document databases :每一组key/value,其中value可以是复杂的数据结构,可以称之为文档。文档可以包括不同的键值对,或者键阵列,甚至是嵌套关系的文档 例如MongoDB
- Graph stores 是被用来存储数据网络的信息,例如社交连接。Graph stores包括Neo4J和Girapha
- key-vaule stores是最简单的NoSQL数据库。每一个单独的项以key和value的形式存储在数据库里。典型的这种数据库有:Riak和BerkeleyDB。有些key-value stores,例如Redis, 允许value有特定的数据类型
- wide-column stores,例如 Cassandra和Hbase, 优化了大型数据库的查询, 将数据以列的形式存储而不是传统的以行形式存储。
NoSQL的优势
- 大量快速变化的结构化,半结构化与非结构化的数据
- 表结构的快速变化,需求的不断更新
- 易于使用和灵活的面向对象编程
- 地理位置分散的横向扩展架构,而不是昂贵的单片架构
Dynamic schema 动态的模式
Auto-sharding 自动分片
Replication 复制
Integrated caching 集成缓存
NoSQL与SQL的对比
NoSQL和SQL对比 | ||
|
SQL databases |
NoSQL databases |
类型 |
只有一种形式(SQL database) |
许多种不同的类型,包括键值对存储,文档存储,图形存储 |
发展历史 |
开发于1970s |
开发于2000年代末,以处理SQL数据库的局限性,特别是可扩展性,多结构化数据,地理位置分布,以及应用程序的快速更新换代 |
举例 |
MySQL,Oracle,Postgres |
MongoDB,Hbase,Neo4j,Redis,Memcached |
数据存储模式 |
每个记录(例如“雇员”)以表的形式存储为行,每列存储有关该记录的特定数据(例如“年龄”,“聘用日期”),非常像电子表格。相关数据存储在单独的表中,然后在执行更复杂的查询时连接在一起。例如,“办公室”可能存储在一个表中,“员工”可以存储在另一个表中。当用户想要查询员工的工作地址时,数据库引擎将“员工”和“办公室”表连接在一起,以获取所需的所有信息。 |
基于数据库类型的不同。例如,键值对存储和SQL数据库类似,但只有两列(key,value),更复杂的信息有时会以blob在value列存储。文档数据库完全取消了表和行的模型,将所有相关的数据存储在一起,以json或其他格式的存储在单个文档中。 |
表模式 |
结构和数据类型需要提前确定。如果要存储数据的新的信息,整个表必须要修改,在此期间数据库必须offline |
通常是动态的,具有一些执行数据验证规则。应用程序可以随时添加新的字段,与SQL表行不同,可根据需要将不同的数据存储在一起,对某些数据库(宽列存储),动态地添加新字段更具有挑战性 |
扩展 |
垂直添加服务器。 |
水平添加服务器 |
是否开源? |
开源(MySQL)与非开源(Oracle)混合 |
开源 |
是否支持事务? |
当然 |
有的情况是支持的(文档数据库) |
数据的操作 |
专门的语言,select,insert,update |
通过面向对象的api |
数据一致性 |
当然 |
依赖于具体的产品。MongoDB具有可读性的一致性,其他的提供最终的一致性 |