随着企业和政府机构将其应用迁移到云中,对基于云的数据库的需求也是因为DBAAS产品(DBAAS)产品也在迅速增长。传统的DBAAS产品是基于现有数据库软件本身的云服务提供商。他们在云虚拟机上部署常规数据库并使用本地或云存储。该方法易于实现,但无法提供足够的性能和可扩展性,并且由于需要数据,因此存储成本也很高。
为了应对这些挑战,云服务提供商已开始构建一个新的云本机关系数据库系统,专门为云基础架构设计,通常采用一个分离并存储到分布式层中的设计,该层分为独立扩展。该方法具有多种优势,包括自动扩展数据库存储,高可靠性通过多-AZ部署部署以及快速切换和故障的恢复。这些云本机设计还有助于减少仅读取副本的数据更新的延迟,并改善硬件共享和可扩展性。HuaweiCloud数据库GaussDB(用于MySQL)是一个具有上述优势的云Born分布式数据库。
由于计算和存储节点通过网络通信进行通信,因此网络带宽和延迟通常成为瓶颈。为了克服这一挑战,GaussDB(emySQL)使用编写页面从数据库节点的操作,然后将检查点操作推到存储节点到存储节点到存储节点优化和写入相关的网络流量。gaussDB(对于mySQL)数据库节点将重做日志发送到存储节点而不是数据页面。由于重做log(记录了数据页的修改)通常比修改后的数据页面小得多,方法减少网络流量。存储节点(也称为页面存储)可以根据重做日志构建数据库页面,并响应数据库节点的请求以将页面返回数据库节点。
在传统数据库中,SQL执行引擎从存储中获取数据,并执行包括投影,谓词计算和聚合的步骤。对于通常涉及大规模扫描的分析和查询,SQL执行引擎必须从中读取大量数据页面存储。存储节点与计算分开时,大型表面扫描将通过网络通信转换为增加的网络流量。一个典型示例的一个示例是计算一个非常大的表。查询对象表的所有页面必须发送到数据库节点以从页面存储池进行计数。之后,大多数数据库节点都会在这些页面上丢弃大多数这些页面。由于缓冲池无法加载如此多的数据页面,这是浪费网络带宽资源。,称为NDP)解决此问题的解决方案。
NDP的设计思想是避免在分布式系统中移动数据,并允许数据处理在存储的地方进行。在Yunnian数据库中,存储节点通常由大量强大的服务器组成。这些存储节点上的CPU资源通常具有较低的利用率,这为最近的数据处理提供了绝佳的机会(NDP)。
GaussDB(用于MySQL)的NDP函数将所选SQL操作推向页面存储。页面存储过滤出不必要的数据,仅将匹配的数据子集返回数据库节点。例如,为了进行计数查询,页面数据存储可以计数和返回计数,而不是实际的数据页面到数据库node.in,避免了大量的网络流量,并且该技术的使用也增加了查询响应时间。
GaussDB(用于MySQL)可以将三个SQL操作推向页面以存储:列投影,谓词计算和聚合。
这三个SQL操作可以在任何组合中出现在NDP中。
对于“工人”表中的每一行,页面存储计算谓词年龄 < 40 and join_date >= date'2010-01-01'和join_date <日期<日期'2010-01-01' + Interval'1'年。原始行。如果页面数据存储无法汇总(由于某些内部处理要求),则仍然可以从三列(薪金,年龄和join_date)投射出来,并生成一个较窄的一个。银行将被丢弃。最后,将大量减少的数据集返回到数据库节点。
GaussDB的NDP特征体系结构(对于MySQL)如下图所示。数据库节点将NDP请求发送到页面(请注意,每个数据库节点通常都有多个页面存储服务)。在orderRequest)中,页面存储中的NDP计算符号可以执行以上三个SQL操作,并将较小的数据集返回到数据库节点。数据库节点可以是主节点,或者只能读取复制节点。两者都支持NDP。
在云本机数据库系统中,即使数据库节点和页面存储是通过高速RDMA网络连接的,与传统数据库中的本地存储相比,延迟仍然很高。通过减少网络IOPS并并行执行多个iOS,可以减少延迟。负面影响。在NDP函数中,我们意识到“批处理阅读”的概念。此想法是在B+Leaf数据节点和组中进行期待相邻的将数据节点放在批处理过程请求中,并且在最近的数据处理中需要查询这些B+LEAF数据节点。批次阅读是减少IOPS的绝佳方法。如果我们在每个请求中发送一个页面,则需要IO的数量。如果我们将1,000页分组为一个请求,则IO的数量将减少1000倍。
下图说明了批处理的工作原理。数据库节点发送批处理请求,SAL(存储摘要层)徽标的页面已找到,批处理读数分为多个子读取:每个页面存储一个孩子然后,Reading.sub-读取将平行发送到页面存储。使用此方法,您可以使用多个页面同时存储NDP请求。
接收包含多个页面的NDP请求的页面存储,这些页面之间没有依赖性,因此可以按任何顺序使用NDP。此不仅提供了灵活性,而且还允许页面存储分配页面为多个线程并行处理。
GaussDB(用于MySQL)使用增强的SQL优化器自动确定NDP是否对特定查询有益。被推到页面存储,它可以大大降低数据集的大小。从总体上讲,NDP不利于小型扫描,例如,可以使用索引来减少要扫描的数据量。
同时,NDP也有自己的资源。在数据库节点中,NDP主要占据内存资源,因为它需要内存来保存NDP页面。(也称为缓冲池)作为常规页面,并且没有专门保留的内存记忆。此方法的优点是,当系统中没有NDP时,整个缓冲池都可以用于常规处理。
并行查询(PQ)是商业关系数据库系统的事实标准,它为工作负载分析提供了高性能支持。PQ通常由“领导者工人”设计。将要处理的表分为非重叠的数据块,并将这些数据块分配给多个工人。每个工人将产生中间结果。领导者将积累这些结果并进行进一步的处理以产生最终结果。PQ使用多个CPU并行处理查询提供了数据库节点中的并行性。可以为PQ Worker启用改进查询性能。NDP。可以将PQ Worker执行的某些SQL操作推到页面存储区域。通过组合NDP和PQ,我们激活了GaussDB系统数据库节点的三层,多页存储和一个页面存储之间的并行处理的魔法。
GaussDB(对于MySQL)将自动确定NDP是否有助于查询并启用NDP查询。用户需要做的是打开系统变量“ NDP_MODE” .ndp_mode。当前会话。要打开整个数据库的NDP_Mode,请将“全局”关键字添加到“ SET”命令中,如下所示:
您可以使用“解释”查询以了解是否启用了NDP进行查询。投影和谓词计算将被推到数据页存储区域。此外,还启用了LineTiTem表扫描的PQ。
以下是另一个示例。在LineItem表上的计数查询中,我们命名了此查询Q002。谓词计算和聚合将被推到页面存储区域,并且还启用了PQ。
在下面,我们在TPC-H数据库的100GB上运行多个查询,以显示NDP和PQ如何提高查询效率。
测试环境:
y轴显示查询响应时间加速度因子在下图中。加速因子定义:如果原始查询时间为100秒,并且在启用了PQ后,查询时间为50秒,加速因子应为2。
从下面的测试结果可以看出,NDP+PQ可以加速Q002超过100倍。
NDP解耦的数据库节点和存储节点将成为未来云本机数据库系统的标准。在OLAP工作负载中,LARGE扫描很常见,NDP将大大提高此类操作的效率。
总而言之,NDP可以:
本文分享了来自华为云社区的作者:GaussDB数据库。