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

OceanBase V4.3.3,首个面向实时分析场景的GA版本发布

在10月23日举办的 OceanBase年度发布会 上,我们怀着激动之情,正式向大家宣布了 OceanBase 4.3.3 GA 版的正式发布,这也是OceanBase 为实时分析(AP)场景打造的首个GA版本。

2024 年初,我们推出了 4.3.0 版本,作为迈向实时分析的关键一步,引入了基于 LSM-Tree 架构的列存引擎。经过几十个用户真实场景的打磨验证,4.3.3 版本在 AP 性能和功能方面不断进步,通过一体化帮助用户在复杂的混合负载环境中获得更快的响应时间和更优的吞吐能力。

在 4.3.3 GA 版本中,我们实现了多项关键突破。针对多工作负载场景进行了大幅性能优化,特别是在 AP 关键特性方面取得了显著提升。我们对列存引擎进行了深入优化,并扩展了应用场景,包括列存表、列存索引、行列混存表和列存副本等。

此外,向量化引擎 2.0 的引入,以及对物化视图、外部表、RoaringBitmap 和 Array 等复杂类型的支持,使系统在处理多样化数据时更加灵活。新形态的列存副本实现了 TP 和 AP 负载的物理资源强隔离,确保系统在处理事务型负载时不受分析型负载的影响,尤其在实时数据分析和决策场景中保持高性能与稳定性。

经过实际基准测试,OceanBase 4.3.3 GA 版本在 TPC-H 1TB 数据集的查询性能从 4.3.0 版本的 99 秒提升至 60 秒,实现了 64% 的性能提升。该版本能够在不同业务场景下满足数据存储和分析的多样化需求,在海量数据分析时提供更短的响应时间和更高的吞吐能力。

在 AI 支持方面,4.3.3 引入了向量检索能力,支持向量数据类型和向量索引,结合强大的多模一体化及分布式存储能力,大幅简化 AI 应用技术栈,助力企业高效构建 AI 应用。

这一版本的发布标志着 OceanBase 在实时 AP 场景和 AI 向量融合一体化方面的重要进展。接下来,让我们深入探讨 OceanBase 4.3.3 GA 版本的主要特性和亮点:

  • 列存
  • 向量化引擎 2.0
  • 物化视图
  • 外部表
  • 数据导入导出
  • 复杂类型
  • 向量检索
  • 全文索引
  • 可靠性提升

OceanBase V 4.3.3 现已支持 365天 免费试用,点击立即开启 >> 

1、AP关键特性

(一)列存

在大规模数据复杂分析或海量数据即席查询场景中,列式存储是 AP 数据库的关键能力之一。列式存储是一种数据文件组织方式,区别于行式存储,它将表中的数据按照列进行物理排列。数据为列式存储时,分析场景可仅扫描用于查询计算的列数据,避免整行扫描,减少 IO 和内存等资源使用,提升计算速度。另外按列存储也天然具备更好的数据压缩条件,更易获得较高的压缩比,减少存储空间和网络传输带宽。

OceanBase 在 LSM-Tree 架构基础上扩展支持了列存引擎,一套代码一个架构一个 OBServer,实现列存和行存数据的存储一体化,兼顾 TP 和 AP 的请求性能。围绕列存引擎,在不同的业务场景也提供了几种不同的产品方案。

  • 列存表:纯 AP 业务的推荐方案,具备更好的分析性能。在此基础上有高性能点查需求时,对应表上添加行存索引即可。
  • 列存索引:针对 TP 业务,有少量分析需求时,可以考虑在行存表上,为分析涉及的若干列创建列存索引。
  • 行列混存表:TP、AP 业务边界不清晰,一个业务内可能既有联机事务又有实时分析时,可以创建为行列混存表,优化器基于代价自动决策 SQL 使用行存还是列存。并可借由资源组实现 USER 或 SQL 级的资源隔离。
  • 列存副本:HTAP 场景,有资源物理隔离诉求时,可以基于 TP 集群扩展独立的 Zone 存储只读列存副本。TP 业务访问行存 Zone,AP 分析以弱读方式访问列存 Zone。

(二)向量化引擎 2.0

OceanBase 在早期版本已经实现了基于 Uniform 数据描述方式的向量化引擎,性能较非向量化引擎有了明显提升,但在深度 AP 场景,还有一些性能上的不足。新版本实现了向量化引擎 2.0 版本,更改为 Column 数据格式描述,避免了 ObDatum 维护带来的内存使用、序列化和读写访问开销。基于数据格式描述重构,各项算子和表达式也进行了重新实现,显著提升大数据量计算性能。

(三)物化视图

物化视图(Materialized View)通过预计算和存储视图的查询结果,减少实时计算来提升查询性能,简化复杂查询逻辑,常用于快速报表生成和数据分析等场景。

因为物化视图需要存储查询结果集来优化查询性能,而物化视图与基础表之间存在数据依赖关系,每当基础表数据发生变动时,物化视图中的数据必须进行相应更新以保持同步,所以新版本也引入了物化视图刷新机制,包括全量刷新和增量刷新两种策略。全量刷新是一种较为直接的方式,每次执行刷新操作时,系统会重新执行物化视图对应的查询语句,完整地计算并覆盖原有的视图结果数据,这种方式适用于数据量相对较小的场景。相对来讲,增量刷新仅需处理自上次刷新以来发生变更的部分。为了实现精确的增量刷新,OceanBase 实现了类似 Oracle MLOG(Materialized View Log)的物化视图日志功能,通过日志详细跟踪记录基础表的增量更新数据,从而确保物化视图能够进行快速增量刷新。增量刷新方式尤其适用于数据量庞大且变更频繁的业务场景。

周期性或手动刷新的非实时物化视图,一般可以满足大部分分析场景的查询诉求,但在一些实时性要求很高的业务场景下,实时物化视图则是更优选择。因此 OceanBase 也提供了基于物化视图和 MLOG 两部分数据实时计算的实时物化视图能力,相对普通视图具有明显的性能优势。

另外新版本也支持了物化视图改写能力。系统变量 QUERY_REWRITE_ENABLED 设置为 True 的情况下,创建物化视图指定自动改写能力,系统就可以将对原始表的查询改写为针对物化视图的查询,而不用在 SQL 中特别指定物化视图名称,以此减少业务改写成本。

为了满足物化视图数据约束需求,OceanBase 也支持了为物化视图指定主键,以此优化基于主键的单行查找、范围查询或关联场景性能。

(四)外部表

OceanBase 较早就支持了 CSV 格式的文件外部表,在此基础上新版本扩展了 GZIP、DEFLATE、ZSTD 格式的压缩文件外表的支持。除此之外,随着 AP 业务的逐渐拓展,发现一些数据湖场景中,读取 Parquet 格式的外部数据源的需求也非常普遍。因此,新版本也支持了 Parquet 文件外表,用户可通过外表将文件内数据导入 OceanBase 内表,也可直接将外表用于跨数据源的联合查询分析。

另外,新版本支持了外部表分区功能,类似普通表 list 分区的分区方式,并提供了自动/手动分区的两种语法。指定自动创建分区时,系统将按照分区键的定义方式,将文件按照分区进行分组;指定手动创建分区时,需要用户指定每个分区对应的数据文件子路径。这种情况下,外表查询可以根据分区条件实现分区裁剪,减少扫描的文件数量,提升查询性能。

同时,为了保证外表所扫描的文件目录的实效性,新版本增加文件目录自动刷新功能,建外部表时可通过 AUTO_REFRESH 选项指定文件列表的刷新方式(手动、实时、周期),并结合 DBMS_EXTERNAL_TABLE.REFRESH_ALL_TABLE(interval int) 系统包子程序管理定时刷新任务。

(五)数据导入导出

在 TP 业务中,insert values 写入较为常见,而 AP 业务中高性能数据批量导入、数据加工等是比较普遍的需求。OceanBase 目前支持旁路导入、外表导入、分区交换、覆盖写、客户端导入、普通导入多种导入方式。

  • 旁路导入:旁路导入通过精简数据加载的执行路径,跳过 SQL、事务、memtable 等模块,直接将数据持久化为 SSTable 来显著提升数据导入的效率。OceanBase 目前支持全量、增量两种旁路导入方式。全量旁路导入需要将表中数据重写,因此更加适用于空表导入场景。如果数据表有多次导入的需求,可使用增量旁路导入的方式,只需处理新增数据,让多次导入像第一次导入一样具有高性能。
  • 外表导入:现阶段为了获得更好的分析性能,可以通过 insert into 内表 select 外表的方式,将外部数据导入 OceanBase。外表导入同样也可以利用旁路导入能力提升导入性能。
  • 分区交换:分区交换是通过修改数据字典中分区和表的定义,而无需进行数据的物理复制,可以将 A 表数据近乎瞬时地移动到 B 表某个分区下的能力。适用于区分活跃和非活跃数据,需要将非活跃数据进行归档的场景。
  • 覆盖写(INSERT OVERWRITE):数据仓库中进行数据定期刷新、数据转换、数据清洗修正的场景,数据覆盖写入是较为常见的需求。OceanBase 支持表级、分区级的覆盖写能力,原子实现表或分区内旧数据清空和新数据写入。基于全量旁路导入能力,INSERT OVERWRITE 也体现出较高的执行性能。
  • 客户端导入(LOAD DATA LOCAL INFILE):客户端导入是一种通过流式文件处理完成本地文件导入的方式,开发人员无需上传文件至服务器或对象存储也可进行本地文件导入测试,提高少量数据导入的工作效率。
  • 普通导入:区别于旁路导入,普通导入是一种需要经过 SQL 优化阶段的导入方式,适用于存在较多数据约束的场景。

以上多种数据导入方式均可支撑数据实时入库,但实时导入的方式需要在导入过程中等待导入完成,不能中断会话,这在大规模数据导入的场景不够友好。所以在此基础上,OceanBase 又提供了一种异步任务调度能力,用户可通过 submit job、show job status 和 cancel job 等命令实现异步导入任务的创建、状态查询和任务取消。

除此之外,数据导出也是一种较常见的业务需求,OceanBase 内核层面提供了一种 select into outfile 导出文本文件的方式,支持并行读取数据表,并行写入外部文件。同时也提供了按自定义分区规则组织导出目录的方式。后面版本将会提供全面的外表导出(数据覆盖写入外表)能力。

(六)复杂类型

随着大数据时代的来临,企业对于用户数据的挖掘和分析需求日益增强。RoaringBitmap 凭借着其节省空间、计算高效等特点,在用户画像、个性化推荐、精准营销等业务场景发挥了重要作用。OceanBase 在 MySQL 模式下支持了 RoringBitmap 数据类型,通过存储和操作一组无符号整数,提升大数据量集合计算、去重性能。为了满足多维度分析需求,该版本支持了用于基数计算、集合运算、Bitmap 判断、Bitmap 构造、Bitmap 输出、聚合运算的二十余项表达式。

ARRAY 是 AP 业务中常用的复杂数据类型,可以储存多个同类型的元素,在涉及到管理和查询关系型数据不能有效表示的多值属性时,ARRAY 类型是个合适的选择。OceanBase 在 MySQL 模式下也支持了 ARRAY 类型,建表时可以定义某列为数值型或字符型的数组类型,并允许定义为嵌套数组;支持构造表达式用于数组对象的查询或写入,支持 array_contains 表达式和 ANY 操作符用于判断数组中是否包含某个元素;同时也支持了+/-/=/!= 等操作符进行数组元素计算和判断。

多值索引是一种适用于 JSON 文档和其他集合数据类型进行元素高效检索的有效手段。OceanBase 在 MySQL 模式下兼容了 JSON 多值索引特性,允许在包含多个元素的 JSON 数组字段上创建高效的二级索引,增强了复杂 JSON 数据结构的查询能力,兼顾了数据模型的灵活性和数据查询的高性能。

2、AP性能提升

(一)基准测试

1. TPC-H 1T,从 99s 到 60s

在 TPC-H 1TB 基准测试中,OceanBase 4.3.3 GA 版本相较于 4.3.0 版本性能大幅提升。4.3.0 版本的查询时间为 99 秒,4.3.3 GA 版本将这一时间缩短至 60 秒,实现了约 64%的性能提升。从图中可以看出,在多个查询任务上,4.3.3 GA 版本相比 4.3.0 版本均展现出显著的性能优势,进一步验证了 OceanBase 在实时分析场景下的优化效果。

4.2.1 LTS

4.3.0

4.3.3 GA

耗时(秒)

126.32

99.14

60.41

性能提升

27%

64%

2. 更强的 ClickBench 性能 

在 ClickBench 基准测试中,ClickHouse 在 Cold Run 场景的执行时间为 139.57 秒,而 OceanBase 4.3.3 GA 版本的执行时间为 90.91 秒,性能提升达 54%。在 Hot Run 的 1 和 2 场景中,ClickHouse 的执行时间分别为 44.05 秒和 36.63 秒,而 OceanBase 分别为 34.92 秒和 34.08 秒,性能提升分别为 26%和 6%。这些数据表明,OceanBase 在多次执行过程中实现了显著的性能提升。

(二)分场景参数初始化

作为一体化数据库,OceanBase 支持多种业务类型,如 Express OLTP、Complex OLTP、OLAP、HTAP、KV 等。一套默认的系统参数不能很好地适用所有场景,例如 IO 读取方式在不同的业务场景下有不同的最佳推荐。所以基于不同的业务类型,OceanBase 区分不同场景梳理了一些关键参数的最佳配置,结合云平台、OCP 等工具进行分业务场景的参数初始化,以达到对应场景下的较优开箱性能。

3、AP稳定性增强

SQL 执行涉及的数据量过大的情况下,可能出现内存不足的问题,这时部分算子需要物化临时的中间结果。当物化的数据量过大,磁盘空间写满时,会导致 SQL 执行失败。OceanBase 支持了 SQL 临时结果压缩功能,当指定压缩时可有效降低临时磁盘空间占用,以支撑更大运算量的查询任务。

4、向量检索

随着 AI 技术应用的发展和普及,图像、视频和文本等非结构化数据呈爆炸式增长,这些非结构化数据可以通过 Embedding 算法用高维向量表示,并用于分析处理。在此过程中,向量数据库应运而生。向量数据库是一套全托管的非结构化数据处理解决方案,可用于存储、索引、检索 embedding 向量。向量索引是其中最重要能力之一,向量索引将关键词搜索转为向量化检索,从确定性搜索转为相似性检索,实现了对大规模、高维向量的检索需求。

OceanBase 在 MySQL 模式下提供了向量类型存储、向量索引、embedding 向量检索的能力。支持最大 16000 维的 Float 向量存储,加、减、乘、比较、聚合等基础运算,支持近似最近邻搜索,及最大 2000 维的 HNSW 索引。可用于支持检索增强生成(RAG),满足图像和视频检索、行为偏好推荐、安全和欺诈检测、ChatGPT 类应用的业务场景。

目前已经和 LlamaIndex、DB-GPT 等应用开发框架对接,支持快速构建 AI 应用。其他框架也在紧锣密鼓地适配中。

5、全文检索

关系型数据库中通常会使用索引来加速基于精准值匹配的查询,但普通的 B-Tree 索引无法应用于涉及大量文本数据需要进行模糊检索的场景,这时只能通过全表扫描来对每一行数据进行模糊查询,文本较大、数据量较多的情况下性能往往不能满足要求。另外一些复杂的查询场景,如近似匹配、相关性排序等,也难以通过改写 SQL 支撑。

为了解决上述问题,OceanBase 支持了全文索引功能,通过预先处理文本内容,建立关键词索引,有效提升全文检索效率。目前已支持兼容 MySQL 的全文索引能力,后续也会扩展更多满足复杂检索逻辑的功能支持,并进一步提升性能。

6、可靠性检索

新版本支持了租户克隆能力,用户可在 SYS 租户下对指定主租户或备租户快速克隆出一个新租户。租户克隆任务执行完成后,新克隆租户为备租户,也可将其转为主租户提供服务。新克隆租户和原始租户在初始状态下共享物理宏块,但新的数据变动和资源使用会按租户进行隔离。当用户需要对在线租户进行高资源消耗的临时数据分析或其他高风险操作时,为了避免对在线租户造成影响,可使用克隆租户完成分析或验证。同时也可将克隆租户作为容灾手段,若原始租户发生了难以恢复的误操作,可使用克隆租户进行数据回滚。

此外,OceanBase 还支持了一种快速恢复能力。当前的物理恢复是一个全量数据恢复过程,只有当数据(转储+基线)及日志都恢复了,物理恢复才能完成,然后用户才可以登录并使用这个恢复完成的租户。当数据量很大时,一方面数据恢复需要很长时间,另一方面,由于要恢复全量的数据,用户在一开始就需要为这个租户预留足够的磁盘空间,从而保证恢复成功。然而在某些场景下,例如用户仅是用恢复出来的租户做一些查询校验,用完之后就会销毁恢复,查询期间只会涉及少量 tablet 时,全量恢复成本太大,浪费空间、时间和网络带宽。

新版本支持的快速恢复是一种只恢复日志不恢复数据的能力,数据无需恢复到本地即可提供读服务。同时,数据备份支持了对备份的 SSTable 构建基于备份地址的中间层索引,通过该索引,OBServer 能够像读取本地数据一样随机读取备份的 SSTable。

7、写在最后

4.3.3 GA 版本是 OceanBase 在实时分析和 AP 场景上的重要突破,标志着我们在构建现代数据架构上迈出了坚实一步。未来的 4.3.x 版本中,我们将继续优化和增强 AP 功能,打造一体化产品能力,不断满足业务场景中的多样化需求。

我们衷心感谢每一位用户和开发者在 OceanBase 4.3.3 版本中的支持与贡献。你们的反馈和建议,是我们不断提升产品、攻克技术难关的动力。OceanBase 希望在未来的发展道路上,继续与用户一起,共同打造更高效、更强大的分布式数据库!


如果你感兴趣, 可以免费试用 OceanBase V 4.3.3 ,也欢迎给我更多关于产品或场景上的建议!

相关文章:

OceanBase V4.3.3,首个面向实时分析场景的GA版本发布

在10月23日举办的 OceanBase年度发布会 上,我们怀着激动之情,正式向大家宣布了 OceanBase 4.3.3 GA 版的正式发布,这也是OceanBase 为实时分析(AP)场景打造的首个GA版本。 2024 年初,我们推出了 4.3.0 版本…...

Maven随笔

文章目录 1、什么是MAVEN2、Maven模型3、Maven仓库4、项目集成1_Idea集成Maven设置2_创建Maven项目3_POM配置详解4_maven 坐标详情5_Maven工程类型6_导入Maven项目 5、依赖管理1_依赖配置2_依赖传递3_可选依赖4_排除依赖4_可选依赖和排除依赖的区别5_依赖范围6_继承与聚合7_版本…...

牛客题目解析

一.最长回文子串 1.题目&#xff1a;给定一个仅包含小写字母的字符串&#xff0c;求它的最长回文子串的长度。 最长回文子串__牛客网 2.算法原理&#xff1a; <1>动态规划算法:O(n^2),O(n^2) 具有通性&#xff0c;凡涉及回文子串的问题都可利用此法解决 知识储备&am…...

AG32的3个ADC可以并联使用吗

AG32的3个ADC可以并联使用吗&#xff1f; Customer: 需求&#xff1a; 在t1时间段&#xff0c;用5M的速度ch1通道采样得到结果1. 在t2时间段&#xff0c;用5M的速度ch2通道采样得到结果2. 在t3时间段&#xff0c;用5M的速度ch3通道采样得到结果3. 然后如此循环 。 考虑用3…...

什么是 OpenTelemetry?

OpenTelemetry 定义 OpenTelemetry (OTel) 是一个开源可观测性框架&#xff0c;允许开发团队以单一、统一的格式生成、处理和传输遥测数据&#xff08;telemetry data&#xff09;。它由云原生计算基金会 (CNCF) 开发&#xff0c;旨在提供标准化协议和工具&#xff0c;用于收集…...

[vulnhub]DC:7

https://www.vulnhub.com/entry/dc-7,356/ 端口扫描主机发现 探测存活主机&#xff0c;178是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-03 13:30 CST Nmap scan report for 192.168.75.1 Host is up (0.00037s l…...

个性化十足的贵族服务器,惠普ML310e Gen8,服务器中的 “潘多拉魔盒”

个性化十足的贵族服务器&#xff0c;惠普ML310e Gen8&#xff0c;服务器中的 “潘多拉魔盒” 小伙伴们大家好呀&#xff0c;这里是勤奋的凯尔森同学&#xff0c;今天给大家分享一款好玩的服务器&#xff0c;惠普ML310e Gen8 V2&#xff0c;相比大家都很熟悉HP ProLiant MicroS…...

百度社招内推

百度社招内推 「百度内推」快来投递你心仪的职位吧&#xff08; 网申链接地址&#xff1a;https://dwz.cn/ah4OUcca&#xff09;&#xff0c;填入内推码&#xff0c;完成投递&#xff0c;get内推绿色通道~我的内推码&#xff1a;IZ9PVH 内推有什么好处&#xff1a; 简历直达…...

本地部署开源在线即时通讯软件Fiora打造个人私密聊天室

文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 相信大家在聊天时候总是很没安全感&#xff0c;比如在和小姐妹背着男朋友聊一些不能说的坏话&#xff0c;或者背着女朋友和兄…...

TS(类 接口 泛型)

文章目录 类复习相关知识属性修饰符public 修饰符属性的简写形式 protected修饰符private修饰符readonly修饰符 抽象类 接口&#xff08;interface&#xff09;定义类结构定义对象结构定义函数结构接口之间的继承接口自动合并 &#xff08;可重复定义&#xff09;一些相似的概念…...

docker 启动 neo4j

docker 启动 neo4j 1. 启动2. 导入数据 1. 启动 运行下面命令启动 neo4j&#xff0c; docker run \-d \--restartalways \--publish7474:7474 --publish7687:7687 \--volume$HOME/neo4j-4.4.38/data:/data \--name neo4j-apoc-4.4.38 \-e NEO4J_dbms_allow__upgradetrue \-e …...

OPENAI官方prompt文档解析

官方文档地址:https://platform.openai.com/docs/guides/gpt-best-practices 文档中文版来源:OpenAI 官方提示工程指南 [译] | 宝玉的分享 (baoyu.io) 1.写清楚说明 如果prompt给的范围十分模糊或是过于宽泛,那么GPT就会开始猜测您想要的内容,从而导致生成的结果偏离预期. …...

【GESP】C++一级练习BCQM3092,双面打印

GESP一级知识点if分支语句和取余、整除操作练习。比较简单。 题目题解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3092/ 【GESP】C一级练习BCQM3092&#xff0c;双面打印 | OneCoderGESP一级知识点if分支语句和取余、整除操作练习。比较简单。https://www.coderli.…...

mysql--多表查询

一、联合查询 作用&#xff1a;合并结果集就是把两个select语句的查询结果合并到一起&#xff01; 合并结果集有两种方式&#xff1a; UNION&#xff1a;合并并去除重复记录&#xff0c;例如&#xff1a;SELECT * FROM t1 UNION SELECT * FROM t2&#xff1b; UNION ALL&a…...

RHCE-Web-nginx http实验和nginx https实验

一、web服务器简介 &#xff08;1&#xff09;什么是www www 是 world wide web 的缩写&#xff0c;也就是全球信息广播的意思。通常说的上网就是使用 www 来查询用户 所需要的信息。 www 可以结合文字、图形、影像以及声音等多媒体&#xff0c;并通过可以让鼠标单击超链接的…...

少儿编程学习现状洞察:青少年编程教育需求与学习频率分析

随着少儿编程教育的逐渐普及&#xff0c;越来越多的家庭开始关注孩子在编程学习中的表现。根据最新数据&#xff0c;90%的少儿编程学员保持每周至少一节课的学习频率&#xff0c;而95%的编程课程都安排在周末。特别是在8岁、10岁、12岁及15岁以上的年龄层次&#xff0c;孩子的学…...

接口集成、快速对接-阿里身份证实名认证接口

身份证实名认证接口现已被应用在联网的各种业务场景中&#xff0c;如电商、在线教育、银行等等&#xff0c;下面以电商平台为例&#xff0c;列举翔云身份证实名认证接口在电商平台中的具体应用和优势。 电商平台的出现方便了人们的生活&#xff0c;进行电商的实名认证有助于提高…...

HTTP、WebSocket、gRPC 或 WebRTC:各种协议的区别

在为您的应用程序选择通信协议时&#xff0c;有很多不同的选择。 本文将了解四种流行的解决方案&#xff1a;HTTP、WebSocket、gRPC 和 WebRTC。 我们将通过深入学习其背后原理、最佳用途及其优缺点来探索每个协议。 通信方式在不断改进&#xff1a;变得更快、更方便、更可靠&…...

Unity3D学习FPS游戏(8)装弹和弹夹UI显示

前言&#xff1a;实现了武器的基本发射功能&#xff0c;但是我们弹夹数量是有限&#xff0c;之前并没有做装弹和弹夹显示的功能。本篇实现装弹和弹夹显示。 装弹和弹夹UI显示 装弹目标思路和实现 弹夹UI显示目标弹夹UI的思路和实现UI代码的思路和实现 武器控制的完整代码效果补…...

Android 托管 Github Action 发布 Github Packages ,实现 Mvn 免费自动化托管

自从多年前 JCenter 关闭服务之后&#xff0c;GSY 项目版本就一直发布在 Jitpack 上&#xff0c;如今每个月也都有大概 10w 左右下载&#xff0c;但是近年来时不时就会出现历史版本丢失的问题&#xff0c;而且有时候还不是某个具体版本丢失&#xff0c;而是版本里的某几个依赖突…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...