当前位置: 首页 > news >正文

云时代已至,新一代数据分析平台是如何实现的?

2023 年 5 月,由 Stackoverflow 发起的 2023 年度开发者调查数据显示,PostgreSQL 已经超越 MySQL 位居第一,成为开发人员首选。PostgreSQL 在国内的热度也越来越高。6 月 17 日,PostgreSQL 数据库技术峰会在成都顺利召开。本次大会以 “新机遇、新态势、新发展” 为主题,邀请众多行业大咖参与本次活动。PieCloudDB 产品总监陈金豹也受邀在大会中发表演讲《云原生虚拟数仓 PieCloudDB 的架构和关键模块实现》。 

随着云计算时代的到来,云平台提供了近似无限丰富的计算资源,同时也使得计算成本极大的降低,释放出数据计算产生智能的更多机会。早在 2019 年,Gartner 便做出预测:数据库市场的未来在云上。随着云计算技术的发展,企业也都在向这一趋势靠拢,越来越多的将自己的业务数据往云上迁移。我们相信数据库的未来在云上,这也是我们打造 PieCloudDB 这款云原生数据仓库的原因。

PieCloudDB 于 2022 年 10 月正式问世。它是一款云原生分布式数据仓库,提供完备的 SQL 语言支持,高效的分布式计算能力和完备的事务支持。同时又实现了单一数据集的多集群,秒级的弹性和只为必要的计算和存储付费的能力。 

1. Why We Need PieCloudDB?

1.1 NoSQL 和数据湖已不能满足用户的分析需求

在过去的很长一段时间里,NoSQL + 数据湖解决方案在数据分析领域占据了主流市场,而 Hadoop、HDFS 等 NoSQL 数据库也是主要的数据分析平台。然而,随着 Cloudera 宣布停止对 CDH 技术支持,对 Hadoop 等 NoSQL 平台的质疑声音也越来越大。

这一现象正是因为 NoSQL + 数据湖体系在复杂查询支持、高并发隔离性和一致性等重要数据分析特性方面存在明显不足,现有基于标准 SQL 的 BI 工具难以集成,且 NoSQL 本身对高级分析(如图形分析、地理信息分析等)的支持较弱。因此,NoSQL 开始被人们贴上 “过时” 的标签,不再占据数据分析领域的主要市场份额。 

此外,基于 NoSQL 和数据湖的基础设施所需的分析工具不容易集成和部署。使用数据湖进行数据分析需要整合部署多个组件,而这需要大量的开发工作。由于缺乏对 ANSI SQL 的支持,用户通常需要具备专门的技术技能,并且需要承担较高的技术和成本要求。此外,平台所需的专用引擎 / 工具(如图形数据库)往往难以与记录系统集成,降低了数据分析的可操纵性和创新性。

这些限制和挑战推动了对更强大、更易于集成、更易于使用的数据分析平台的需求。企业和组织越来越倾向于采用基于标准 SQL 的分析平台,这些平台能够满足用户广泛的分析功能、易于集成和部署等需求,并且与现有的数据存储和处理技术相兼容,对技术和成本的要求更低。

1.2 以关系型数据库为基础的数据仓库很难适应云环境

包括 Teradata、Greenplum 等众多主流传统数据仓库都是以关系模型来组织数据的关系型数据库。这些数据仓库具有许多优点,包括良好的 SQL 兼容性、高效运行复杂查询以及支持事务 ACID 特性。然而,这些传统的 MPP 数据库也存在一些缺陷,例如弹性性能较差、高可用性方面不够满足要求、数据孤岛等问题。

这些问题导致传统的数据仓库在云环境中无法充分利用公有云的优势。公有云相对于私有环境具有许多优势,其中最显著的两个是:

  • 近乎无限的弹性计算资源:公有云提供了弹性计算资源,用户可以根据实际需求按需分配资源,并根据需要进行弹性扩缩容。用户可以根据业务需求申请所需的计算资源,而不需要维护和管理自己的硬件基础设施。
  • 廉价且无限容量的对象存储:公有云提供廉价且具有几乎无限容量的对象存储。对象存储的价格相对较低,可以为用户提供大规模的存储容量,帮助用户降低成本并提高效率。 

为了更好地适应云环境并充分利用公有云的优势,新一代的数据仓库逐渐崛起。新一代云原生数据仓库具有云原生的架构设计,能够更好地利用公有云的弹性计算和对象存储能力。它们可以在公有云中快速部署和扩展,并提供高性能的数据处理和分析能力,以满足现代数据分析的需求。 

1.3 一个兼顾关系型数仓和公有云优势的产品

用户需要一个能够兼顾关系型数仓和公有云优势的产品,来适应云时代的到来。计算引擎方面,需要具有关系型数仓的众多优势,能够具备支持完备的 SQL 语言,具有高效的分布式计算能力,且能够具有完备的事务 ACID 特性。公有云特性方面,实现存算分离,提供弹性的计算集群,让用户得以只为必要的计算付费,充分利用公有云带来的优势。这就是 PieCloudDB 的设计目标。

2. PieCloudDB 能给用户带来什么?

作为新一代的云原生数据仓库,PieCloudDB 实现了云上数仓计算与存储的分离,兼顾了传统关系型数仓的众多优势和公有云带来的众多利好。

2.1 对 SQL 的完备支持

PieCloudDB 对 PostgreSQL 进行了重大改进,实现了分布式计算和存算分离的功能。并对锁、事务、日志、系统表和用户表的存储等模块进行了彻底重写,带来了颠覆性的变革。同时,PieCloudDB 也保留了 PostgreSQL 对 SQL 标准的完整支持,包括复杂查询如聚合(Agg)、子计划(Subplan)、子链接(Sublink)、外连接查询(Outer Join)、窗口聚合函数(Window agg)和物化视图(Materialized View)等。这些改进使得 PieCloudDB 能够提供更高效、更强大的查询功能,同时保持与 SQL 标准的兼容性。

2.2 高效的查询优化和与之匹配的执行器

PieCloudDB 实现了专为复杂查询设计的优化器和与之匹配的高效执行器。

  • 专为复杂查询设计的优化器

PieCloudDB 的优化器提供了一系列全面的逻辑优化功能,其中包括谓词下推、子查询子连接提升和外连接消除等。此外,优化器基于纯粹的代价模型进行深度优化,在多阶段聚集过程中对每个节点进行代价估算,并利用动态规划等算法生成多条路径,最终选择代价最低的路径来执行查询。这些功能旨在提高查询性能和效率,从而优化 PieCloudDB 的查询执行过程。

作为一款分布式数据库,PieCloudDB 需要实现众多分布式运算,包括多次数据重分布(reshuffle)和分布式聚合运算(agg)。为了能够在跨表查询时进行高效的分布式表连接,PieCloudDB 的优化器需要全面描述数据分布特性,以便进行分布式代价估算。

通过全面的数据分布特性描述,PieCloudDB 的优化器能够考虑到数据在不同节点上的分布情况,从而更准确地估算跨表查询的代价。这使得优化器能够生成高效的查询计划,避免不必要的数据重分布操作,提高查询性能和效率。

  • 分布式环境高效执行器

为了配合专为复杂查询设计的优化器,PieCloudDB 实现了高效的执行器,以在分布式环境下执行查询操作。通过采用多组别多阶段执行模型,并进行大量的数据交换,PieCloudDB 的执行器能够在分布式环境下高效地执行查询操作。这种执行模型可以充分利用分布式系统的计算资源,并提高查询的并行性和整体性能。同时,通过与优化器的紧密配合,PieCloudDB 可以根据优化器生成的查询计划特性来优化执行器的执行策略,进一步提高查询性能和效率。

2.3 对事务(ACID)的完备支持

PieCloudDB 提供了对事务的完备支持,包括事务的 ACID 特性:原子性、一致性、隔离性和持久性。

  • 原子性(Atomicity):PieCloudDB 确保事务中的操作要么全部成功完成,要么全部失败回滚。如果一个事务中的某个操作失败,那么该事务中的所有操作都将被回滚,数据库状态会回到事务开始之前的状态,保持数据的一致性。
  • 一致性(Consistency):PieCloudDB 在事务提交之前,会检查事务的操作是否符合预定义的约束和规则,以确保数据库的一致性。如果事务执行完成后,数据库仍然保持一致性,那么该事务被认为是成功的。
  • 隔离性(Isolation):PieCloudDB 支持两个常用的隔离级别:Read Committed(读提交)和 Repeatable Read(可重复读)。在 Read Committed 级别下,事务只能看到其他事务已经提交的修改,而在 Repeatable Read 级别下,事务在整个事务过程中能够看到一个一致的快照,不受其他并发事务的修改影响。
  • 持久性(Durability):PieCloudDB 确保一旦事务提交成功,其对数据库的修改将永久保存,即使发生系统故障或崩溃。这是通过将事务日志记录在稳定的存储介质上来实现的,以便在恢复过程中可以重放事务日志。

通过提供对事务 ACID 特性的完备支持,PieCloudDB 提供了可靠和一致的数据管理机制。无论是在并发环境中还是在面临故障的情况下,PieCloudDB 都能确保数据的完整性和可靠性。

2.4 极致的计算集群弹性

PieCloudDB 具备极致的计算集群扩缩容能力,能够实现计算集群快速的扩展和收缩操作。PieCloudDB 的 Executor 节点并不持有持久化的数据,扩展和收缩操作不涉及数据的移动。此外,Executor 节点也不直接访问系统表、事务和锁。在进行计算集群的扩展时,PieCloudDB 只需要在新的虚拟机节点上部署二进制并向元数据服务注册。这样的设计确保了扩缩容操作的高效性。

PieCloudDB 为用户提供了一个独立的计算池,该计算池是为了支持快速的扩缩容而准备的。在这个计算池内,PieCloudDB 可以在一定范围内实现秒级的扩容和收缩操作。这意味着当用户需要增加计算资源时,PieCloudDB 可以迅速添加新的计算节点,使得整个集群能够处理更多的并发请求。反之,当用户需要减少计算资源时,PieCloudDB 也能够快速地收缩计算节点,以节省成本和资源。

2.5 多集群与高可用

PieCloudDB 支持多集群。用户可以在同一个数据集上起多个集群。在生产环境中,常常会遇到不同的部门对集群大小的需求不一样。这种情况下,如果只有单集群,就需要根据最大的集群需求来创建集群,造成资源的浪费。在多集群场景下,不同部门可根据自身需求创建不同大小的集群,任务结束时可以关闭集群,多个集群访问同一个数据集,并共享同一个 ACID 特性。

由于 PieCloudDB Executor 是无状态的,当某个 Executor 出现故障,Coordinator 会执行下个 Query 时,由剩下的 Executor 来执行任务。此过程中,用户无感知,不会对业务产生影响。

通过这些特性,PieCloudDB 在 OLAP 场景下,可以让用户像使用 PostgreSQL 一样使用 PieCloudDB。用户只需为已经发生的计算和存储付费。用户可以按需启动和关闭多个不同大小的集群,以适应不同类型的任务,从而取得性能和开发效率的平衡。

3. PieCloudDB 云原生架构的实现

为了适应云环境,PieCloudDB 实现了弹性伸缩的集群和多集群这两个主要的云原生特性,打造了完全无状态的 Executor 节点、独立的系统表和分布式的锁。

3.1 虚拟数仓

PieCloudDB 为了实现在扩缩容过程中无需移动数据,将用户数据分离到对象存储中。此外,Executor 节点上不存储系统表、事务和锁信息,而是依赖 Coordinator 来解决这些问题,从而使 Executor 节点成为无状态的节点,实现秒级扩缩容。

为了实现 Multi-master 架构,并实现有状态的 Coordinator 节点,PieCloudDB 使用元数据服务来完成这些功能。系统表以 Key-Value 的形式存储在 KV 数据库 FoundationDB 中,并通过 FoundationDB 的短时间、小体量的事务特性,实现了分布式锁和分布式事务。这样,PieCloudDB 能够在 Coordinator 节点上处理分布式锁和事务,并保证系统的一致性和可靠性。

通过这一系列的设计和操作,PieCloudDB 实现了完全无状态的虚拟数仓。用户可以根据需要创建和关闭虚拟数仓,而在扩缩容过程中无需移动数据,并且能够快速进行节点的扩展和收缩。这使得 PieCloudDB 能够高效地适应不同规模和负载的需求,并提供灵活的数据存储和计算资源管理。

  • 系统表:mStore

PieCloudDB 将元组以 Key-Value 的形式存储到 FoundationDB 中,并利用 FoundationDB Key 的自然排序来实现索引。在 PieCloudDB 中,每个元组都被编码为一个 Key-Value 对,其中 Key 表示元组的索引信息,而 Value 则包含了元组的数据内容。通过利用 FoundationDB Key 的自然排序,可以高效地进行范围查询和索引查找,从而实现快速的数据检索和访问。

为了实现多版本并发控制,PieCloudDB 使用了 Xmin、Xmax 和 cid 等机制。Xmin 和 Xmax 记录了事务对元组的可见性信息,其中 Xmin 表示最早可见的事务,而 Xmax 表示最晚可见的事务。cid(Commit ID)则表示事务的提交标识。通过这些机制,PieCloudDB 可以实现并发事务的隔离性和一致性,并支持多版本的查询和回滚操作。

通过将元组存储为 Key-Value 对,利用 FoundationDB 的自然排序和采用 MVCC 机制,PieCloudDB 能够高效地处理数据的存储、索引和并发访问,从而提供高性能和可靠的数据库服务。

  • 数据表:oStore

PieCloudDB 通过将数据分离到对象存储(如 S3)上,利用 oStore 构建了对象存储上的用户表。由于对象存储本身只支持插入(insert)和删除(delete)操作,而不支持更新(update)和追加(append)操作。PieCloudDB 在 mStore 中创建辅助表来实现 MVCC(多版本并发控制)的特性。

在 mStore 的辅助表中,每 个 tuple 对应 oStore 的一个 block,oStore 的 block 中存储了一部分的用户数据。这样,辅助表的每个 tuple 的可见性就与对应的 block 的可见性相关联,从而实现了 MVCC 的特性。当执行更新(update)或删除(delete)操作时,PieCloudDB 会生成一个新的 block,将未发生变化的 tuple 放入新的 block 中,并将更新后的用户数据放入新的 block 中(例如,在 block 4 上执行更新操作后,生成一个新的 block 5,将更新后的用户数据放入新的 block 5 中)。最后,辅助表将完成更新(update)操作。 

通过这种设计和操作,PieCloudDB 能够在对象存储上实现 MVCC 特性,并通过辅助表来管理数据的版本和可见性。这使得 PieCloudDB 能够支持更新和删除操作,同时保持数据的一致性和并发控制的正确性。

  • 分布式锁和事务

PieCloudDB 利用 FoundationDB 的事务提交冲突(commit conflict)机制来实现锁的共享区的正确访问,从而实现了分布式的锁。

在 PieCloudDB 中,多个事务需要访问共享区时,它们会通过 FoundationDB 的事务机制进行竞争和协调。每个事务尝试获取锁并执行对共享资源的操作。如果多个事务同时请求同一个共享锁,FoundationDB 的事务提交冲突机制会确保只有一个事务能够成功获取锁并进行操作,而其他事务将被阻塞或回滚。

通过利用 FoundationDB 的事务提交冲突机制,PieCloudDB 能够实现分布式的锁管理,确保对共享区的正确访问和资源的互斥操作。这种机制保证了多个事务之间的隔离性和一致性,避免了数据竞争和冲突的发生,并提供了可靠的分布式锁功能。

此外,PieCloudDB 还在 FoundationDB 上实现了分布式的事务,并通过 mStore、oStore、分布式锁和事务的实现,构建了一个云原生的分布式架构。这样的架构能够提供高可靠性、高性能的数据库服务,并支持分布式的数据操作和管理。

优秀的架构设计是一款数据库产品成功的第一步,OpenPie 研发团队将对 PieCloudDB 产品进行不断迭代,针对性能推出了聚集下推、预计算、Block Skipping 等功能,并很快将推出 Time Travel、Branch、Data Sharing 等系列提高用户的使用体验。PieCloudDB 将继续前进,在 eMPP 分布式专利技术、服务器无感知(Serverless)及 透明数据加密(TDE)等多项核心技术加持下,为企业构建高安全性,高可靠性,高可用性的「坚如磐石」的云原生虚拟数仓,助力企业实现数据价值最大化,欢迎关注! 

相关文章:

云时代已至,新一代数据分析平台是如何实现的?

2023 年 5 月,由 Stackoverflow 发起的 2023 年度开发者调查数据显示,PostgreSQL 已经超越 MySQL 位居第一,成为开发人员首选。PostgreSQL 在国内的热度也越来越高。6 月 17 日,PostgreSQL 数据库技术峰会在成都顺利召开。本次大会…...

【C#】简单聊下Framework框架下的事务

框架用的多了,之前版本的事务都忘记了。本次简单聊下.net framework 4.8框架下本身的事务 目录 1、SqlClient2、TransactionScope3、引用 1、SqlClient 在 C# 中,使用 using 块可以方便地实现对资源的自动释放,但它不适用于实现事务处理。为…...

asyncPool并发执行请求函数

asyncPool应用场景 一个不太常见的极端场景,当我们为了某个操作需要发生异步请求的时候,等待所有异步请求都完成时进行某些操作。这个时候我们不在简简单单的发送 1 - 2 个请求而是 5 - 10个(其实极端场景式 很多很多个请求,这个…...

Ubuntu 22.04上安装NFS服务

1、使用如下命令安装NFS服务端软件: # 在主机上运行以下命令 orangepiorangepi5:~$ sudo apt install nfs-server 2、在配置NFS时需要使用用户uid和组gid,可以使用id命令查看 # 在主机上运行id命令 orangepiorangepi5:~$ id uid1000(orangepi) gid100…...

数据结构--双链表

数据结构–双链表 单链表 VS 双链表 单链表:无法逆向检索,有时候不太方便 双链表:可进可退,存储密度更低一丢丢 双链表的定义 typedef struct DNode {ElemType data;struct DNode *prior, *next; }DNode, *DLinkList;双链表的初…...

javassist 动态修改 jar 包中 class

Javassist(Java Programming Assistant)是一个用于在运行时操作字节码的库,它可以用于动态修改和操作Java类。使用Javassist,可以通过修改现有的类或创建新的类来实现动态修改Jar包中的类。 下面是一个简单的示例,展示…...

什么是CC攻击?

CC攻击:DDOS(分布式拒绝服务攻击)的一种。黑客利用代理服务器或者控制的肉鸡,向目标web网页发送大量的请求,致使CPU处理不过来这么多的请求,长期处于100%的状态。造成通过该页面访问的端口堵塞,正常请求进不来。 怎么…...

​LeetCode解法汇总253. 重构 2 行二进制矩阵

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你一个 2 行 n 列的二进制数组: 矩阵是一个二进制矩阵&#xff0…...

ChatGPT实战:生成演讲稿

当众发言(演讲)是一种传达信息、观点和情感的重要方式。通过演讲,人们可以在公共场合表达自己的观点,向观众传递自己的知识和经验,激发听众的思考和行动。无论是商务演讲、学术讲座还是政治演说,演讲稿的写…...

在线搭建K8S,kubernetes集群v1.23.9,docker支持的最后一个版本

1. 部署环境主机(条件说明) master 192.168.186.128 CentOS Linux release 7.9.2009 (Core) node1 192.168.186.129 CentOS Linux release 7.9.2009 (Core) node2 192.168.186.130 CentOS Linux release 7.9.2009 (Core)2. 系统初始化-所有节点&am…...

http自动跳转https的配置方法

要将HTTP自动重定向到HTTPS,您需要在Web服务器上进行以下配置: 在Web服务器上安装SSL证书。 打开Web服务器配置文件(如Apache的httpd.conf或Nginx的nginx.conf)。 找到监听HTTP请求的端口(通常是80端口)。…...

重新初始化k8s集群

执行如下命令,所有节点都执行 kubeadm reset初始化集群,仅在master(centos01)上执行 [rootcentos01 opt]# kubeadm init --apiserver-advertise-address 192.168.109.130 --image-repository registry.aliyuncs.com/google_containers --kubernetes-ve…...

JetBrains编程IDE将具备Ai助手功能,或将提高开发速度

近日JetBrains发布博客文章宣布,本周所有基于IntelliJ的IDE和.NET工具的EAP版本都将具备AI助手功能。而这些操作或许将提高开发效率,并且这些AI助手也是使用自家的**ERP**模型和OpenAI服务。 JetBrains表示,当下AI助手功能主要体现在IDE的两…...

【网络原理】TCP/IP协议五层模型

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。 目录 …...

【备战秋招】每日一题:2023.05.10-华为OD机试(第二题)-解密

为了更好的阅读体检,可以查看我的算法学习博客 在线评测链接:P1307 题目内容 在全球恐怖主义危机下,一组间谍团队接收到了来自地下工作者的一串神秘代码。这组代码可以帮助他们访问恐怖分子的服务器,但是他们需要先解密代码才能使用它。代…...

【华为OD机试】矩阵最大值(python, java, c++, js)

矩阵最大值 前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:nansun0903@163.com;备注:CSDN。 题目描述 给定…...

通过USB和wifi连接真机编写第一个脚本

目录 一、连接手机 1、通过usb数据线连接手机 2、无线连接手机 二、编写第一个脚本 一、连接手机 1、通过usb数据线连接手机 数据线连接手机并允许调试 cmd命令行执行: adb devices 如果没有显示device信息,请检查: 手机是否开启usb调…...

【javascript】 javascript对象函数 总结

Object.entries( ) 作用:返回一个数组,获取对象所有可枚举属性的名称 和 可枚举属性的值 const obj { a: 1, b: 2 }; const entries Object.entries(obj); console.log(entries); // [[a, 1], [b, 2]] Object.keys( ) 作用:返回一个数组…...

LVS+Keepalived 高可用群集实战部署

LVSKeepalived 高可用群集实战部署 一、Keepalived的概念1、LVS2、Keepalived及其工作原理3、Keepalived体系主要模块及其作用4、VRRP协议(虚拟路由冗余协议) 二、LVSKeepalived 高可用群集部署LVS 部署1.配置负载调度器(主、备相同&#xff…...

MCU启动过程

启动文件 启动文件到底什么作用,其实启动文件主要是进行堆栈之类的初始化, 中断向量表以及中断函数定义。启动文件要引导进入main 函数。 开发STM32F103用的启动文件是startup_stm32f10x_hd.s S32K146使用的启动文件是startup_S32K146.S 芯片架构 STM…...

Mysql 5.6使用配置文件my.ini来设置长时间连接数据库

对于已经安装了mysql和未安装都是同样的步骤。在C:\Program Files (x86)\MySQL\MySQL Server 5.6下生成一个my.ini文件。然后删除或者修改my-default.ini的名字。 一、my.ini配置文件如下 [mysqld] basedirC:\Program Files (x86)\MySQL\MySQL Server 5.6 datadirC:\Program F…...

改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手

高效多尺度注意力(EMA) 论文介绍简介EMA模块图像分类实验目标检测实验yolov5加入方法yolo注册yaml文件yolov8加入方法EMA代码及加入方式yaml文件1EMA注意力论文 https://arxiv.org/ftp/arxiv/papers/2305/2305.13563.pdf 论文介绍 通道或空间的显著有效性 注意机制对产生更多…...

图像色彩增强论文调研

阅读论文 Deep Symmetric Network for Underexposed Image Enhancement with Recurrent Attentional Learning(ICCV2021) 使用对称编码器和解码器学习图像从低曝光转化到正常图片的映射方式,通过IFT(Invertible Feature Transformer)网络和提…...

ORACLE透明网关ODBC连接MYSQL

客户需求oracle访问mysql数据,客户是linux7.3 11.2.0.4单实例,字符集GBK,mysql是5.7.31,字符集UTF8,下面结合网上的文档和自己的实践,配置过程如下 1.安装oracle透明网关 首先在oracle服务器上面安装ora…...

Flutter网络请求框架Dio源码分析以及封装(二)--Cookie管理分析

Flutter网络请求框架Dio源码分析以及封装--Cookie管理分析 前言问题如何使用CookieJarCookieManagerPersistCookieJar总结 前言 上一篇文章我们简单分析了一下Dio发出请求时的大致工作流程,这个只是Dio最基本的功能,而且我们还没有分析走到httpClientA…...

Unity如何设计一个技能系统

一、技能系统的设计思路 技能系统是游戏中非常重要的一部分,因此在设计技能系统时需要考虑以下几个方面: 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬&#xff0…...

测试流程体系

目录: 软件测试基本概念软件测试模型软件测试工作流程测试左移和测试右移 1.软件测试基本概念 通过手工或者工具对"被测对象"进行测试验证实际结果与预期结果之间是否存在差异 软件测试作用 通过测试工作可以发现并修复软件当中存在的缺陷&#xff…...

Linux下CentOS KVM 虚拟化

介绍: KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它是基于Linux内核的虚拟化解决方案。KVM可以将一台物理服务器分割成多个虚拟机,每个虚拟机都可以运行不同的操作系统和应用程序,从而实现…...

< vue + ElementUi 组件封装:实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 >

实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 👉 前言👉 一、效果演示👉 二、实现思路👉 三、实现案例👍 卷王必胜!往期内容 💨 👉 前言 在 Vue elementUi 开…...

MATLAB 之 低层绘图操作和光照及材质处理

这里写目录标题 一、低层绘图操作1. 曲线对象2. 曲面对象3. 文本对象4. 其他核心对象4.1 区域块对象4.2 方框对象 二、光照和材质处理1. 光照处理2. 材质处理2.1 图形对象的反射特性2.2 material 函数 一、低层绘图操作 MATLAB 将曲线、曲面、文本等图形均视为对象&#xff0c…...