您当前的位置:首页 > 电脑百科 > 数据库 > 百科

关系数据库系统正在成为一个问题,该怎么办呢?

时间:2023-09-05 12:44:38  来源:今日头条  作者:启辰8

我与关系数据库的关系可以追溯到 90 年代末。 这是我接触计算机和编程的第一步,成为我作为软件工程师的正规教育和学习的重要组成部分,并一直伴随着我的职业生涯。 我几乎爬遍了整个 RDBMS 兔子洞,但仍然喜欢它。

在我的职业生涯中,我接触过 MySQL、Postgres、Oracle、Microsoft SQL Server、DBase、Access、SQLite、DB2、MariaDB、AWS RDS、Azure SQL、google Cloud SQL 以及几乎所有我能接触到的 RDBMS。 如果你不喜欢 SQL,就不可能喜欢 RDBMS,因为 SQL 本身就是一个兔子洞。 而且并非所有 SQL 都是相同的。 MySQL 有自己的行话,Microsoft 的 T-SQL 和世界著名的 Oracle PL/SQL。 可能没有必要提及它们彼此不兼容。

都是关系型数据库吗? 一直都是。

相信我,我都见过——金融、交通、酒店、社交媒体、视频流服务等等。 无论您走到哪里,您都可能会找到关系数据库。 世界似乎完全依靠关系数据库来运行,这些数据库主要为 Oracle、IBM 和 Microsoft 填补了空缺。 如果你需要很大的东西,比如非常大的东西,你就会打电话给甲骨文、IBM 或微软。 很有可能,您的需求也可能会引导您选择 SAP——尤其是在金融领域。

据说第一个 RDBMS 早在 20 世纪 70 年代初就出现了,当时结构化英语查询语言(SEQUEL,后来缩写为 SQL)被发明。 Oracle 于 1979 年发布了其第一个数据库,三年前,Honeywell 于 1976 年发布了 Multics 关系数据存储(据说是世界上第一个关系数据库)。 几年后,我们将回顾关系数据库管理系统 (RDBMS) 的 50 年。 毫不奇怪,关系数据库管理系统成为我们现代社会和经济的支柱。 可以肯定地说,每个人都至少拥有一个,并且每个人都至少有一个关系数据库,除非您住在山洞里。

你的社会保障记录、你的护照、你的警察记录、你的出生证明以及所有这些都愉快地存储在政府拥有的大型关系数据库系统中——很可能来自微软、IBM、SAP 或 Oracle。 想要去海滩旅行吗? 您的门票、预订以及所有这些都位于关系数据库中。 无论您向任何可怕的组织提供什么数据,最有可能最终都会出现在关系数据库中。

大多数数据库实现都很简单

然而,大多数数据库以某种方式以类似于 php 和 MySQL 或 Microsoft Access 和 VBA(Visual Basic for Applications)的形式存在。 这些不是复杂的数据库管理系统,而是仅使用 RDBMS 来存储数据的小型应用程序。 对于他们中的许多人来说,RDBMS 一开始就是一种巨大的杀伤力。 只有关系数据库的流行才促使开发人员选择它们。 大学、学校、编程课程都教授 SQL 和关系数据库。 大多数开发人员可能倾向于使用关系数据库。

您可能也同意大多数软件开发人员都不是优秀的数据库开发人员。 有时是因为他们不在乎,但主要是因为很少有学习资源可以教您如何正确构建关系数据库。 大多数大学、学校、书籍和课程都重点关注 SQL、规范化和事务。 就是这样,它显示在野外的关系数据库中。

“外部应用程序永远不会知道存在哪些表”——一位经验丰富的 DBA,于 2012 年退休,希望保持匿名

一般的开发者会对这种说法感到震惊。 对于经验丰富的数据库工程师来说,将整个关系数据库结构隐藏在视图和存储过程后面是常态。

数据库怪物已经变得不可替代

在 20 世纪 80 年代,所有组织都转向关系数据库。 总的来说,我指的是这个星球上的所有组织。 如果您搜索足够长的时间,您可能仍然会发现尚未拥有计算机的政府组织。 通常,这些组织使用驻留在大型计算机中数十年的自定义构建数据库,从而增加了制造商和供应商的数据和支持费用。

这些定制的数据库将包含数十个对外界不可见的相互交织的表。 无数的触发器、函数、过程和视图不仅会组织存储,还会运行该组织的所有业务流程。 应用层上的应用程序为普通人提供了使用数据库的接口。 然而,这些应用程序大多不操作任何业务流程,而只是调用存储过程来执行这些流程。

由于 80 年代的数据库顾问几十年前已经退休,因此大多数定制的数据库系统都存在,其 SQL 应用程序代码大多无人维护。 对于许多大型组织来说,这些数据库应用程序已经成为黑匣子。 他们不知道它们是做什么的,也不知道它们具体是如何工作的,更不用说它们应该如何维护了。 然而,企业严重依赖这些应用程序,而这些应用程序现在已经变得不可替代。 对这些应用程序进行逆向工程和重新架构已成为大量组织的唯一方法。 这些“遗留数据库迁移项目”的成本往往高达数百万美元。

想象一下,一家保险公司完全不知道如何在其主机上实际计算单个合同的风险。 他们无法告诉客户特定索赔会对他们的保费产生什么影响。 不知道该软件如何运行其业务的组织数量令人恐惧,同时又令人捧腹。 只有当你是客户并且黑匣子里有你的数据时才会令人恐惧。

关系数据库有什么问题?

我个人遇到过一些企业,非技术员工将中央关系数据库称为“Oracle”或“DB2”。 仅仅因为这对 IT 部门来说是一个很大的限制,以至于影响 RDBMS 的每个变更请求都将成为一项长达数月而不是几天的任务——IT 部门将责任归咎于“Oracle”。 中央数据库成为故障的中心点。 当数据库无法为促销提供服务时,促销就会走下坡路。 在桌子上添加一栏需要定期参加周日祈祷。 我们最好不要开始讨论查询性能。

问题? 关系数据库和设计这些数据库的原则推动您在该数据库内集中数据。 随着业务的增长,关系数据库会随着其产生的垃圾数据而增长。 最终,您的企业将在经济上无法摆脱关系数据库。

关系数据库来自不同的时代

关系数据库管理系统是在计算机与我们今天的计算机完全不同的时代发明的。 用例完全不同,这些系统必须处理的体积适合今天任何人的口袋。

《软件工程日报》第 979 集采访。

Jeff Meyerson(《软件工程日报》创始人):在 SQL 成为主要数据库类型之后,NoSQL 为何越来越受欢迎,有多种解释。 我们在这个节目中探讨了一些不同的理论。 请告诉我您对 NoSQL 流行原因的历史看法。

Rick Houlihan(MongoDB,前 AWS):嗯,当然。 我的意思是,归根结底,当人们开始处理大量数据时,我们使用了这么多年的关系数据库结果证明扩展性不太好。 这确实回到了它最初被发明的原因,关系数据库的出现是因为我们再次面临数据压力,处理数据的成本阻碍了我们扩展,而 关系型数据库减轻了存储系统的压力,因为规范化的数据模型对数据进行了去重,让我们释放了存储空间,可以说,这在三四年前是数据中心最昂贵的资源。

但现在,快进到今天,我们为每 GB 支付几美分,为每 CPU 分钟支付美元,实际上 CPU 不再只是这种固定资产,当它不做任何其他事情时,它会在空闲循环中旋转。 这是我们可以用来做其他事情的资产。 因此,可以这么说,连接数据和运行复杂查询确实不是我们愿意花钱的事情。

当您拥有需要符合 ACID 的结构化数据时,RDBMS 也非常强大。 然而,许多用例根本不需要 ACID 合规性。 其中包括视频流、游戏、社交媒体、互联网搜索等等。 所有这些用例都更注重速度和性能,而不是 ACID 一致性和原子性合规性。

互联网搜索引擎不需要向每个用户显示最新结果,也不是每个用户都需要相同的结果。 因此,ACID 合规性与互联网搜索引擎的用例完全无关。 任何头脑正常的人都不会将 RDBMS 用于大型互联网搜索引擎或社交媒体网站

解决方案? 专门构建的系统。

显然,具有“一刀切”态度的通用数据库很难在任何用例中取得优势。 尝试使用 RDBMS 进行事务、搜索、分析和任何其他用例很可能永远不会获得最佳结果。 因此,房间里显而易见的大象是专门构建的解决方案。 这些可以是数据库,甚至是关系数据库,但也可以是其他系统,例如专用搜索引擎甚至定制软件。

仅当您严格遵守微服务架构并且不构建“微服务单体”(其中所有微服务都在关系数据库等单一集中式数据管理系统上运行)时,使用专用数据管理的方法才有效。 微服务架构与整体数据库相结合的情况很常见,这使得微服务方法完全毫无用处。

对象、键值和文档存储

应用程序数据存储的首选应该是基本的键值存储,例如 Apache Cassandra、AWS DynamoDB、Google Cloud Spanner 或 Azure Cosmos DB。 键值存储提供高可扩展性、耐用性和简单性。 它们适用于所有基本应用程序用例,您只需要插入数据并使用最多 3-4 个键访问它。

如果您的数据需要更复杂的查询,例如 搜索或分析,您始终可以通过将数据从键值存储流式传输到其他系统来切换到专用搜索引擎或分析系统。 如果您根本不需要查询而只需要简单的数据存储,那么使用 AWS S3、Azure Blob 存储或 Google Cloud Storage 等对象存储是最佳实践方法。

MongoDB 或 AWS DocumentDB 等文档存储尝试提供关系数据库的替代方案,尽管它们通常具有相同的原理,只是不是关系数据库。 只是从表格转移到文档可能仍然会给您带来以前遇到的相同问题。

专用或定制的搜索引擎

关系数据库的一个常见用例是搜索。 这是关系数据库很少适合的用例。 在大多数情况下,搜索功能根本不需要符合 ACID。 Lucene、Solr、OpenSearch 或 ElasticSearch 等专门构建的搜索引擎可显着提高性能并降低运营成本。

根据使用案例,云提供商(例如 Google 的 Cloud Search)的现有产品可能已经更适合您的要求。 如果这些都不符合您的要求,那么考虑到 Go 等语言的开发速度(请参阅使用 Go 编写服务器软件),构建适合您需求的专用搜索软件并不是太牵强。 在直接进入您喜爱的关系数据库之前,绝对值得计算您的选择的影响。

交易数据库或区块链

关系数据库的主场是事务处理。 然而,这一领域目前受到 Amazon QLDB 等基于区块链的数据库系统的挑战。 大多数键值存储还提供 ACID 合规选项,允许您在其中安全地存储事务。 无论如何,始终建议为 OLTP(联机事务处理)和 OLAP(联机分析处理)使用不同的数据库环境。 访问事务通常由不超过 3-4 个键完成,因此键值存储也可能是事务的理想选择。

我亲自在生产环境中部署了 Amazon QLDB,并且不会再使用关系数据库。 可加密验证的交易存储的优点是可实现更高的可审计性。 虽然任何人都可以操作关系数据库中的事务,但 QLDB 使用事务的压力来跟踪记录的任何更改。 对于金融交易处理,QLDB 是我的首选系统。 但是,这取决于用例以及您的用例是否需要加密验证。

挑战现状

我喜欢使用存储过程、函数、触发器和视图编写 SQL ️。 使用 MySQL Workbench 设计关系数据库对我来说很有趣。 MySQL 8 中地理空间数据的最新功能令人惊叹。 您可以在关系数据库中做很多事情 - 全部集中在一处。 老实说,我有时会怀念在 MySQL、Oracle 或 SQL Server 中编写整个业务应用程序的日子。 但我需要对自己诚实:这在 80 年代是可以接受的。 进入 2023 年,计算和存储发生了变化,我们的数据中心和应用程序也发生了变化。

随着数据库系统、键值和对象存储、搜索引擎技术和编程语言的广泛应用,几十年来使用数据库的时代已经结束。 不再有关于 MySQL、MSSQL、Oracle 或 Postgres 是否是正确选择的无休止争论的项目。 今天的数据库和存储是根据具体情况决定的。 我经常发现自己编写了一个基于对象或键值存储的小型自定义存储策略。

今天,在实现软件或系统之前,我会考虑存储哪些数据以及如何访问数据。 然后,我经常花费数小时甚至数天的时间来寻找正确的数据存储方法。 当我对自己诚实时,关系数据库很少成为解决方案的一部分。 我经常看到集中式关系数据库的长期影响。



Tags:关系数据库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
关系数据库的演变:从过去到现在
关系数据库是一种用于存储和管理结构化数据的常用技术。它的发展经历了多个阶段,从过去到现在,不断演变和改进。本文将介绍关系数据库的演变过程,从早期的关系模型到现代的关系...【详细内容】
2023-11-15  Search: 关系数据库  点击:(226)  评论:(0)  加入收藏
关系数据库的全景图
这篇文章讨论了关系型数据库内部的索引和事务是如何工作的,而不深入研究特定数据库的怪癖。我将涵盖您应该了解的关于RDBMS索引的一切。我将简要涉及事务和隔离级别,以及它们...【详细内容】
2023-10-16  Search: 关系数据库  点击:(321)  评论:(0)  加入收藏
如何使用Redis作为关系数据库
Redis可以用作关系数据库吗?相信大多数人在使用Redis时都把它作为服务的缓存。而在Java + Spring中使用Redis有却可以实现关系数据库的功能。要在Redis中实现这一点,首先,我们...【详细内容】
2023-10-10  Search: 关系数据库  点击:(274)  评论:(0)  加入收藏
关系数据库系统正在成为一个问题,该怎么办呢?
我与关系数据库的关系可以追溯到 90 年代末。 这是我接触计算机和编程的第一步,成为我作为软件工程师的正规教育和学习的重要组成部分,并一直伴随着我的职业生涯。 我几乎爬遍...【详细内容】
2023-09-05  Search: 关系数据库  点击:(294)  评论:(0)  加入收藏
SQL Server关系数据库在Linux系统上安装及配置
SQL Server是由Microsoft开发的关系型数据库管理系统(RDBMS)。它是一种可靠、安全且高性能的数据库解决方案,用于存储、管理和处理大量结构化数据。SQL Server支持标准的SQL查...【详细内容】
2023-08-15  Search: 关系数据库  点击:(242)  评论:(0)  加入收藏
关系数据库和图数据库的基础解读
选择关系数据库还是图数据库就像是选择交通工具一样,要看你的需求和目的地。如果你的数据就像整齐排列的街区,你需要确保每条道路都通畅,那么关系数据库就像一辆可靠的轿车,适...【详细内容】
2023-08-01  Search: 关系数据库  点击:(210)  评论:(0)  加入收藏
分布式关系数据库OceanBase与TiDB哪个更好
背景2021年6月1日,蚂蚁集团开源 OceanBase 代码,这款连续两年占领 TPC-C 榜首的数据库产品再次拥抱开源。而此时,在开源社区国产数据库的赛道上还有另外一位明星选手:TiDB。同为...【详细内容】
2022-10-24  Search: 关系数据库  点击:(2325)  评论:(0)  加入收藏
在物联网应用使用关系数据库还是NoSQL?
物联网数据很复杂,需要多个用户访问,所以不要犯创建数据孤岛的错误。几乎在每个行业,都有一个由物联网数据驱动的数字化转型正在进行中。重要的是要认识到物联网不是关于事物...【详细内容】
2020-11-27  Search: 关系数据库  点击:(351)  评论:(0)  加入收藏
从关系数据库SQL SERVER 中读取数据写入到PI Server中
因为发展需求,公司使用了OSI 公司的 PI 系统对于PI系统没有深入的了解,只是根据供应商的资料学习了一些基本内容,因为这个pi系统是从底层DCS 收集数据,然后再在第三方客户端程序...【详细内容】
2020-08-04  Search: 关系数据库  点击:(438)  评论:(0)  加入收藏
非关系数据库(NoSQL)是怎么解决关系数据库(SQL)的问题的?
数据分类了解SQL和NoSQL之前,我们先了解下数据有几种分类:结构化数据、非结构化数据、半结构化数据。结构化数据就是由行和列组成的,可以用二维表来存储,非结构化数据比如文本、...【详细内容】
2019-08-30  Search: 关系数据库  点击:(863)  评论:(0)  加入收藏
▌简易百科推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  京东云开发者    Tags:向量数据库   点击:(4)  评论:(0)  加入收藏
原来 SQL 函数是可以内联的!
介绍在某些情况下,SQL 函数(即指定LANGUAGE SQL)会将其函数体内联到调用它的查询中,而不是直接调用。这可以带来显著的性能提升,因为函数体可以暴露给调用查询的规划器,从而规划器...【详细内容】
2024-04-03  红石PG  微信公众号  Tags:SQL 函数   点击:(3)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28    51CTO  Tags:NoSQL   点击:(13)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  dbaplus社群    Tags:数据库连接池   点击:(12)  评论:(0)  加入收藏
八个常见的数据可视化错误以及如何避免它们
在当今以数据驱动为主导的世界里,清晰且具有洞察力的数据可视化至关重要。然而,在创建数据可视化时很容易犯错误,这可能导致对数据的错误解读。本文将探讨一些常见的糟糕数据可...【详细内容】
2024-03-26  DeepHub IMBA  微信公众号  Tags:数据可视化   点击:(6)  评论:(0)  加入收藏
到底有没有必要分库分表,如何考量的
关于是否需要进行分库分表,可以根据以下考量因素来决定: 数据量和负载:如果数据量巨大且负载压力较大,单一库单一表可能无法满足性能需求,考虑分库分表。 数据增长:预估数据增长...【详细内容】
2024-03-20  码上遇见你  微信公众号  Tags:分库分表   点击:(13)  评论:(0)  加入收藏
在 SQL 中写了 in 和 not in,技术总监说要炒了我……
WHY?IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?1、效率低项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 ↓select *...【详细内容】
2024-03-18  dbaplus社群    Tags:SQL   点击:(5)  评论:(0)  加入收藏
应对慢SQL的致胜法宝:7大实例剖析+优化原则
大促备战,最大的隐患项之一就是慢SQL,对于服务平稳运行带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,在日常开发中如何避免出现慢SQL,出现了慢SQL应该按照什...【详细内容】
2024-03-14  京东云开发者    Tags:慢SQL   点击:(4)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12    InfoQ  Tags:数据库   点击:(26)  评论:(0)  加入收藏
SQL优化的七个方法,你会哪个?
一、插入数据优化 普通插入:在平时我们执行insert语句的时候,可能都是一条一条数据插入进去的,就像下面这样。INSERT INTO `department` VALUES(1, '研发部(RD)', &#39...【详细内容】
2024-03-07  程序员恰恰  微信公众号  Tags:SQL优化   点击:(19)  评论:(0)  加入收藏
站内最新
站内热门
站内头条