首页 > 编程知识 正文

为什么叫关系型数据库(什么时候用非关系型数据库)

时间:2023-05-03 20:24:31 阅读:86260 作者:1481

【本文详细介绍非关系型数据库的基本概念和常见的非关系型数据库,欢迎读者朋友们阅读、转发、收藏】

1 基本概念

NoSQL是指非关系数据库。 随着互联网web2.0网站的兴起,传统的关系数据库与web2.0网站相对应,特别是大型并发社交网络服务web2.0纯动态网站暴露出了无力、难以克服的诸多问题

1、高性能——对数据库的高并发读写有需求

Web2.0网站基于用户的个性化信息实时生成动态页面,提供动态信息,因此几乎不能使用动态页面静态化技术。 因此,数据库的并发负载非常高,往往必须满足每秒上万次的读写请求。 虽然关系数据库还不能满足数万次的SQL查询,但如果满足数万次的SQL写入数据请求,硬盘IO将无法再承受。 其实,在一般的BBS网站中,也存在对高并发写入请求的需求,如实时统计JavaEye网站等在线用户的状态,记录热门帖子的点击量和投票数等,因此这是相当普遍的需求

2、对高效存储和访问Huge Storage ——海量数据的需求

在Facebook、twitter、Friendfeed这样的社交网站上,每天都会有大量的用户活动,以Friendfeed为例,一个月就达到了2亿5千万个用户的活动。 对关系数据库来说,在2亿5千万条记录的表中进行SQL查询效率非常低,难以忍受。 例如,大型网站的用户注册系统,例如腾讯,盛大,往往拥有上亿个账户,相关数据库也很难应对。

3、highscalabilityhighavailability ——对数据库的高可扩展性和高可用性需求

在基于web的体系结构中,数据库的横向扩展是最困难的。 当app系统的用户数量和访问数量每天都在增加时,不能像web服务器和app服务器那样通过添加硬件和服务节点来轻松扩展性能和负载。 在许多需要提供24小时无中断服务的网站上,数据库系统升级和扩展非常困难,经常需要停机维护和数据迁移,无法通过不断添加服务器节点来扩展数据库

为了解决大数据集合的多重数据种类带来的课题,特别是大数据的应用课题,诞生了NoSQL这样的非关系型数据。

2 NoSQL 数据库分类

1,密钥值(密钥值)存储数据库

这样的数据库主要用于哈希表。 该表有特定的键和指针,指向特定的数据。 Key/value模式对IT系统的好处是简单、易于部署。 但是,如果DBA只查询或更新某些值,则Key/value将变得没有效率。

2、列存储数据库

该数据库的一部分通常用于支持分布式存储的大容量数据。 虽然键还存在,但其特征是指向多列。 这些排是列家属安排的。 由于列存储数据库包含各列,因此如果可以进行更快的扫描,则只涉及列的一小部分。

数据库索引是一种数据结构,可以快速查找和写入存储空间中的数据(更新索引)。 索引映射到数据的行数,列数据库映射数据到行数,因此计算速度更快。

3、文档类型数据库

文档类型数据库的灵感来源于Lotus Notes办公室软件,类似于第一个键值存储。 这种类型的数据模型是版本化文档,半结构化文档以特定格式(如JSON )存储。 您可以将文档类型数据库视为键值数据库的升级版,也可以在之间嵌套键值。 此外,文档类型数据库比键值数据库的查询效率更高。

以报纸为例,基于文档的存储可以将报纸上的文章另存为一个实体,从而减少了查看文章内容所需的时间。

4、图形(Graph )数据库

图表结构的数据库与其他矩阵和刚体结构的SQL数据库不同,可以使用灵活的图表模型,扩展到多个服务器。 或者网络数据主要有两个组成部分。

节点:实体本身。 在社交网络上,这可能是人。

边缘:实体之间的关系。 这种关系由一条线表示,它有自己的特性。 边可以有一个方向。

图变得非常复杂,可以给出足够的关系和实体类型。

因此,我们总结了NoSQL数据库适用于以下情况:

1、数据模型比较简单

2、需要更灵活的IT系统

3、对数据库性能要求高

4、不需要高度的数据一致性

5、容易对给定的key映射复杂值的环境。

3 常见 NoSQL 数据库

1

) Redis

Redis 是一个开源的使用 ANSI C 语言 编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value 数据库 ,并提供多种语言的 API 。从 2010 年 3 月 15 日起, Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始, Redis 的开发由 Pivotal 赞助。

Redis 本质上是一个 Key-Value 类型的内存数据库,很像 memcached ,整个数据库系统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作, Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作。

Redis 的出色之处不仅仅是性能, Redis 最大的魅力是支持保存 List 链表和 Set 集合的数据结构,而且还支持对 List 进行各种操作,例如从 List 两端 push 和 pop 数据,取 List 区间,排序等等,对 Set 支持各种集合的并集交集操作,此外单个 value 的最大限制是 1GB ,不像 memcached 只能保存 1MB 的数据,因此 Redis 可以用来实现很多有用的功能,比方说用他的 List 来做 FIFO 双向链表,实现一个轻量级的高性 能消息队列服务,用他的 Set 可以做高性能的 tag 系统等等。另外 Redis 也可以对存入的 Key-Value 设置 expire 时间,因此也可以被当作一 个功能加强版的 memcached 来用。

Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,并且它没有原生的可扩展机制,不具有 scale (可扩展)能力,要 依赖客户端来实现分布式读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。目前使用 Redis 的网站有 github , Engine Yard 。

2 ) MongoDB

MongoDB 是一个 开源的面向文档的 NoSQL 数据库系统,目前由 10gen 开发并维护,介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。

Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

Mongo 主要解决的是海量数据的访问效率问题,根据官方的文档,当数据量达到 50GB 以上的时候, Mongo 的数据库访问速度是 MySQL 的 10 倍以 上。 Mongo 的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理 0.5 万- 1.5 次读写请求。

因为 Mongo 主要是支持海量数据存储的,所以 Mongo 还自带了一个出色的分布式文件系统 GridFS ,可以支持海量的数据存储。

3 ) HBASE

HBase – Hadoop Database ,是一个高 可靠 性、高性能、面向列、可伸缩的 分布式存储系统 ,利用 HBase 技术可在廉价 PC Server 上搭建起大规模 结构 化 存储 集群。

与 FUJITSU Cliq 等商用大数据产品不同, HBase 是 Google Bigtable 的开源实现, 类似 Google Bigtable 利用 GFS 作为其文件 存储 系统, HBase 利用 Hadoop HDFS 作为其 文件 存储 系统 ; Google 运行 MapReduce 来处理 Bigtable 中的海量 数据 , HBase 同样利用 Hadoop MapReduce 来处理 HBase 中的 海量 数据; Google Bigtable 利用 Chubby 作为协同服务, HBase 利用 Zookeeper 作为对应。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。