数据库介绍-非关系型数据库

文章目录

非关系型数据库

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的数据库。

NoSQL 不依赖业务逻辑方式存储,数据存储的类型不需要一个固定形式。因此大大的增加了数据库的扩展能力。

  • 不遵循 SQL 标准
  • 不支持 ACID
  • 远超于 SQL 的性能
  • 易扩展
  • 大读写量,高性能
  • 数据模型灵活
  • 高可用

NoSQL数据库可以解决SQL数据库巨大数据量下查询缓慢,单一的关系型数据模型难以应对数据种类复杂等情况的问题。

NoSQL适用场景:

  • 对数据高并发的读写

  • 海量数据的读写

  • 对数据高可扩展性

NoSQL不适用场景:

  • 需要事务支持

  • 基于 sql 的结构化查询存储,处理复杂的关系,需要即席查询

NoSQL的分类

键值对存储数据库

键值型数据库通过 Key-Value 键值的方式来存储数据,Key 作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤(比如 WHERE),如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。键值型数据库典型的使用场景是作为内存缓存。

例如:Redis(Redis还支持事务和数据的持久化,能够快速的增删。应用场景有排行榜、秒杀、抽奖。)

Redis

优点:

1.支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)

2.支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失  的手段。

3.支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。

4.单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。

5.支持pub/sub消息订阅机制,可以用来进行消息订阅与通知。

6.支持简单的事务需求,但业界使用场景很少,并不成熟。

缺点:

1.Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)。

2.支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点。

3.Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存

耗用。

列存储数据库

列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Server 等数据库都是采用的行式存储,而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的 I/O,适合于分布式文件系统,不足在于功能相对有限。

例如:HBASE是一个高可靠性、高性能、面向列、可伸缩的非关系型数据库,利用 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)提供分布式数据存储,一个表可以有上十亿行,上百万列。在实时读写、随机访问超大规模数据集方面十分优秀,多用于数据分析、数据挖掘。

文档存储数据库

文档型数据库可存放并获取文档,可以是XML、JSON等格式。在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的"值"。

例如:MongoDB(MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。Mongo最大的特点是它支持的查询语言非常强大,在海量数据中查询速度非常快,支持分布式文件系统。)

MongoDB

优点:

1.更高的写负载,MongoDB拥有更高的插入速度。

2.处理很大的规模的单表,当数据表太大的时候可以很容易的分割表。

3.高可用性,设置M-S不仅方便而且很快,MongoDB还可以快速、安全及自动化的实现节点

(数据中心)故障转移。

4.快速的查询,MongoDB支持二维空间索引,比如管道,因此可以快速及精确的从指定位置

获取数据。MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内

存资源相当丰富的话,这将极大地提高数据库的查询速度。

5.非结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从而

导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响,

整个过程会非常快速。
缺点:

1.不支持事务。

2.MongoDB占用空间过大 。

3.MongoDB没有成熟的维护工具。

图形数据库

图形数据库,利用了图这种数据结构存储了实体(对象)之间的关系。图形数据库最典型的例子就是社交网络中人与人的关系,数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题。如社交网络中人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。

例如:Neo4j是一款强健的,可伸缩的基于Java语言编写的高性能图数据库。能够高效的解决复杂的数据关系。比如好友推荐、商品推荐等就是使用了基于Neo4j的智能推荐引擎。

搜索引擎数据库

关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低。搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是"倒排索引"。

例如:Elasticsearch是一个高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据。分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。实时分析的分布式搜索引擎。可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

相关推荐
꧁༺朝花夕逝༻꧂7 分钟前
MySQL--数据备份
数据库·mysql
共享家95272 小时前
Linux常用命令详解:从基础到进阶
linux·服务器·数据库
我是个假程序员6 小时前
sql server数据库可疑修复
数据库
极限实验室8 小时前
如何使用 Nginx 代理 Easysearch 服务
数据库·nginx
whn19778 小时前
selectdb修改表副本
数据库
TDengine (老段)8 小时前
TDengine 中的视图
数据库·物联网·oracle·时序数据库·tdengine·iotdb
Kyrie_Li9 小时前
Redis-Sentinel(哨兵模式)
数据库·redis·sentinel
计算机毕设定制辅导-无忧学长10 小时前
TDengine 数据写入优化:协议选择与批量操作(一)
网络·数据库·tdengine
Mr.洛 白10 小时前
OpenEuler/CentOS一键部署OpenGauss数据库教程(脚本+视频)
数据库·opengauss·gaussdb·国产数据库安装·安装脚本
炬火初现10 小时前
redis-cpp-cpp如何使用lua脚本
数据库·redis·lua