哈希娱乐 行业新闻 党建先锋

PolarDB-X 在 ClickBench 数据集的优化实践哈希游戏

发布时间:2025-10-24 10:11:28  浏览:

  哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB

  云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB

  本文介绍了 PolarDB-X 在 ClickBench 数据集上的优化实践,PolarDB-X 通过增加优化器规则、优化执行器层面的 DISTINCT 和自适应两阶段 AGG、MPP 压缩等手段,显著提升了在 ClickBench 上的性能表现,达到了业内领先水平。

  PolarDB-X作为一款云原生分布式数据库,具有在线事务及分析的处理能力(HTAP)、计算存储分离、全局二级索引等重要特性。在 HTAP 方面,PolarDB-X 实现了向量化执行引擎,列存多级查询缓存的能力,在先前 TPC-H 的报告中已经显示出其查询速度处于业内领先水平(参考:PolarDB-X TPC-H 100G 白皮书)。

  ClickBench 是由 Clickhouse. Inc 推出的一款用于测试 OLAP 系统在大宽表场景下性能表现的测试集。数据规模为单表 70G,共105列,数据行数为 99997497(约1亿行),具有 43 条查询 SQL,由于 ClickBench 测试集的 SQL 语句涵盖了大宽表场景下的各类场景,因此近年来国内外诸多 OLAP 厂商都竞相参与打榜。

  经过优化,PolarDB-X 在大宽表场景下的性能表现已经到达第一梯队,具体性能细节可参考ClickBench 性能白皮书。

  在本文的最后部分,我们对 ClickBench 测试集的瓶颈点进行了分析,并且对 Swiss Hash Table 以及 HyperScan 两种优化方向进行了讨论,相信未来 PolarDB-X 的成绩会得到更进一步的提升。

  PolarDB-X 的优化器基于 Cascade 模型实现,得益于其强大的Rule扩展性,在优化器中添加一个 RBO 规则是十分便捷的。以 Q36 为例,简化后的逻辑如下所示

  在 ClickBench 中,有部分 SQL 语句可以通过优化器 RBO 规则进行改写而不改变原有的语意,例如Q30 需要计算 90 次 ResolutionWidth 与某一个常量的和,这在执行器需要保存 90 列数据,但如果我们使用分配律进行简单的拆解就可以将 SQL 改为如下形式

  同时由于HashSet只需要判断每一行是否是distinct,因此不需要计算groupId相关的信息,可以省去相关运算 (下图中左侧为 HashSet 的代码示例,右侧是 HashTable 的代码示例)。

  但是对于 Q32 和 Q33,其需要对 Long 类型的 WatchID 和 Int 类型的 ClientIP 做 GroupBy,这两列的组合基数接近于表的大小,此时如果执行预聚合不但需要承担 hash 表的开销,同时网络 shuffle 的数据量也并没有减少,在我们的测试中 Q33 两阶段 agg 比一阶段 agg 的速度下降了两倍。

  在 PolarDB-X 原有的实现中,若开启 ENABLE_PREFER_AGG,则优化器会根据表的 cardinality 统计信息来决定是否启用两阶段 agg,然而统计信息的估计往往是不准确的,尤其是对于多列的 cardinality 估计与事实偏差可能达到一到两个数量级。

  因此我们将自适应两阶段 AGG 的逻辑在执行器层面进行了实现,具体来说有如下几步改造

  在我们的测试中,自适应两阶段 Agg 能够对所有 SQL 进行正确的判断来决定是否启用两阶段 Agg,在保证其余 SQL 性能不回退的情况下将 Q33 的耗时由 5.5s 减小至 3.4s。

  然而考虑到当压缩率较低时网络数据 Shuffle 量并没有减少,并且会增加解压缩的开销,因此我们会动态的对每个 Chunk 进行压缩率的比较,当压缩率超过某个 threshold 时才向上游返回压缩后的 Chunk。

  在开启压缩后,Q34 的网络传输数据量由 2.4GB 减小为 300MB,速度提升 2s。

  在 GroupBy 时对 inputChunk 进行类型特定的优化可以大幅度提升 Agg 的性能,然而由于 Java 语言本身不支持 Int128 类型,因此需要用 long 数组来模拟实现。

  同时在实现时,serializedInputBlock 只需要持有对Chunk中两个long数组的引用,不需要占用额外的内存空间。(但是key数组仍然需要创建新对象,因为hash表需要常驻内存)。

  这种不含有 Group By 语句的 agg 函数,在处理时不需要计算 groupId 的值,也不需要对每个 group 进行 accmulate 聚合操作,因此可以为其设计独立的 agg 语义。

  ,由于 UserID 的列类型为 long,因此 SUM(UserID)可能会超过 LONG_MAX,所以需要用 Decimal 类型来进行存储。

  对于朴素的 Decimal 实现,底层维护了一个 byte 数组表示各个位的值,在加减时需要考虑到进位/借位操作。

  而对于 Q33/Q34 和 Q29,团队内部已有解决方案,目前正在试验与开发当中。

  PolarDB-X 作为一款面对通用场景的分布式 HTAP 数据库,面向类型特定场景的优化固然重要,但同时我们也希望着眼于更高的层面,在更通用的场景上进行优化。

  在团队内部的调研中,我们发现在 CppCon 2017 中提出的 Swiss Hash Table 给我们带来了巨大的启发,这种 Hash Table 不仅能够对全类型的场景进行优化,而且充分考虑了 CPU 层面的 SIMD 加速,结合 PolarDB-X 先前对 SIMD 指令探索(参考文章:深度优化 PolarDB-X 基于向量化SIMD指令的探索),我们认为这种算法能够在通用场景下产生最大的收益。

  考虑到文章篇幅有限,在这里我们不会详细介绍 Swiss Hash Table,这里直接给出一种在 PolarDB-X 中可行的设计方案。

  通过这种方式,可以在第一步中过滤掉大量的 invalid 数据,从而加速 Probe 过程。

  对于 Q29,其瓶颈在于 REGEXP_REPLACE 这个正则表达式实现,对于正则表达式我们并不陌生,其存在两种实现方案:非确定性有限状态自动机(NFA) 和确定性有限状态自动机(DFA),区别在于是否允许从一个状态出发通过多条路径到达下一个状态。

  Re2J:Re2J 基于 Google 的 Re2 项目演化而来,基于 DFA 的匹配方式,其以待匹配串作为驱动,在枚举待匹配串时对不合法的正则串片段进行过滤,因此能够达到与待匹配串线形相关的复杂度。然而由于 Re2J 项目并不完善,其存在一些匹配功能的缺失,且在绝大多数场景下性能劣于 JONI 库。

  然而目前的 HyperScan-Java 实现效率较差,Java-Cpp 对象的转化消耗了大量的 CPU 资源,后续我们计划结合 PolarDB-X 的向量化表达式能力,通过修改 HyperScan-Java 的源码来实现批量的正则替换来进行加速。

  通过上述优化方法,PolarDB-X 在 ClickBench 大宽表测试集上的表现显著提升。优化器规则的改进显著减少了不必要的计算开销,执行器层面的优化如独立的 HashSet、动态两阶段聚合以及高效的压缩机制,大幅提升了 DISTINCT 操作、自适应聚合以及网络传输效率。尽管当前在正则表达式处理和字符串 Group By 上仍存在瓶颈,PolarDB-X 团队已制定了包括 Swiss Hash Table 和 HyperScan 优化在内的解决方案,预计将在未来进一步提升系统性能。整体而言,PolarDB-X 的持续优化和创新,确保其在分布式 HTAP 数据库领域保持竞争力,并为用户提供高效、可靠的分析处理能力。

  本文介绍了如何在跨境电商场景中快速判断商标或品牌侵权,避免因侵权带来的法律纠纷。通过创建品牌表并使用PostgreSQL的pg_trgm插件和GIN索引,实现了高性能的字符串相似匹配功能。与传统方法相比,PolarDBPostgreSQL的方法不仅提升了上万倍的查询速度,还解决了传统方法难以处理的相似问题检索。具体实现步骤包括创建品牌表、插入随机品牌名、配置pg_trgm插件及索引,并设置相似度阈值进行高效查询。此外,文章还探讨了字符串相似度计算的原理及应用场景,提供了进一步优化和扩展的方向。

  PolarDB 开源基础教程系列 7.5 应用实践之 TPCH性能优化

  本文介绍了基于用户画像的精准营销技术,重点探讨了如何通过标签组合快速圈选目标人群。实验分为三部分: 1. **传统方法**:使用字符串存储标签并进行模糊查询,但性能较差,每次请求都需要扫描全表。 2. **实验1**:引入`pg_trgm`插件和GIN索引,显著提升了单个模糊查询条件的性能。 3. **实验2**:改用数组类型存储标签,并结合GIN索引加速包含查询,性能进一步提升。 4. **实验3**:利用`smlar`插件实现近似度过滤,支持按标签重合数量或比例筛选。

  PolarDB是阿里云开源的云原生数据库,采用计算-存储分离架构,结合高性能共享存储与Parallel Raft多副本一致性协议,实现微秒级延迟和卓越性能。本文深入解析其架构设计,涵盖智能调度层、性能优化技巧(如查询优化器调优和分布式事务提升)、高可用与容灾配置、扩展功能开发指南以及监控运维体系。同时,通过电商平台优化案例展示实际应用效果,并展望未来演进方向,包括AI结合、多模数据库支持及Serverless架构发展。作为云原生数据库代表,PolarDB为开发者提供了强大支持和广阔前景。

  中盾集团采用PolarDB-X云原生分布式数据库开源版本,有效解决了大数据量处理、复杂查询以及历史数据维护等难题,实现了业务的高效扩展与优化。

  PolarDB向量数据库插件通过实现通义大模型AI的外脑,解决了通用大模型无法触达私有知识库和产生幻觉的问题。该插件允许用户将新发现的知识和未训练的私有知识分段并转换为向量,存储在向量数据库中,并创建索引以加速相似搜索。当用户提问时,系统将问题向量化并与数据库中的向量进行匹配,找到最相似的内容发送给大模型,从而提高回答的准确性和相关性。此外,PolarDB支持多种编程语言接口,如Python,使数据库具备内置AI能力,极大提升了数据处理和分析的效率。

  本文介绍了如何使用阿里云PolarDB PostgreSQL版及其图数据库引擎(兼容Apache AGE,A Graph Extension)进行图数据分析,特别针对金融交易欺诈检测场景。PolarDB PostgreSQL版支持图数据的高效处理和查询,包括Cypher查询语言的使用。文章详细描述了从数据准备、图结构创建到具体查询示例的过程,展示了如何通过图查询发现欺诈交易的关联关系,计算交易间的Jaccard相似度,从而进行欺诈预警。

  Polar_AI 是 PolarDB 数据库的 AI 扩展,集成了先进的人工智能模型和算法,使数据库能够执行机器学习和自然语言处理任务。它支持 PostgreSQL 及 Oracle 兼容版本,通过标准 SQL 轻松调用 AI 模型,具备简单易用、灵活可定制、无缝数据融合、数据安全和高性能等优势。用户可以通过 SQL 快速实现文本转向量、情感分类等功能,并能自定义扩展 AI 模型。

  PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称

  PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称。本文深入解析PolarStore的内部机制及优化策略,包括合理调整索引、优化数据分布、控制事务规模等,旨在最大化其性能优势,提升数据存储与访问效率。

  安装PolarDB for PostgreSQL的实践,需要帮助到有同样需要的小伙伴

  航天壹进制 PolarDB-X 1.0(DRDS) 数据备份容灾解决方案

  热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南

  热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南

  航天壹进制 PolarDB-X 1.0(DRDS) 数据备份容灾解决方案

  商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战

  WordPress/Laravel企业官网源码-自适应多端SEO-前后端分离源码含数据库与部署文档

  热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南

  响应式企业网站模板推荐 适配PC/手机/平板 1对1打造专属企业官网CMS源码

  热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南