麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
953
2023-04-16
数据库40年发展史:NoSQL和NewSQL谁将登上“铁王座”?
起初有文件,后来有基于结构化文件的导航数据库,然后出现了IMS和CODASYL。大概40年前,出现了首批关系数据库。在20世纪八、九十年代的大部分时间,“数据库”严格意义上指“关系数据库”——SQL(标准查询语言)占主导地位。
1. 攻击SQL
NoSQL以同样的方式攻击关系数据库和SQL。这回的主要问题是,互联网颠覆了具有40年历史关系数据库管理系统(RDBMS)架构的基本前提。这种数据库旨在节省宝贵的磁盘空间,并可纵向扩展。然而现在有太多的用户和太多的任务,一台胖服务器处理不了。NoSQL数据库则宣称,如果数据库没有连接(join),没有标准查询语言(因为实现SQL需要花费时间),也没有数据完整性,那么就可以横向扩展以处理众多用户。这解决了纵向扩展的问题,但也带来了新问题。
与这些联机交易处理系统(OLTP)并行开发的是另一种关系数据库,名为联机分析处理系统(OLAP)。这种数据库支持关系结构,但在执行查询时就知道它们将返回大量数据。上世纪八、九十年代的公司企业仍主要由批处理驱动。此外,OLAP系统为开发和分析人员提供了将数据想象成n维数据集并加以存储的能力。如果你设想二维数组和基于两个索引的查询,以便基本上与恒定时间一样高效,但是随后在此基础上添加另一个维度,以便可以执行实质上是3个或更多因素(比如供应、需求和竞争对手数量)的查询,你就可以更高效地分析和预测。然而,构建这些元素是一项费力又高度面向批处理的工作。
2. 兑现和未兑现的NoSQL承诺
NoSQL数据库的扩展性确实比***数据库、***或***(它们都基于40年前的一种设计)好得多。然而,每种NoSQL数据库都存在新的限制:
(1) 键值存储 ·
没有比db.get(键)更简单的查询了。然而,世界上许多数据和使用场景无法以这种方式来设计结构。此外,我们其实在谈论缓存策略。在任何数据库中,主键查询速度很快。重要的只是内存中的数据。在理想情况下,它们像哈希图一样扩展。然而,如果要跑30趟数据库才能将数据放回去或进行任何类型的复杂查询,这行不通。这些系统现在更常作为缓存实施在其他数据库的前面。(例子:Redis。)
(2) 文档数据库 ·
这种数据库之所以流行起来,是由于它们使用JSON,对象又易于序列化成JSON。这种数据库的第一个版本没有连接,将整个“实体”放到一个庞大的文档中有其自身的缺点。没有事务保证,你还会遇到数据完整性问题。今天,一些文档数据库支持一种不太可靠的事务,但它不是大多数人习惯的同一种保护级别。而且,即使对简单查询而言,这种数据库在延迟方面常常速度很慢,尽管它们就吞吐量而言扩展性更好。(例子:***和Amazon DocumentDB。)
(3) 列存储 ·
这种数据库的查询速度与键值存储一样快,它们可以存储更复杂的数据结构。然而,如果执行像跨3个表(RDBMS术语)或3个集合(***术语)连接这样的操作,会让人痛苦不堪。这种数据库确实适合时间序列数据(请给我在下午1点至2点出现的所有事务)。
还有其他更深奥的NoSQL数据库。然而,所有这些数据库的共同点是不支持通用数据库惯用语,而且往往专注于“特殊用途”。一些流行的NoSQL数据库(比如***)编写了出色的数据库前端和生态系统工具,因而开发人员很容易采用它们,但存储引擎存在严重的限制,更不用说弹性和可扩展性方面的限制了。
3. 数据库标准仍然很重要
关系数据库占主导地位的原因之一是,它们有一个通用的工具生态系统。首先有SQL。虽然数据库方言可能不一样——如果你是开发或分析人员,想从*** 6.5升级到*** 7,可能不得不修复查询,并使用“(+)”用于外部连接,但是简单的切实可行,复杂的很容易转换。
其次,你有ODBC以及后来的JDBC等。几乎任何可以连接到一个RDBMS的工具(除非为了管理该RDBMS而专门设计)都可以连接到其他任何RDBMS。有许多人每天连接到RDBMS,并将数据倒入到Excel以便分析。我不是指Tableau或其他数百种工具,而是指“鼻祖”Excel。
标准很重要,无论是为了支持工具生态系统,还是由于许多查询数据库的人不是开发人员——他们都知道SQL。
4. GraphQL和状态管理的兴起
你知道谁总是翘着两个大拇指想搭车,就想让他的应用进入到数据库里,但却不关心如何实现吗?事实证明,整整一代的开发人员都想这么做。而GraphQL(与图形数据库无关)可将对象图形存储在底层数据存储系统中。这样一来,开发人员就不必担心这个问题了。
这方面的早期尝试是对象关系映射(ORM)工具,比如Hibernate。它们拿来一个对象后,基于对象到表的映射设置,基本上将对象变成了SQL。这种工具的许多前几代产品很难配置。此外,我们面临学习过程。
面向对象数据库和NoSQL数据库的基础之一是,应用开发人员要意识到数据在数据库中如何存储方面的复杂情况。当然,这对于开发人员来说很难用较新颖的技术来驾驭,但现在不再困难了,因为GraphQL完全消除了这个问题
5. NewSQL或分布式SQL闪亮登场
这意味着什么?这意味着鱼和熊掌可以兼得。这意味着你可以有多个节点,并横向扩展——包括跨云可用区扩展。这意味着你可以有多个数据中心或云地理区域——仅用一个数据库。这意味着作为用户,你可以拥有真正的可靠性和永远不会崩溃的数据库集群。
与此同时,整个SQL生态系统仍有用!你无需重新构建整个IT基础架构就能做到这点。虽然你可能不敢“丢弃并更换”传统的RDBMS,但大多数企业并不打算使用更多的***。最棒的是,你仍可以使用在云端和全球各地的SQL及所有工具。 责编AJX
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。