一、NoSql简介
NoSQL (Not Only SQL ),意即不仅仅是SQL , 泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。
1、关系型数据库
关系型数据库代表:mysql,oracle,sqlserver
特点:
`1. 以表结构存储数据 2. 表与表之间存在关系 4. 持久化数据到硬盘 6. 支持事务控制 5.用于传统项目 数据安全性(钱) 数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。`
2、非关系型数据库
非关系型数据库代表:redis,HBase,Mongodb
非关系型特点:
`1. 不以表结构存储数据 2. 也没有关系 3. 事务弱化,没有事务 4. 数据存储在内存 5. 大数据相关项目,核心考虑:程序运行效率,弱化事务`
3、对象型数据库【对象型数据库】
存储对象的,已经被淘汰
二、NoSQL有什么用
1、Nosql的优点
随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。
如:
商城网站中对商品数据频繁查询、
对热搜商品的排行统计、
订单超时问题、
以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据库实现就显得非常复杂,
虽然能实现相应功能但是在性能上却不是那么乐观。
nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是sql。
nosql主要针对大数据处理!
2、Nosql的优缺点
(1)非关系型数据库优点:
海量数据的增删改查是可以的。
海量数据的维护和处理非常轻松。
NoSql具有扩展简单、高并发、高稳定性、成本低廉的优势。
可以实现数据的分布式处理。
(2)非关系型数据库缺点:
NoSql暂时不提供sql支持,会造成开发人员额外学习的成本。
数据和数据没有关系,他们之间就是单独存在的。
非关系数据库没有关系,没有强大的事务关系,没有保证数据的完整性和安全性适合处理海量数据,保证效率,不一定安全。
持久化的性能低。
出道时间短,功能没有关系型数据库完善。
NoSql的架构特性决定了其很难保证数据得完整性,适合一些特殊的应用常见使用。
贵 内存比较贵
效率越高 数据安全性低
3、目前开发主流 关系型数据库+非关系型数据
核心数据(关系型数据)+次要数据(非关系型数据库)
三、NoSql数据库的四大分类
1、键值(key-value)存储数据库
(1)键值型
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。
(2)特点
Key/value模型对于IT系统来说的优势在于简单、易部署。
但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。
(3)相关产品
`Tokyo Cabinet/Tyrant, Redis key value 内存 Ssdb key value 磁盘 Voldemort Oracle BDB`
2、列存储数据库,海量存储
`# 1.说明 - 这部分数据库通常是用来应对分布式存储的海量数据。 传统应用 互联网 大数据领域(key指向多个列) # 2.特点 - 键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。 # 3.相关产品 - Cassandra、HBase(hadoop)、Riak.`
3、文档性数据库
{“id”:“21”,“name”:“zhangsan”,“age”:“23”}
`# 1.说明 - 文档型数据库的灵感是来自于Lotus Notes办公软件的, 而且它同第一种键值存储相类似该类型的数据模型是版本化的文档 ,半结构化的文档以特定的格式存储,比如JSON。 文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高 # 2.特点 - 以文档形式存储 # 3.相关产品 - MongoDB、CouchDB、 MongoDb(4.x)(单条支持事务) mysql inndb 单条加锁 myisam 表. 国内也有文档型数据库SequoiaDB,已经开源。`
4、图形(Graph)数据库(阿里云 OSS 对象存储 图片 视频 音频)
`# 1.说明 - 图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型, 并且能够扩展到多个服务器上。 - NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。 许多NoSQL数据库都有REST式的数据接口或者查询API。 # 2.特点 # 3.相关产品 - Neo4J、InfoGrid()、 Infinite Graph、`
五、NoSQL应用场景
数据模型比较简单
需要灵活性更强的IT系统
对数据库性能要求较高
不需要高度的数据一致性