旧数据库可以做的10个新技巧

如今,在有关NoSQL数据库,分布式数据库,数据仓库和GPU加速数据库的所有令人兴奋的事情中,很容易忘记传统的关系数据库仍然为许多(如果不是大多数)行数据存储和提供关键任务信息。商业应用程序。 Oracle数据库,Microsoft SQL Server,MySQL / MariaDB和PostgreSQL的起源可以追溯到1980年代,但是它们都处于活跃的开发之中,而不仅仅是修复错误和调整性能。

在本文中,我们将讨论传统SQL数据库改进的许多方法。 其中一些涉及支持不同种类的数据,以及使用它们的索引和搜索功能。 其他涉及加快对常用表的访问。 还有一些将数据库扩展到他们自己的表之外,单个服务器之外以及SQL查询之外。

[Kubernetes,无服务器框架,Kafka,Redis,.Net Core等:请参阅InfoWorld的2019年度技术奖获奖者 | 通过《 InfoWorld日报》时事通讯了解最新的企业技术中的关键新闻和问题。 ]

全文搜索

由于性能原因,标准的关系数据库索引倾向于使用短字段,甚至使用散列。 全文搜索是不同的。 全文搜索使用另一种索引来处理,通常类似于单词的倒排列表及其记录和偏移位置。 通常会有一堆停用词被忽略,还有一种用于词干生成每个词其他形式的算法。 一些全文搜索引擎支持布尔运算,模糊搜索或邻近搜索。

Oracle数据库,SQL Server,MySQL / MariaDB和PostgreSQL都提供对特定指定文本字段的全文本搜索,例如具有FULLTEXT索引(使用MySQL术语)的CHARVARCHARTEXT列。 您还可以使用外部全文搜索引擎(例如Elasticsearch或Solr)来索引和搜索数据库中的文本。

JSON数据

随着WebJavaScript的兴起,JSON( JavaScript Object Notation )开始流行 ,并成为NoSQL文档数据库中的标准数据格式之一。 不容忽视,许多SQL数据库添加了对JSON的支持,以及搜索半结构化(有时是分层的JSON)文档所需的其他语法。 当然,每个数据库都添加了自己的JSON支持。

例如,在SQL Server中,您可以从文本字段中显式查询JSON值,并且可以将JSON文档转换为表。 您还可以向文本字段添加约束,以确保将其格式化为有效的JSON。 另一方面,PostgreSQL具有显式的JSON类型以及JSON函数和运算符。

XML数据

像JSON一样,XML是一种半结构化数据类型。 它是在Web服务和AJAX Web回调被发明时流行的数据交换格式,尽管此后在许多应用程序中已被JSON取代。 XML模式可以在XML文档上施加某种结构。 XPath使用路径表达式在XML文档中导航; XSLT转换语言也有其用途,例如根据XML数据生成网页。

我们一直在讨论的所有关系数据库都在某种程度上支持XML数据。 我不确定在绿地应用程序中是否有很多选择XML而不是JSON的情况,但是对于围绕XML文档构建的棕地应用程序,将XML存储在关系表中的功能会很方便。

地理空间数据

几何和地理信息似乎可以放入数字类型,但是您经常对空间数据进行的查询类型需要一个能够识别二维数据的索引,这超出了标准B树的能力。 例如,您可能想知道两个机场之间的距离,距洛杉矶国际机场最近的飞机场,距芝加哥商务会议地点最近的酒店或出租车是否在曼哈顿范围内。 对于这些查询,您可能需要R树,SP-GiST,四叉树或UB树索引。

我们一直在讨论的所有关系数据库都支持空间信息和索引,尽管其中一些需要外接程序,例如PostGIS for PostgreSQL。 它们通常符合开放地理空间联盟简单功能规范和SQL / MM Spatial ISO / IEC标准,尽管它们在实现细节上常常有所不同。

内存表

除了PostgreSQL,它执行内存中缓存,但不执行纯内存中表,我们一直在讨论的所有关系数据库都可以在内存中创建表。 内存表显着提高了处理这些表中信息的速度,主要是在读取量很大的情况下。 有时提到的加速数是30倍,但这是一个近似值,没有考虑可用于数据库的各种磁盘。

通常有一些限制适用于内存表。 首先,最重要的是要有足够的RAM来容纳该表,而该RAM本来可以用于缓存和联接。 然后是特定数据库和引擎的限制。

MySQL MEMORY存储引擎是临时的且非持久性的(当MySQL服务器停止或停止时它将消失),缺少事务,外键,地理类型和全文本搜索索引,如果有很多写,具有表级锁定,并且不能分区。 MySQL NDB群集引擎消除了一些约束,但是它需要运行特殊版本的MySQL守护程序,并且需要在群集中具有几种活动的节点。

SQL Server内存中的OLTP使用内存经过优化的表(这些表是持久的并支持事务)以及非持久的表(这些表通常用于临时数据)用于临时数据,该表用于临时数据。 它还使用本地编译的T-SQL模块,通过减少处理操作所需的CPU周期来进一步减少单个事务所花费的时间。 可以在查询和事务中将SQL Server内存中OLTP表与基于磁盘的表合并。

Oracle Database In-Memory大大提高了实时分析(OLAP)和混合工作负载(HTAP)的性能。 内存中列存储(IM列存储)是Oracle数据库内存中的关键功能。

外部数据源

最新版本的SQL Server具有一种查询数据库自身表之外的数据源的机制。 您可以从Hadoop,blob存储,另一个关系数据库或碎片图管理器创建EXTERNAL DATA SOURCE。 然后,您可以对外部数据源使用PolyBaseElastic Database查询 (Azure SQL Database v12 +)进行数据加载和查询。

PostgreSQL 外部数据包装器允许PostgreSQL查询针对各种各样的远程数据源运行。 这些范围从其他SQL数据库,NoSQL数据库和大数据平台到平面文件。 外部数据包装器遵循SQL / MED (外部数据的SQL管理)标准。

大数据集群

从SQL Server 2019预览版开始,Microsoft SQL Server大数据群集允许您部署在Kubernetes上运行的SQL Server,Spark和HDFS容器的可伸缩群集。 这些组件可以并排运行以从Transact-SQL(通过PolyBase)或Spark读取,写入和处理大数据,从而使您可以将高价值的关系数据与大容量的大数据结合并进行分析。

Oracle在其Oracle大数据云服务本地Oracle大数据设备中提供了类似的功能。

读取副本

MySQL,MariaDB和PostgreSQL均提供只读副本功能。 只读副本可直接提高读取吞吐量,但也可以通过减少读/写服务器上的读取负载来间接提高写性能。

MySQL / MariaDB支持多种副本:日志文件和基于GTID的副本; 异步,使用内存中NDB群集同步,半同步和延迟; 基于语句,基于行和基于混合的。 PostgreSQL有许多不同的复制解决方案

Amazon Aurora为MySQL和PostgreSQL实现了自己的只读副本方案。 Aurora最多允许15个副本,同步延迟少于20毫秒。

SQL Server在主动-主动群集中支持辅助只读副本。 Oracle数据库支持使用只读表快照的基本单向只读复制环境,而Oracle Enterprise支持高级复制功能,该功能通过允许应用程序在整个复制的数据库系统中更新表副本来扩展基本只读复制的功能。

分片

分片是一种在服务器之间划分数据的方法。 垂直分片涉及在不同服务器上分布不同的表,例如将库存放在一台服务器上,将订单放在另一台服务器上,然后将汇总表放在第三台上进行分析。 仅当您需要从多个服务器联接表时,这才是一个问题。 水平分片涉及在服务器之间划分单个表,就像按约定将注册站按字母顺序划分一样。 手动水平分片是脖子上的大伤痛,但是幸运的是,有几种自动水平分片的选择。

Citus执行PostgreSQL的自动水平分片。 Citus还提供协调器节点作为保存数据的工作器节点的前端。

Microsoft Azure SQL数据库v12支持用于自动水平分片的弹性数据库分片图。 它还支持用于垂直分片的跨数据库查询。

有多种方法可以使用Amazon RDS来分片 MySQL和其他受支持的数据库。 通常,您可以使用只读副本创建副本,然后将副本升级为新的碎片。 在Aurora中,有一个用于此目的的clone database命令。 克隆后,您可以根据分区键映射表删除该分片上将不使用的重复数据。

SQL以外的存储过程

从历史上看,每个关系数据库都有自己的存储过程SQL扩展,例如用于SQL Server的Transact-SQL和用于Oracle的PL / SQL。 近年来,关系数据库已与编程语言和机器学习功能集成在一起。 早期的例子是在Oracle数据库上运行的Java作为PL / SQL的附件。 从那时起,我们就看到了C,C ++,C#,Perl,PHP,Python和R语言数据库扩展。

NoSQL数据库于2009年左右推出,反映了对Web应用程序具有高度可伸缩性和高可用性数据库的需求,但要以牺牲SQL兼容性和高度一致性为代价。 在过去的几年中,“经典” SQL数据库增加了许多选择,以在不牺牲一致性或兼容性的情况下提高其可伸缩性和可用性。

在为该“ NoSQL”作业传递旧的SQL数据库之前,请检查文档。 您可能会两全其美。

From: https://www.infoworld.com/article/3402716/10-new-tricks-your-old-database-can-do.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值