关系型数据库与NOSQL数据库的应用场景

2022-11-16 02:16李立猛
电子技术与软件工程 2022年16期

李立猛

(中国信息通信研究院 北京市 100191)

之前SQL 数据库统治着整个世界,通常,开发人员,数据库管理员和IT 运维人员对SQL 数据库非常熟悉,然而,随着WEB 技术的普及,人们逐渐发现关系数据库无法满足互联网和大数据的需求,这就导致了NOSQL 数据库的诞生,在一些情况下NOSQL 数据库比关系型数据库更具有优势;本文介绍了SQL 及NOSQL 数据库在应用方面的优缺点,并以实际构建的云平台环境出发总结出关系型(SQL)数据库及非关系型(NOSQL)数据库的应用场景。

1 关系型(SQL)数据库介绍

1.1 关系型(SQL)数据库定义

关系型(SQL)数据库,关系型数据库建立在关系型数据模型的基础上,是借助于集合代数等数学概念和方法来处理数据的数据库;它以行和列的形式来存储数据,基本单位为表;在关系型数据库中,实体以及实体间的联系均由单一的结构类型来表示,这种逻辑结构是一张二维表,多个表形成了关系型数据库;用户通过SQL 来增、删、改、查数据库中的数据。

1.2 主流关系型(SQL)数据库产品介绍

目前市面上使用较多的关系型数据库有甲骨文公司的Oracle、微软公司的SQL Server、Access、IBM 公司的DB2、Sybase 公司的Sybase、英孚美软件公司的Informix 以及开源的MySQL 等都是关系数据库。

1.3 关系型数据库查询语言SQL

关系型数据库的查询语言也叫结构化查询语言(Structured Query Language)简称SQL,是一种特殊的使用脚本执行的编程语言,主要用于数据库的增、删、改、查等相关操作,一类是数据结构的定义操作,另一类是数据的处理操作;这些在数据库的控制中的操作主要通过DBMS来进行的。

SQL 功能强大并且简单易学:SQL 语言设计巧妙简洁、语法简单易于学习,共使用了9 个动词完成数据定义、数据操纵、数据控制功能,这些动词分别为: CREATE、ALTER、DROP、 SELECT、 INSERT、 UPDATE、DELETE、GRANT、 REVOKE。

SQL 语言具有很强的移植性:几乎所有的关系型数据库管理系统都支持SQL 语言,用户就比较容易将原先使用数据库从一个转到另一个,而且使用SQL 标准编写的程序都是可以移植的。

1.4 关系型数据库优缺点

1.4.1 关系型数据库优点

(1)标准化模式。虽然 SQL 数据库的标准化模式僵硬且难以修改,但它确实具有一些优势。添加到数据库的所有数据都必须符合由行和列组成的链接表模式。有些人可能会发现这种局限性,但当数据一致性、完整性、安全性和合规性非常重要时,它会很有帮助。

(2)大型用户社区。在将近 50 年的历史中,SQL 编程语言已经非常成熟且仍被广泛使用。它有一个强大的社区,无数专家愿意分享技巧和成熟的最佳实践。它可以提高技能和协作。甚至SQL 供应商可以提供额外的支持。

(3)无需代码。SQL 是一种用户友好的语言。可以使用简单的关键字来管理和查询数据库,几乎不需要编码。大多数开发人员都在大学里学习过SQL。

(4)合规性。关系数据库表的高度结构化特性使SQL数据库能够符合原子性、一致性、隔离性和持久性 (ACID)。这种合规级别使表保持同步并保证事务的有效性。当您运行的应用程序没有出错的余地并且需要最高级别的数据完整性时,这可能是最正确的选择。

1.4.2 关系型数据库缺点

(1)硬件。SQL 数据库的标准是垂直扩展,其中容量只能通过增加现有服务器上的 RAM、CPU 和 SSD 等功能或迁移到更大、更昂贵的服务器来扩展。随着数据的增长,需要不断增加硬盘空间,并且需要更快的机器来运行不断发展的技术。数据库供应商会要求您定期升级硬件来运行他们的最新版本。在这种环境下,硬件很快就会过时。每次升级肯定是面临着昂贵和资源密集型的硬件设备。这是一个永无止境的“仓鼠轮”。

(2)数据规范化。在数据存储成本很高的时候开发的关系数据库试图否定数据重复。每个表都有不同的信息,它们可以使用共同的值进行连接和查询。然而,随着 SQL 数据库变得越来越大,大量表之间所需的查找和连接可能会减慢速度。

(3)刚性。SQL 数据库的模式必须在使用前定义。而且修改通常很困难并且需要大量资源。因此,在数据库投入生产之前,需要在前期规划上投入大量时间。因此,只有当您的所有数据也是结构化的并且您不期望在数量或数据类型方面发生太大变化时,它们才适用。

(4)资源密集型扩展。SQL 数据库通常通过扩大硬件投资来垂直扩展。这是昂贵且耗时的。这种增加的复杂性放大了所花费的时间和资源。这项工作可能包括编码,需要高技能、高薪的开发人员。随着数据量的增长,扩展SQL 数据库就像玩一场永无止境的标签游戏,完美的设置总是遥不可及。

2 NOSQL数据库基本理论

2.1 非关系型( NOSQL)数据库定义

NOSQL 的英语解释翻译为:“non‐relational”, 也叫做“Not Only SQL”。NoSQL 指的是非关系型的数据库,是对不同于传统的关系型数据库的数据库管理系统的统称,传统的RDBMS 使用SQL 语法来存储和查询数据。相反,NoSQL 数据库系统包含可存储结构化、半结构化、非结构化和多态数据的多种数据库技术。

2.2 非关系型(NOSQL)数据库类型

主流非关系数据库大概包括几类:键值(key‐value)数据库如:Redis;列存储数据库如:hbase;文档型数据库如:MongoDB;全文检索数据库如:ElasticSearch;图数据库如:Neo4j。

2.3 非关系型( NOSQL)数据库优缺点

2.3.1 NOSQL 数据库优点

(1)适用当前大数据处理应用场景,当数据量较大、数据存储格式较为复杂应用场景非关系型数据库非常适用,可以通过存储多样性的方面来区别于传统的关系型数据库,其结构化简单,尤其在大数据量下,具有非常高的读写性能。

(2)具体良好的横向扩展能力,非关系型(NOSQL)数据库具体较好的横向扩展能力,区别于传统关系数据库的纵向扩展方式,使得数据库对于数据不足时扩展能力更为灵活。

(3)处理性能更高,非关系型(NOSQL)数据库可以采用缓存的读写方式,读取速度更快,NOSQL 数据库可以通过键‐值对的方式获取数据,比传统关系型数据库直接使用SQL 查询效率更高;还有NOSQL 数据库存在记录级的Cache,这种较细粒度的缓存使得它在缓存方面具有较高的性能。实际场景中Redis 和 Memcache 均采用这种方式存储。

(4)数据模型设计更加灵活,在传统的关系型数据库中,我们需要建表及字段,当它们无法满足需求并进行扩展时,这个过程繁琐而工作量具大,而NoSQL 数据库不需要提前为存储的数据建立相应字段,并可以根据存储的形式自定义的数据格式。

2.3.2 NOSQL 数据库缺点

(1)没有标准化的语言。没有执行NoSQL 查询的标准语言。用于查询数据的语法因不同类型的NoSQL 数据库而异。与只有一种易于学习的语言需要掌握的SQL 不同,NoSQL 的学习曲线更陡峭。如果开发人员之前的所有经验都包括构建和管理图形数据库,那么他们可能很难快速掌握在宽列数据库上的工作。

(2)较小的用户社区。十多年来,开发人员一直在使用NoSQL 数据库,并且社区正在迅速发展。但是,它不如SQL 社区成熟。因此,解决未记录的问题可能会更加困难。NoSQL 方面的顾问和专家也较少。

(3)复杂查询效率低下。灵活性是有代价的。由于NoSQL 数据库中存在多种数据结构,因此查询效率不高。且没有标准接口来执行复杂的查询。即使是简单的查询也可能需要编程经验。这意味着更多的技术人员和成本高昂的员工来提供技术服务。

(4)数据检索不一致。NoSQL 数据库的分布式特性使数据能够更快地可用。但是,它也可能使确保数据始终一致变得更加困难。查询可能并不总是返回更新的数据,并且可能会收到不准确的信息。使用其分布式方法,数据库可以同时返回不同的值,具体取决于恰好被查询的服务器。

2.4 几种常用的NOSQL数据库

2.4.1 MongoDB 数据库

MongoDB 由C++语言编写、支持分布式存储的文档型数据库,该类数据库是以文档为存储数据信息的基本单位,它在处理复杂的HTML 格式的网页的数据时,具有较高的效率,我们可以把整个的HTML 的数据看成是个整体的DOCUMENT 结构,以JSON 对象的格式存储于MongoDB数据库,便得数据结构更加清晰合理化。

2.4.2 redis 数据库

redis 数据库是一款基于内存实现的键值型 NoSQL 数据库,键值数据库是一种非关系数据库,它是由key‐value 形式来存储数据。key 作为数据库查询检索的唯一标识,value则为key 所对应的数据集合。键和值都可以是从简单对象到复杂复合对象的任何内容,通常也被称为数据结构服务器,这是因为它可以存储多种数据类型,比如 string(字符串),hash(哈希散列),list(列表),set(集合)和 sorted set(有序集合)等。

2.4.3 hbase 数据库

Hbase 是基于hadoop 的HDFS 文件系统的分布式列数据库,它具有面向列、高性能、可伸缩、高可靠的非关系型数据库,目前采用开源的方式来提供服务,它可以存储非结构的松散数据,该类数据库对列的存储非常灵活,只需要在特定的行中添加数据即可,每行数据也无需保持一致。

2.4.4 Neo4j 数据库

Neo4j 是一个非关系数据库‐图形数据库,图形数据库采用图的方式表示实体之间的映射关系,每个实体存储数据库的节点中,关系是以有向图的形式存储在边中,通常实体之类的关系存储在数据库的网络数据结构中,Neo4j 底层会以图的方式把用户定义的实体以及关系存储起来,通过这种方式,可以高效的实现从某个节点开始,通过节点与节点间关系,找出多个节点间的联系。

2.4.5 Elasticsearch 数据库

ElasticSearch 是基于JAVA 开发的使用RESTful 接口的搜索服务器,它的底层是基于Lucene 的倒排索引的方式来实现、并且支持分布式布置的搜索引擎平台;ElasticSearch的全文检索引擎广泛应用于互联网的大数据及云计算等多个方面,它具有高稳定、高可行、高性能、检索方便快捷等方面的优势,为互联网云平台提供搜索引擎服务。

3 构建企业级的统一资源发布云平台

3.1 统一资源发布平台介绍

本次构建系统主要包括内容发布管理,内容编辑,内容审核的云平台系统;本平台支持敏感词过滤,支持模板化内部管理平台,对于企业级的团队开发、团队协作及团队应用等方面作出更好的帮助作用,本平台为基于上述基础架构构建的强大功能于一身的云服务平台。

统一资源发布云平台包括后台基础数据平台及用户提供访问的互联网平台;该系统后台主要功能包括:文档管理、栏目管理、站点管理及权限管理;基本平台采用微服务系统来进行构建,包括:文档管理服务、栏目管理服务、站点管理服务、权限管理服务、单点论证服务、知识管理服务;其中文档管理服务包括新建文档、删除文档、编辑文档、移动文档、发布文档、预览文档、导入导出文档、文档评论等功能模块;栏目管理服务包括:新建栏目、删除栏目、修改栏目、移动栏目、发布栏目、预览栏目、栏目分发、栏目聚合、栏目回收站等功能;站点服务包括:新建站点、修改站点、删除站点、定位搜索、站点属性、站点分发、信箱管理、站点回收站等功能;权限管理服务包括:新建权限、修改权限、删除权限、新建角色、修改角色、删除角色、新建用户、修改用户、删除用户、用户赋权等;单点论证服务包括:单点登陆接入等;知识管理服务包括:知识构建、知识图谱等;互联网平台包括用户资源浏览、用户评论及问卷信息提交、全文检索 、用户浏览及用户画像等相关服务组成

3.2 统一资源发布平台数据库设计

3.2.1 对于统一资源管理平台及互联网平台(评论问卷)功能数据库设计

基本的内容管理平台包括了文档管理、栏目管理、站点管理、权限管理、单点登陆等相应的模块,它们功能要求大概如下:

(1)数据库都是结构化的数据,以文档管理为例,文档管理包括文档基本属性:标题、正文、关键词、摘要、发布时间等相关信息,具有固定的表的结构。

(2)对事务要求高,对于文档、栏目、站点等相关操作均属于事务操作,而且关系型数据库对事务支持较好。

(3)具有复杂查询应用场景,如查询当前用户在某站点某栏目下边的文档使用权限等功能,如果使用NOSQL 数据库很难实现复杂场景的查询功能;其四、目前数据库采用oracle 进行数据存储。

3.2.2 对于爬虫栏目及日志分析数据库设计

内容管理平台的栏目需要爬取站外内容来作为本网站的资源,外网站的资源很难使用统一的结构来对数据进行规范化管理,因此选择文档型数据库进行存储,实例中选择mongodb 进行做为数据库存储。

3.2.3 平台缓存数据库设计

内容管理平台单点登陆服务、栏目管理及文档管理的枚举数据,选择redis 数据库加进行加工存储,使用redis 数据库存储更好和单点登陆的框架进行轻量集成,将栏目和文档操作的枚举数据放入缓存数据库,使用系统更有效稳定的运行。

3.2.4 互联网平台全文检索库数据库设计

使用管理内容管理系统发布至外网的互联网平台,数据量较大、内容较多、存在结构化及非结构化数据,大量的文本数据,因此选择Elasticsearch 数据库作为全文检索数据库,具体较好的伸缩性及分布式索引技术,为互联网用户提供更完善检索平台

3.2.5 后台资源知识图谱数据库设计

后台资源知识图谱构建选择Neo4j 图数据库作为存储数据库,通过对后台文档资源的实体抽取功能来构建知识图谱,解决了关系型数据库存储图结构数据时出现的空间浪费等问题。

3.2.6 互联网平台浏览和用户画像数据库设计

互联网平台特点为用户量较大,用户角色为多维度数据;互联网用户行为分析对于用户画像会有成千上百的标签;在设计选用Hbase 作为用户浏览及用户画像存储的数据库

3.2.7 总体数据库设计

根据各模块情况设计出总体数据库架构如图1 所示。

图1:总体数据库架构图

基础平台主要是以关系型数据库mysql 为主,支撑平台包括缓存数据库(REDIS),图数据库(Neo4j),文档数据库(MongoDB),应用平台包括了关系型数据库(mysql),全文档检索库(Elasticsearch),列数据库(Hbase)及缓存数据库(REDIS)。图1 为总体数据库架构图。

3.3 实际应用场景分析

3.3.1 关型数据库应用场景

(1)由于关系数据库使用统一结构化的查询语言SQL,关系型数据库都支待SQL 语言进行操作,因些移植其它数据库将比较方便。

(2)可以进行复杂查询如关联查询:可以使用结构化查询语言SQL 进行关联查询,支持复杂查询与统计分析。

(3)支持高度事务性系统:适用于需要大量原子性复杂事务的应用程序。

3.3.2 MongoDB 数据库

(1)第三方信息的抓取与存储。在业务场景中会使用到第三方的数据,当接入多个第三方平台时,多个平台数据结构可能不一致、自身的存储系统结构设计等情况。这时候我们使用MongoDB 来存储就很好的避免了这个问题

(2)应用服务器的日志记录。日常我们会把一些应用日志存储到文本格式的文件中,这样不便于查看同时也不便于统计等。通过MongoDB 存储,既可以很好的存储、统计同时也方便不同的业务场景下日志数据格式不一致等情况。

3.3.3 hbase 数据库

(1)半结构化或非结构化数据。数据结构字段不够确定、较多、较复杂时适合用HBase;当业务发展需要对存储信息修改时,RDBMS 需要停机维护,而HBase 支持动态增加。

(2)记录非常稀疏。RDBMS 的行有多少列是固定的,为null 的列浪费了存储空间。而如上文提到的,HBase 为null 的Column 不会被存储,这样既节省了空间又提高了读性能。

(3)多版本数据。根据Row key 和Column key 定位到的Value 可以有任意数量的版本值,因此对于需要存储变动历史记录的数据,用HBase 就非常方便了。

(4)超大数据量。当数据量越来越大,RDBMS 数据库撑不住了,于是出现了分库分表、读写分读等策略;这样使用成本和压力倍增;而采用HBase 只需要加机器即可,HBase 会自动水平切分扩展,保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce)。

3.3.4 Neo4j 数据库

(1)使用图数据库构建知识图谱。

(2)用于离线图分析的技术。

3.3.5 redis 数据库

(1)缓存:合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis 提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis 用在缓存的场合非常多。

(2)排行榜:Redis 提供的有序集合数据类构能实现各种复杂的排行榜应用。

(3)计数器为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。Redis 提供的incr 命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。

3.3.6 Elasticsearch 数据库

对海量数据的全文检索。

4 总结

本文主要介绍了关系数据库及NOSQL 数据库的基本理论以及关系型数据库及NOSQL 数据库优缺点,从实际运用场景出发,介绍云平台数据库的构建过程,总结了实际各数据库的应用场景,虽然NOSQL 数据库在最近大数据及互联网技术不断发展的今天,其技术得到了很大的发展,但是还无法彻底替代关系数据库在应用中的地位,相信随着互联网及云平台技术不断,无论是关系型数据库还是NOSQL 数据库在各自领域发挥越来越重要的作用。