热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

追寻终极数据库事务/分析混合处理系统的交付挑战(4)(完结篇)

评估HTAP选项本报告涵盖了为了支持工作负载(涵盖OLTP、运营、BI和分析),查询引擎面临的挑战的细节,这些细节也可以作为

评估HTAP选项

本报告涵盖了为了支持工作负载(涵盖OLTP、运营、BI和分析),查询引擎面临的挑战的细节,这些细节也可以作为访问数据库引擎、查询引擎和存储引擎组合以及满足事务、运营、分析或混合工作负载需求的指南。以下评估选项实际上也是面临的挑战:

  • 为了满足您的工作负载需求,查询引擎需要具备哪些功能?
  • 为了满足您的工作负载需求,存储引擎需要具备哪些功能?查询引擎能与这些存储引擎进行良好集成吗?
  • 对于您的应用程序而言,哪些数据模型至关重要?哪些存储引擎支持这些模型?单个查询引擎支持这些存储引擎吗?
  • 哪些企业级能力对您来说很重要?查询引擎和存储引擎如何满足这些需求?

查询引擎的功能

工作负载的类型决定查询引擎需要哪些能力。本报告论述的是支持混合HTAP工作负载,以下为相关考虑事项:

数据结构 – 键支持、聚集、分区

  • 查询引擎如何使用存储引擎提供的键入访问?
  • 即使存储引擎仅支持单个键值,查询引擎支持多列键吗?
  • 访问数据时,存储引擎支持按键对数据进行聚集、部分键入访问和前导键列谓词吗?
  • 查询引擎如何处理谓词不在前导列的情况?

统计

  • 查询引擎维护数据的统计信息吗?
  • 查询引擎收集每列、多个键或连接列的基数吗?
  • 统计为查询引擎提供有关数据倾斜的信息吗?
  • 更新大表的统计信息需要多久?
  • 添加新数据或旧数据老化时,查询引擎是否可以增量更新统计信息?

非前导或非键列谓词

  • 即使键或索引的前导列没有谓词,查询引擎是否能有效地访问表格中的相关行?或总是需要全表扫描?
  • 查询引擎如何确定跳跃扫描(skip scan)或MDAM比全表扫描更高效?
  • 为了生成与一个数据访问、连接、聚合和并行度策略相关的有效计划,查询引擎如何使用键列、多键或连接列,以及非键列上的统计数据?
  • 查询引擎支持列式存储引擎吗?
  • 访问列式存储引擎时,为了尽快获取符合条件的行,查询引擎是否根据谓词基数的顺序访问列?

索引和物化视图

  • 引擎支持哪些索引?如何应用这些索引?
  • 索引可以是唯一的吗?
  • 索引始终与基表一致吗?
  • 支持唯一索引扫描(只访问索引,不访问源表)吗?
  • 这些索引对更新有什么影响(尤其是添加了更多索引时)?
  • 这些索引如何通过批量加载不断地进行更新?
  • 支持物化视图吗?
  • 能同步和异步维护物化视图吗?
  • 维护物化视图的开销是多少?
  • 在可行的情况下,查询引擎是否会自动重写查询以使用物化视图?
  • 用户定义的物化视图是否支持查询重写?

并行度

  • 查询引擎如何访问跨节点分区和节点上不同磁盘的数据?
  • 查询引擎是否依赖于存储引擎进行分区?或为了并行访问这些分区,查询引擎提供并行基础架构吗?
  • 如果查询引擎考虑串行和并行计划,它如何确定所需的并行度?
  • 查询引擎能根据并行度仅使用所需的节点吗?

减少搜索空间

  • 查询引擎使用哪些优化器技术?
  • 它能为较大复杂的BI查询生成良好的计划、同时为较短运营查询进行快速编译吗?
  • 运营查询使用了哪些查询计划缓存技术?
  • 如何管理查询计划缓存?
  • 优化器如何随着工作负载的变化而发展?
  • 优化器能检测查询模式吗?

连接类型

  • 支持的连接类型有哪些?
  • 如何将连接用于不同的工作负载?
  • 使用错误的连接类型有什么影响?如何避免这种影响?

数据流和访问

  • 查询引擎如何处理复杂分析查询的大量并行数据流,同时提供对运营工作负载数据的直接快速访问?
  • 哪些功能提高了分析工作负载和运营工作负载的效率(例如,预取数据)?

混合工作负载

  • 能确定工作负载执行的优先级吗?
  • 确定工作负载优先级的标准是什么?
  • 能为不同服务级别的工作负载分配不同的资源吗?
  • 查询优先级随着其占用更多资源而降低吗?
  • 是否有防止饥饿机制,或是否有一种方式,能在恢复低优先级查询之前切换执行高优先级查询?

流式数据

  • 查询引擎能直接处理流式数据吗?
  • 针对流式数据需要支持哪些功能?例如,基于行和/或基于时间窗口功能?
  • 处理流式数据的语法或API有哪些?这会将您锁定到这个查询引擎吗?

功能支持

  • 数据库为运营、分析和所有其他工作负载提供了哪些功能?

集成查询引擎和存储引擎

在集成查询引擎和存储引擎之前,首先您要确定存储引擎需要提供哪些功能。然后,您需要评估查询引擎能否支持和扩展这些功能,以及查询引擎能否与存储引擎进行良好集成。以下问题不仅能确定它们(查询引擎或存储引擎,或它们的组合)是否能提供支持,而且确定它们能提供什么水平的支持。

统计

  • 存储引擎维护数据的哪些统计信息?
  • 通过这些统计信息,查询引擎能更快地生成直方图吗?
  • 为了避免全表扫描来计算统计信息,存储引擎支持抽样吗?
  • 为了统计信息的增量更新,存储引擎提供访问最近变动数据的方法吗?
  • 为了设置更新数据的间隔时间,存储引擎为查询引擎维护更新计数器吗?

键结构

  • 存储引擎支持键入访问吗?
  • 如果它不是多列键,查询引擎会将它映射到多列键吗?
  • 它能用于前导键列的范围访问吗?

分区

  • 存储引擎如何跨磁盘和节点对数据进行分区?它支持哈希和/或范围分区、或这些分区的组合吗?
  • 为了跨分区平衡负载、避免性能瓶颈,查询引擎需要对数据进行加盐(salt data)吗?
  • 如何添加一个加盐键作为表格键最左边的列、并且避免全表扫描?
  • 集群扩展或收缩时,存储引擎会重新分区吗?或由查询引擎执行?
  • 达到重新平衡时,会对数据进行完全的读/写访问吗?
  • 查询引擎如何将数据访问本地化,并避免节点之间的数据乱序?

数据类型支持

  • 查询引擎和存储引擎支持哪些数据类型?它们如何映射?
  • 可以对这些类型实施数值约束吗?
  • 哪个引擎实施引用约束?
  • 支持哪些字符集?
  • 支持排序规则吗?
  • 提供哪些压缩类型?
  • 支持加密吗?

投影和选择

  • 存储引擎或查询引擎完成投影?查询引擎和存储引擎对哪些谓词求值?
  • 在哪对多列谓词、IN列表和具有ORs和ANDs的多个谓词求值?
  • IN列表长度是多少?
  • 存储引擎根据过滤效果的顺序对谓词求值吗?
  • 谓词如何比较同一表格的不同列?
  • 在哪对谓词中的复杂表达式(可能带有函数)求值?
  • 存储引擎如何处理缺省值或缺失值?
  • 为了提高性能,能使用技术(例如,矢量化、CPU LI、L2、L3缓存)减少串行化开销吗?

可扩展性

  • 存储引擎是否支持操作的服务器端下推,例如,HBase的协处理器、或Cassandra的前触发器和后触发器?
  • 查询引擎如何使用以上存储引擎提供的功能?

安全执行

  • 查询引擎和存储引擎的安全框架是什么?它们如何映射到ANSI SQL安全执行?
  • 查询引擎与底层Hadoop Kerberos安全模型集成吗?
  • 查询引擎与安全框架(例如,Sentry或Ranger)集成吗?
  • 查询引擎如何与安全日志、以及底层存储引擎和平台安全的SIEM功能集成?

事务管理

  • 是否完全由存储引擎提供高可用复制、备份和恢复、以及多数据中心支持?或由查询引擎确保所有操作的一致性和完整性?
  • 实施了什么级别的ACID或BASE事务支持?
  • 事务支持如何在查询引擎和存储引擎之间进行集成,例如,预写日志和使用协处理器?事务是否具有良好的扩展性 – 所有事务工作负载跨多个事务管理器分配吗?
  • 提供了多数据中心支持吗?
  • 支持双活单主机复制或多主机复制吗?
  • 事务处理的开销有多大?
  • 提供在线备份和时间点恢复吗?

**元数据支持

  • 如何将存储引擎的元数据(例如,表名、位置、分区、列和数据类型)映射到查询引擎的元数据?
  • 如何通过查询引擎管理存储引擎的特定选项(例如,压缩、加密和列族)?
  • 查询引擎为外部表提供事务支持、二级索引、视图、约束和物化视图吗?
  • 如果能在查询引擎外部对外部表进行更改,那么查询引擎如何处理这些更改以及它们可能导致的差异?

性能、扩展和并发的注意事项

  • 如果存储引擎有批量加载的能力,那么查询引擎如何保证多次加载数据的事务一致性?
  • 存储引擎是否提供行集(rowset)插入和读取,来同时处理大量行?
  • 存储引擎提供哪些类型的快速扫描选项 – 快照扫描、预取和其他类型?
  • 存储引擎为查询引擎的并行操作提供了简单的集成方法吗?
  • 存储引擎支持哪些级别的并发和混合工作负载能力?

错误处理

  • 如何记录存储引擎和查询引擎的错误?
  • 查询引擎如何将存储引擎中的错误映射到有用的错误信息和解决方法选项?

其他操作

  • 为了最小化运营和性能影响,查询引擎如何处理存储引擎特定运营情况(例如,压缩或拆分)?

数据模型支持

以下为评估数据模型支持的注意事项:

运营与分析数据模型

  • 规范化数据模型能很好地支持运营工作负载吗?
  • 星型和雪花数据模型能很好地支持分析工作负载吗?

NoSQL数据模型

  • 查询引擎支持哪些存储引擎数据模型 – 键值、有序键值、Bigtable、文档、全文检索、图形和关系型数据模型?
  • 查询引擎API能在多大程度上覆盖存储引擎API?
  • 为了支持存储引擎API,查询引擎能在多大程度上映射和/或扩展其API?

企业级能力

以下是评估企业级能力的考虑事项:

高可用性

  • 提供多长的正常运行时间(99.99%-99.999%)?
  • 能在线升级底层OS(有可用于读取和写入的数据)吗?
  • 能在线升级底层文件系统(例如,Hadoop分布式文件系统)吗?
  • 能在线升级底层存储引擎吗?
  • 能在线升级查询引擎吗?
  • 为了适应节点和/或磁盘的扩容和收缩,能在线重新分配数据吗?
  • 能在线更改表格定义吗?例如,更改所有列数据类型,添加、删除、重命名列?
  • 能在线创建和删除二级索引?
  • 支持在线备份——完全备份和增量备份吗?

可管理性

  • 支持哪些管理功能(更多信息,请参阅图1-9)?
  • 支持混合负载的管理吗(即通过每秒的事务来分析运营性能,根据复杂的查询和其结果来衡量分析性能)?
  • 与分析工作负载相反,在运营工作负载上收集指标的开销是多少?
  • 能设置收集统计信息的间隔来减少开销吗?
  • 能否根据工作负载的优先级和/或资源分配,使工作负载达到服务级别目标?
  • 能否提供从应用到查询引擎、再到存储引擎的端到端的事务和查询的详细统计信息?
  • 为查询提供操作符(执行计划)的度量信息吗?
  • 为所有工作负载提供到分区级别的度量信息吗?
  • 能否提供足够的信息来找出倾斜或瓶颈的位置?
  • 如何与YARN或Mesos集成?

结论

本报告总结了一些使用单一查询引擎来同时满足运营和分析负载可能遇到的挑战。目前而言,即使未满足HTAP的所有要求,查询引擎也能够满足客户的混合工作负载需求。该报告还阐述了您应该寻找什么,以及在使用终极数据库处理所有工作负载(运营和分析)时,您可能需要做出的调整。

关于作者

Rohit Jain是Esgyn的联合创始人和首席技术官。Esgyn是一家开源数据库公司,致力于构建融合型分布式大数据平台。2015年,惠普将Apache Trafodion(企业级大数据MPP SQL数据库)捐赠给了Apache软件基金会。在Apache Trafodion的基础上,EsygnDB的愿景是建立一个能处理任何数据、任何大小和任何工作负载的融合型分布式大数据平台。在过去的28年中,作为一个资深数据库专家,Rohit在应用程序和数据库开发领域曾为Tandem、Compaq和Hewlett-Packard工作过。他经验丰富,主要涉及在线事务处理、运营数据存储、数据集市、企业数据仓库、BI和大规模分布式并行系统的高级分析。



推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
author-avatar
爲妳奮鬥壹輩子丶故事_932
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有