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

如何从 0 到 1 ,打造全新一代分布式数据架构

导读:本文从 DIKW(数据、信息、知识、智慧) 模型视角出发,探讨数字世界中数据的重要性问题。接着站在业务视角,讨论了在不断满足业务诉求(特别是 AI 需求)的过程中,数据系统是如何一步一步发展到体量庞大、性能飘忽、框架复杂。面对业务对性能、正确、实时三大核心需求,重点讨论了一种全新架构对已有系统问题的新解法,并回归业务原点演绎新思路如何一步一步落地的全过程,最终打造出新一代数据系统 - 分布式 Data Warebase。最后,通过结合电商和广告行业的实际案例,展示了这一新系统如何为企业带来技术和商业上的深远价值突破。

作者:杨克特

整理:Taylor

本文整理自 ProtonBase 技术副总裁杨克特在 SECon 上海站的演讲《分布式 Data Warebase - 面向 AI 时代的数据架构》。


01/数字世界的 DIKW 模型

人类世界的智慧是怎么来的?1989 年 Russell Ackoff 提出了一种信息层次模型:DIKW(Data、Information、Knowledge、Wisdom),描述了一条从数据到智慧抽象加工链路,帮助组织和个人在决策中有效利用信息。

怎么理解这个模型呢?这里举个例子。

当只看到一个数据 9.8 的时候,你可能会一脸疑惑,What?这是因为并没有给到你,这个数据对应的上下文信息。当你收到的是“一个一千克的铁球以 9.8 米/秒²的加速度在下落”,你就大概就知道了这个 9.8 指的是铁球的加速度。

这个时候你可能好奇,拿着其他材质、其他形状的球进行观察,发现它们下落加速度都是 9.8 米/秒²,于是你会归纳出“所有物体都会以 9.8 米/秒²的加速度下落”。这种归纳和抽象使信息能够转化为知识,从而可以推广预测,比如可以推断 8 kg 的铅球也将以 9.8 米/秒²的加速度下落。

基于上一步的总结和归纳,在深入抽象和理解之后,你可能会进一步得推断出“重力加速度与落体本身的特性无关”,进一步可以将其推广到时空维度,这就是广义相对论的核心思想。

现在,其实我们已经进入到了数字世界。这个世界就是基于数据一步一步构建而来。

数字世界的智慧构建也经历了跟 DIKW 相似的过程。从最开始的找到数据、对数据进行组织规划、统计分析。这个刚好对应了数据的价值链条,即从数据采集、业务建模、数仓建模分析。

底层数据的好与坏,决定了上层应用产生的洞察质量。比如数字化运营场景,因为数据收集不全或者不完整,基于有误导性的信息,推导出偏离反映业务实际的结论,进而错误得指导投放策略,最后没能拿到预期的商业结果。

所以在数字时代,数据更重要。

个业务系统构成了数字世界最核心的基础。那数据是如何被一步一步用来构建起庞大的业务数据系统呢?

02/企业级数据系统架构演进

这里以一个民宿平台为例,讨论在不断满足业务需求的同时,业务数据系统是如何从单一到多元、从简单到复杂。

💡 从 MVP 打磨到业务起量

业务初期,民宿的房东把自家房屋上架到民宿平台,有需求的用户在平台上浏览、查寻、对比自己感兴趣的民宿,之后可能会在平台上完成预定、入住、离店、以及评价等常规业务操作。

实现这样一个民宿平台应用,首先从核心的应用服务搭建出发,一开始业务体量相对有限,产品功能设计一般会按照 MVP 的思路进行设计。从数据架构角度看,概括来说就是简单查询,所以最初一般会把所有的数据都存储在关系型数据库中,比如 MySQL 或者 PostgreSQL。

随着业务体量增长,遇到五一或者国庆这样的假期,民宿的需求往往爆发式增长,很快就会发现简单的单机关系型数据库会遭遇性能瓶颈,这个时候我们一般有两种选择:在已有的关系型数据库上进行分库分表;或者引入 NoSQL 类型的数据库,比如 MongoDB。主要因为以下三点:

  • 通过简单增加服务器资源,就可以实现水平扩容以有效应对更高的业务负载;
  • 分布式架构和优化的数据存储方式,更适合处理大数据量的业务场景;
  • 灵活的数据模型,能适应多变应用需求。

MVP 阶段应用打磨得相对成熟以后,一般就会进入市场和营销推广阶段,业务用户量开始迅速上升,需求也越来越多元,用户不再局限于通过以全名的方式查找民宿,而是希望能够根据一些关键词就能够找到自己感兴趣的民宿,在这方面 MongoDB 提供的能力相对有限。于是系统进一步引入 ElasticSearch,主要其提供了强大的搜索能力,采用倒排索引使得查询速度非常快,近乎实时的数据处理等特性。工程实现上,为了让搜索引擎能够提供搜索服务,首先需要把数据导入到搜索引擎之中。数据的导入一般分为两种形式,第一种是全量的数据导入,关系型数据库和 NoSQL 数据库里面的数据会定期以全量的方式导入到搜索引擎。第二种,如果应用对数据的时效性有比较高的要求,还要再引入增量的数据同步链路,比如采用 Kafka 和 Flink 这样的技术把上游的增删改同步到搜索引擎之中。当搜索引擎有了这些数据后,就可以为应用提供高性能的关键词搜索服务。

此时的数据架构大约是这样:

💡 传统 AI 助力运营精细化

首先解释下,这里的传统 AI 是相对于当下比较火热的生成式 AI 而言。这里主要讨论传统 AI 下,常见的业务应用需求:含业务洞察和实时决策。

这个时期,业务已经渡过了最初的用户量少、商家少、业务数据量少的状态,我们希望对业务进行各种业务分析,比如节假日平台 GMV 的同环比是什么情况,民宿预订量 Top10 的城市是哪些,用户画像是怎样等等。所以系统开始引入了像 Snowflake 或者 Hive 这类数仓产品。这时需要把各种业务数据从各个数据库同步到数仓,然后就可以使用 ClickHouse 或者 Hive 对数仓进行全面的 BI 分析。

同时伴随业务用户量的增加,不仅带来人群的多样性,更带来了需求的多元化。以往面向全量用户的运营方式收到的效果开始变得越来越小,甚至有时还会产生亏损。同时伴随着市场环境由增量市场转变为存量市场,面对用户的运营更加呼唤企业精细化运营。

有了数据分析,运营人员就可以根据用户画像,找到自己活动推广的目标人群,完成定向投放的精细化运营,并根据投放的效果,可以实时看到活动的效果。当然手法更加细腻的市场或运营人员,会采用 AB 实验的方式,验证了有效果之后再从小量推到全量。整个活动的全链路都依赖于数据系统强大的汇总分析能力。

这里举两个例子:业务洞察、实时决策。

离线 AI:业务洞察

民宿房东希望更多住客来自家民宿,所以他决定通过折扣来做推广。为了提高推广的成功率,他希望只发送给全量用户中,对价格敏感的那一群人。为了做到这点,首先理解用户,根据用户的基本信息、以及用户和平台交互的各种行为信息,构建出描述用户的知识。这个知识可以表达为潜空间中的一个嵌入向量,为每个用户构建了相应的嵌入向量后,就可以对这些嵌入向量分类,进而判断出一个用户是否对价格敏感。找到这部分价格敏感的人群包,就可以交由运营或市场部门进行营销活动。

从工程实现上讲,需要首先对大量的用户行为数据,包括业务数据等进行数据的预处理,筛选出丰富的人群特征,之后交由模型训练,找出判断价格敏感用户的关键特征,最后从用户表中找到符合特征的用户人群。

此时的数据架构大约是这样:

实时 AI:实时决策

民宿是较受季节因素影响的行业,有淡旺季之分,因此如果民宿价格全年保持不变,多少显得有些不合理,也不符合市场经济学的基本规律。淡季时,可能长时间无人租住,给老板带来一笔不小的损失。所以房东为了提高淡季入住率,在总体空置率比较高的时候,更倾向降低价格以吸引潜在的租客。同样的道理,在旺季时候,在不影响入住率的前提下,稍微提高下价格,能够给自己带来更好收入。于是,就产生了价格波动。这类情况同样在民航、房地产、钢铁等行业中存在。

价格什么时候变动?变动多少?怎么调整可以让利益最大化?如果人工判断将会是一件复杂又有些繁琐的事情,相信老板内心也是拒绝的。可以试着使用传统的 AI 来做这件事。民宿老板想产生更多盈利的业务诉求,就转变为系统上如何实现价格的自动调整问题。

通过上面问题的描述,发现影响价格很重要的两个方面因素:民宿和市场。民宿方面,基础的操作需要根据民宿的各种特性,比如装修风格、年份、房间数、地理位置等通过模型产生出一个代表民宿知识的嵌入向量。然后获取市场相关的信息,比如民宿所在地区当前的总入住率、相似民宿的价格、入住率等信息。AI 模型通过将这些信息和知识整合在一起,实时推断出一个最优价格,从而实现民宿实时自动定价功能。

技术实现上,这个功能需要依赖于一个在线的模型服务,当然这个服务也会依赖上文提到的数据预处理和模型训练。

为了给这个在线模型服务提供高吞吐、低延迟的特征输入,需要有个在线的特征存储,特征的数据量往往比较大,通常会采用 MongoDB 或者 HBase 这类存储作为在线特征存储。由于训练时用到的一些特征也可能被当作模型服务的输入,这部分离线的特征必须同步到在线的特征存储中。

此时的数据架构大约是这样:

2022 年底出圈的大模型技术,让生成式 AI 带给业务应用新的想象力,某红衣大叔曾说过:“任何行业都值得用大模型重做一遍”。

💡 生成 AI 创新应用新常态

大模型号称超越所有人类的知识储备,这一点毋庸置疑,但在细节颗粒度上,其表现可能并不尽如人意。以公司为例,如果询问大模型关于员工停车位的具体安排,它可能会给出答案,但这些答案的准确性或实用性,往往不及直接查阅文档或向相关人员咨询。实际上,公司内部存在大量内容型文档,如员工手册、流程规范、项目工程管理等。如果将这些资料整合进大模型的学习体系,系统的实用性和准确性将显著提升。通过结合 RAG(检索增强生成)技术,大模型能够有效补充外部知识库,从而实现更精准和具有实际价值的输出。

这里简单提下 RAG 技术实现思路。

RAG 本质上是一种技术组合范式,即把向量搜索技术和大模型上下文学习的能力相结合,发展出的检索增强生成技术。当用户提交一个问题,首先是大语言模型改写这个问题,然后用文本嵌入模型为改写好的问题生成嵌入向量。再通过向量搜索,基于潜入向量,找出跟这个问题对应内容。最后再把这些内容以及用户的问题同时作为上下文输入给大语言模型,大语言模型就可以通过上下文学习(也就是 In-context-learning)的能力去理解这些信息,并且根据这些信息给出答案。

此时的数据架构大约是这样:

业务诉求的不断发展,让业务数据系统变得越来越庞大。面对如此复杂、大体量的数据架构,很难想象它能很好的满足业务高可用、高效率的、高质量的诉求。这种架构往往也存在一些显著的痛点。

03/问题与需求之间的解空间

🔍 那些不得不提的痛点

运维视角:面对庞大的业务系统,感受最近同时也是最深的要属运维人员,同时运维这么多业务系统或数据产品,势必带来运维复杂度的上升。比如 CPU 抖动下系统就挂掉,特别是数据同步,它往往是一个系统中最薄弱的环节,很容易导致系统的不稳定、上层数据的异常。同时因为一份数据需要在多个产品中重复存储,一致性方面存在很大挑战也带来了更大的成本。

开发视角:构建这样复杂的架构有较高的开发门槛。开发人员需要学习和理解多个不同的数据产品,每个数据产品都有其局限性,开发人员需要去理解并绕开这些问题。对很多中小公司来说,招聘大量优秀的数据和 AI 工程师是个挑战,这就导致很多数据的业务价值并没有被完全地挖掘出来。即使团队很幸运拥有这样工程师,面对业务诉求,工程师们可能会采用多种数据产品或技术,以尝试满足满足业务诉求,这个时候大量的时间其实花在了繁琐的数据同步上,这无疑极大地降低了开发效率,降低了业务的迭代节奏,也相对阻碍了业务的发展速度。

业务视角:尽管我们刚才所讨论的架构是从业务需求倒推而来,但从业务视角来看,它仍然存在一定的不足。一个显著的问题是数据同步,特别是不同产品之间的数据传递与更新,这不可避免地带来了数据延迟。数据延迟往往会导致业务系统中的数据不一致,从而影响决策的准确性,甚至引发业务问题。对于创新型业务而言,数据延迟问题尤为突出。因为这类业务通常涉及多个系统的协作和数据流转,任何延迟都会显著放慢从概念到落地的进程,拖慢业务的实施速度。这样一来,业务就难以在短期内形成市场竞争力,错失快速响应市场需求的机会。

🔍 真真实实的业务诉求

在数据系统的应用中,性能、正确性和实时性是至关重要的要求,直接影响用户体验和业务运作的效率。

性能方面,系统需要克服单机容量瓶颈,提升查询任务效率,并支持水平扩展。这不仅关系到用户的体验,还可能直接影响业务的顺畅进行。举个例子,用户希望通过即席查询快速获得数据,却因查询延迟而只能看着加载圈转动,无法及时获取所需信息。再如,当任务量增加时,机器资源的不足可能导致系统崩溃,造成业务运营中断,第二天早上运营人员无法及时查看前一天的数据,严重影响业务处理和决策。

正确性则是数据系统的基础要求,关乎数据的准确性和一致性。保证数据的正确性不仅能支撑业务的正常运转,也为业务拓展提供可靠的数据支持。如果数据系统频繁出现问题,带来的不仅是经济损失,更重要的是会削弱业务用户的信任,影响系统的长期使用与推广。

实时性日益成为许多应用场景的核心需求。特别是在像股票交易、实时风控和电商推荐系统等关键业务中,实时性直接决定了业务的成败。例如,在风控场景下,数据的实时处理与分析能够立即识别风险,防止潜在的资金损失;在电商推荐系统中,实时数据分析能够提升用户体验,精准推送个性化推荐,增强用户粘性。随着实时需求的不断增加,数据系统必须具备快速响应和处理的能力,以适应这些关键且高效的业务场景。

🔍 创新思维下解题新思路

在业务不断发展的过程中,架构上的问题往往会被推到一旁,特别是在经济爬坡周期,企业更倾向于加速探索新的业务模式,架构中的数据同步、性能瓶颈和延迟等问题,可能在这种环境下愈加突出。尽管如此,业务依然不会因此停止其发展节奏,反而可能带来更多的压力和挑战。

现有的庞大数据架构,实际上是在当时的技术条件和公司系统环境限制下逐步构建起来的。多数情况下,企业只能采用增量方式来应对问题,也就是基于现有系统的基础,逐步加以优化和调整。可是,如果我们跳出当前架构的框架,从第一性原理出发,是否可以从零开始,打造一个全新的、创新的数据系统呢?一个不仅能完美满足业务核心诉求,还能彻底解决当前架构臃肿、低效、不可扩展等问题的系统?

其实,行业中已经有一些成功的探索和实践。数据库技术已经发展了十多年,逐渐走向成熟。那么,假如我们回到业务发展的起点,利用当今最前沿的技术思想和相对成熟的解决方案,重新构建一个完全符合未来业务需求的数据系统,结果会是怎样?

为了便于说明,我们将这个全新构建的数据系统命名为“巨鲸座”(这一名字取自许多企业在研发新系统时所用的代号,往往寓意着宏大和先进,如“盘古”“天枢”等)。这个代号不仅象征着系统的雄心,也代表着我们对未来数据技术突破的期待与创新。

04/拆解核心技术打造新一代系统

接下来一起回到业务最初的状态,看巨鲸座是如何一步一步,从 0 到 1 打造新一代数据系统。

✨ 简单查询:解决分布式、一致性问题

此时,业务系统面临的最大痛点是:单机系统的存储容量瓶颈及扩展性严重不足。因此,很多人会想到,将数据存储分布在不同的机器上,借此解决扩展性问题。然而,这样的做法也引发了一个天然的问题——一致性

在分布式架构中,一个操作可能涉及到多个机器上的多张表。例如,用户表和订单表可能分布在不同的机器上。当业务方需要删除一个用户时,系统需要在多台机器上找到该用户的记录,并同时删除与之关联的多个订单。如何确保操作的一致性,并避免出现“脏数据”或不一致的结果,是一个关键问题。

为了解决这个问题,出现了两种思路:

  1. 在关系型数据库基础上实现分布式,同时解决一致性问题。
  2. 使用 NoSQL 数据库,特别是文档型数据库,在扩展性方面天然具有优势。

在第二种思路中,NoSQL 文档型数据库通过一种“取巧”的策略来简化一致性问题:将相关信息(例如,用户和订单)存储在同一个文档中,这样所有的数据操作就仅仅针对单个文档执行,避免了跨机器的数据同步问题。然而,这种方式仅适用于 1 对 1 或 1 对多的场景。在多对多的场景下,例如商品表与订单表之间的关联,数据操作依然会跨越多个机器和多张表,导致 NoSQL 数据库的处理复杂度大大增加。

基于上述问题,巨鲸座决定采用第一种思路,即在传统关系型数据库的基础上实现分布式架构。这种方式不仅能继承关系型数据库成熟的事务一致性保障能力,还能充分利用 SQL 生态圈的优势,尤其是在复杂查询和数据模型上的支持。

通过使用分布式事务和类型扩展,巨鲸座可以替代传统的 MySQL/PostgreSQL 和 MongoDB,满足业务对大数据量和高一致性要求下的简单查询支持需求。这样,企业在构建大规模分布式系统时,不仅能实现数据的扩展性,还能保持高效、可靠的一致性保障。

以民宿平台为例,通过采用巨鲸座,民宿老板可以优化其数据架构。例如,在管理系统中,民宿描述和条件信息的修改会立即反映到数据库中,而不需要等待延迟同步。搜索引擎和业务系统的数据同步问题也可以通过巨鲸座的分布式关系型数据库架构得到解决,使得业务数据和搜索数据同步更新,避免了由于同步延迟导致的业务损失。

总之,巨鲸座提供了一个兼具高性能、高一致性和灵活扩展性的解决方案,为分布式架构中的一致性难题提供了全新的解法,并助力各行业系统架构的优化与创新。

✨ 改造关键字搜索:解决实时性诉求

我们继续以民宿平台为例,假设民宿老板为了提高自家民宿的曝光率,升级了民宿的描述和条件,并将这些信息录入后台数据库系统中。老板使用了“免费停车”、“下午茶”等关键字进行搜索,然而,当他在平台上进行检索时,仍然找不到自己民宿的相关信息。

从技术角度来看,这个问题的根源在于业务库和搜索引擎之间的数据同步出现了延迟或问题。通常情况下,系统会设置一些同步策略(例如每 15 分钟同步一次),这意味着当业务库中的数据更新时,搜索引擎的索引并不会立刻同步更新,造成了数据的不一致和延迟。虽然这种延迟在技术上是可以预见的,但从业务角度来看,它显然无法满足实时性需求,尤其在民宿预订量高峰期,如节假日前夕,客户希望能够在短时间内找到自己的房源,这种延迟可能会直接影响订单量,从而影响商业收入。

为了优化用户体验,如何实现实时响应呢?

一个大胆的思路是:既然数据同步带来了延迟,那能否直接去除同步环节?也就是说,能够在原始业务库数据上进行实时搜索。这就需要解决的最后一个问题是:如何确保搜索性能。

对于搜索引擎来说,它之所以能够提供快速的关键字查询,依赖于一种叫做“倒排索引”的技术。倒排索引通过构建文档与关键词之间的映射关系,从而快速定位到相关数据。为了实现这一点,巨鲸座在其分布式关系型数据库的基础上,直接实现了倒排索引,同时引入了全局二级索引。通过异步方式,将数据库表中被索引的列与主键列自动同步到索引表中,这种同步通常会在毫秒级别内完成,几乎没有延迟。

通过这种方式,巨鲸座不仅实现了原始业务库上的实时搜索,而且省去了引入额外搜索引擎的需求,解决了数据同步带来的延迟问题。

基于这一架构,民宿平台的数据系统可以进行如下改造:

  • 业务数据实时更新:无需等待数据同步周期,业务库和搜索索引保持实时一致,用户搜索时能够快速获取最新信息。
  • 简化架构:通过将数据存储和搜索引擎功能集成在同一个系统中,减少了维护成本和系统复杂性,同时避免了数据同步带来的潜在问题。
  • 提升响应速度:通过倒排索引和全局二级索引技术,搜索查询的响应速度得到了大幅提升,能够实现秒级响应。

这种改造不仅能显著提升用户体验,还能帮助民宿平台在竞争激烈的市场中脱颖而出,增强业务的实时响应能力。

到这里,民宿应用数据系统架构可以改造如下:

✨ 改造数据仓库:解决离线、实时问题

目前绝大多数情况下,大数据主要基于离线数仓搭建,离线数仓有个很大的问题,为了追求速度和效率的平衡,在写操作上,会依赖于前值系统的攒批,也就是会每隔固定的时间去执行。这种实现方式天然的很难到达实时性要求。

大数据的另一种是基于实时数仓的方式搭建,其实是间隔更小粒度的离线数仓,数据写入追求最终一致性。这就会导致出现一些比较隐晦的场景,比如张三跟李四转账 50 元的场景,由于中间链路问题,可能会出现李四账户先进行处理(先收到消息),假如在这个时间节点上发起了一个平台账户余额的查询请求,就会发现平台凭空多了 50 元。当然业务系统处理时,可能会采取一些策略方式,来避免这种小概率问题的产生,但这种问题还是依然存在。

而这种事务性方面的问题,天然的是关系型数据库擅长解决的,用一致性保障实时查询的要求。巨鲸座要想完全实现数据仓库,还需要拿下数据仓库最核心的三个技术点:

列式存储:大数据的分析通常情况下采用多维分析的比较多一些,所以相比行数据,更关心某一列或某几列的数据,所以才去列式存储更适合分析的场景,同时同一维度的内容语义上更接近,压缩效率更高,更有利于存储性能提升。

向量执行:计算方面,大数据需要处理的数据量级很大,在计算方面,算子通常将操作应用于一组数据(向量)而不是单个数据点,从而来实现高效并行处理,减少查询执行时间和提升整体性能。

物化视图:这是一种在建模方面,通过预计算的一种方式,避免相同的数据查询请求反复执行,降低系统开销同时加速查询速度。

✨ 改造语义搜索:解决向量化问题

大模型最核心的底层能力在于语义搜索,其数据支持层面依赖于向量数据库,而向量数据库最核心的技术点在于两个:向量类型、向量索引。

向量类型借助关系型数据库的类型扩展能力,就可以相对方便的实现。就像搜索召回系统依赖于倒排索引一样,在大模型的应用领域中的向量召回依赖的是向量的索引,同样的也可以在关系型数据库的类型扩展中实现。

从工业实践来看,要用向量的话,或许并不需要一个单独向量数据库,可能一个插件就够用了,比如 PostgreSQL 中通过 Vector 插件的方式就能集成向量能力。

当在关系型数据库系统中,同时实现了向量类型和向量索引的话,还会有一个意外的好处:更有的搜索效果。当只在向量这个维度做召回,有时候效果也许并不是最好的,其实也可以结合关键词搜素领域里面的处理策略,比如一种考虑了文档长度和词频的饱和效应、改进的 TF-IDF:BM25。比如以下这篇 Paper 中,作者发现采用结合了关键字和向量的混合向量召回技术,其效果比两种形式微调之后的大模型相比,效果更好。

到这里,巨鲸座已经集成了众多能力,最终其对民宿应用数据系统架构的终极改造如下:

这是一个极简的业务系统数据架构。也许你会问,原有系统也能满足这样的业务诉求,除了表面上看上去的系统架构精简之外,还有其他区别吗?这里就不得不提到整合的系统带来的最大好处:极致的用户体验。

统一 API:原有架构中,每一套数据库系统都有自己的 API,当需要集成的时候,就得要熟悉每套系统的 API,同时了解对其他系统的能力边界、兼容性等问题,还要在系统之间去磨合这些差异。当巨鲸座把所有的能力都集成在一个系统中之后,系统底层作为一个完整的产品,把这些差异都有效处理,对上层提供统一的 API(SQL),极大地降低技术门槛,让技术人员专注于公司业务需求的开发。

兼容已有生态:基于标准化的查询语言,这样巨鲸座就可以无缝隙的介入已有的 SQL 工具生态,比如可以直接使用 Navicat 进行客户端的连接和操作。

隔离:作为数据库事务管理 ACID 四大核心特性之一,事务是保证分布式数据库一致性的关键。通过 MVCC(多版本并发控制)、隔离级别、依赖协议、优化算法,实现高效的隔离与分布式隔离。

自适应:特别是在高并发、实时分析、多租户等环境,自适应是保证系统稳定的重点。通过查询优化器动态选择最佳执行计划,比如当发现单条的写入计划只会影响某一个数据分片时候,就可以采用一阶段提交的方式优化写。当遇到一个聚合查询涉及的数据量非常大的时候,可以选择分布式的执行计划。此外还有通过负载均衡,能够根据节点的负载情况动态调整数据分布和任务调度等。

05/Data Warebase 新一代数据系统

这里,我们给代号巨鲸座定义了一个新的名字:Data Warebase,它整合了两项发展相对成熟的数据系统技术能力:Database(数据库)和 Data Warehouse(数据仓库)。这意味着 Data Warebase 同时具有 Data Warehouse 和 Database 的所有能力和优势。

我们来整体的梳理下,分布式 Data Warebase 所具备的完整能力地图。

数据类型:基于关系模型的设计,分布式 Data Warebase 天然支持结构化的数据。通过扩展 JSON 这种文档模型,很好的支持半结构化数据。通过引入高维向量,支持从传统意义上的非结构化数据中提取的知识。

应用场景:除基础的简单查询外,它还能够很好的支持关键词查询、以及 BI 方面的汇总分析,同时引入向量,支持通过向量搜索去提取知识。

挑战极限:将所有的技术能力,基于统一的设计打造的分布式 Data Warebase ,在性能、正确性、和实时性上挑战物理极限。

极简体验:分布式 Data Warebase 给用户提供极简的体验,它兼容已有的生态,减少学习成本,最大限度地发挥现有生态工具的能力。它通过隔离去保证不同场景之间互相独立。通过自适应保证它不仅在最苛刻的业务场景达到性能、正确性、实时性的最优,而且在用户的实际场景里也能够挑战极限,达到具体场景里性能、准确性、和实时性的最优。

06/客户应用检验实战效果

✔️ 跨境电商

该客户是一家在全球已有超过 200 万的粉丝,覆盖来自 100 多个国家的消费者的跨境出海品牌。其主要对数据库产品的诉求集中在分布式事务、实时 OLAP、高并发关键字查询、大数据分析。业务系统的不断迭代中,主要有以下痛点:

架构:构建复杂的系统要求研发人员熟悉多种产品及其特性,这显著提高了开发的难度和门槛。多种产品的共存增加了运维工作的复杂性,尤其是在数据同步任务方面,给运维团队带来了额外的挑战。尽管整体数据架构是随着业务需求逐步演进而形成的,但随着业务的发展,也暴露出了一些问题。一方面,系统内部多点数据同步不可避免地会导致一定的数据延迟;另一方面,这样的架构设计也可能引发数据不一致的情况。

性能:之前使用的 PostgreSQL 在线上持续运行一段时间后,会发生某些场景查询越来越慢的问题。重启或手动执行 VACUUM FULL 后可恢复正常性能,但是 VACUUM FULL 会锁表影响线上服务,因此只能选业务低峰期执行。存在较慢查询。如在 ERP 线物流场景下,大部分查询需求秒级返回,但从之前线上某天日志来看,单日最慢查询达 147 秒。在大数据场景下使用 C 产品,涉及一个几十亿大表和其他表有比较复杂的关联和统计查询,只能支持最多一个月内的统计查询,时间范围有限,超出限制会出现内存溢出。

弹性:随着业务发展,线上各云产品实例随时有扩容需求。目前绝大多数云产品扩容时效性都在分钟以上,有的甚至需要 10 分钟,在面对扩容场景时有些力不从心。另外在扩容过程中服务也会受到一定影响,甚至需要停服进行升级。

多云:部分数据库产品和云数仓产品与云平台绑定。当客户有搬云或者出海等迁移需求时,在目标云上寻找替代品往往存在两大问题:数据同步、瓶替缺失。数据同步本身就是比较薄弱的环节,容易出错,同步后数据校验也需大量人力。无对应替代产品:某些数据产品与云平台绑定,换云后可能找不到对应替代品。

引入 ProtonBase(基于分布式 Data Warebase 理念打造的产品)之后,对业务系统的备份库统一迁移到 ProtonBase 中,同时提供分析支持。最终的效果如下:

在高效查询方面,ProtonBase 相对于 PostgreSQL 有明显的性能优势。在全量查询下,最慢的 query 查询性能从 147 秒提升到了 14 秒,是原来的 10.4 倍。针对高频更新优化,稳定的查询体验。平均延时方面降低了 5 倍效率。统一的架构带来冗余存储的大幅度减少,特别是让存储成本降低了 50%。

✔️ 广告行业

在数字广告领域,实时性和精准性是成功的关键。广告平台需要处理海量的实时竞价请求、用户行为数据以及广告投放效果数据,以实现精准投放和高效的广告优化。面对高并发访问、毫秒级响应、实时数据分析以及复杂用户画像构建的需求,传统的数据库架构已难以满足。

主要的挑战在于数据容量、服务质量(SLA)、实时高并发

广告实时竞价(RTB)要求平台在毫秒级内完成从接收广告请求、匹配用户画像、计算竞价到返回广告内容的全过程。数据库需要支持超低延迟的查询和事务处理,任何性能瓶颈都会导致竞价失败,直接影响广告收入。这方面 ProtonBase 支持到 10K rps 的峰值数据写入。

广告平台需要同时处理全球范围内的大量请求,高峰期每秒可能有数百万次的竞价和广告投放请求。系统必须支持高并发的读写操作,确保在高负载下仍能稳定运行,防止系统崩溃或响应延迟。在方面 ProtonBase 帮助客户数据处理性能提升 8 倍

为实现精准投放,需要对用户的行为数据进行实时分析,构建复杂的用户画像。这涉及对海量数据的实时计算和更新,传统批处理方式无法满足实时性要求,可能错失商机。替换为 ProtonBase 之后,使得广告转化效率提升,营收提高了 20%

ProtonBase 提供了一个高性能、安全可靠、易于扩展的数据处理平台。通过利用 ProtonBase 的多云原生、存算分离架构,提供强大的实时数据处理能力和弹性扩展能力,实现毫秒级的竞价处理、实时的用户画像分析以及投放效果评估。同时,ProtonBase 的高并发事务处理能力确保广告平台在高峰期的稳定运行,从而提升广告投放效果和运营效率。

最后,AI 加速数字社会的构建,企业的数据将比以往任何时候更加重要,同时 AI 给数据平台提了更高的要求,更大量级的数据处理速度、更高的实时性能要求等。Data Warebase 不仅能够解决当下数据平台的普遍痛点,还能满足未来 AI 的更多需求。

作者简介

杨克特,ProtonBase 技术副总裁,负责产品的设计和研发工作。

毕业于浙江大学计算机系,获硕士学位,具备 10 多年核心系统设计和研发经验。曾任阿里巴巴资深技术专家,负责过搜索引擎、资源调度、实时监控等系统的设计和研发。

具备丰富的开源经验,是 Apache Flink 和 Apache Druid 的 PMC 成员,以及 Apache 软件基金会成员。

相关文章:

如何从 0 到 1 ,打造全新一代分布式数据架构

导读:本文从 DIKW(数据、信息、知识、智慧) 模型视角出发,探讨数字世界中数据的重要性问题。接着站在业务视角,讨论了在不断满足业务诉求(特别是 AI 需求)的过程中,数据系统是如何一…...

PyPika:Python SQL 查询构建器

什么是 PyPika? Pypika 是一个 Python 库,用于构建 SQL 查询。它提供了一种简洁、直观的方式来生成 SQL 语句,而无需手动编写复杂的 SQL 代码。Pypika 的设计哲学是尽可能地接近 SQL 的自然语法,同时利用 Python 的强大功能来简化…...

剑指Offer|LCR 014. 字符串的排列

LCR 014. 字符串的排列 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。 换句话说,第一个字符串的排列之一是第二个字符串的 子串 。 示例 1: 输入: s1 "ab" s2 "eidbaooo" 输出: True 解…...

通过百度api处理交通数据

通过百度api处理交通数据 1、读取excel获取道路数据 //道路名称Data EqualsAndHashCode public class RoadName {ExcelProperty("Name")private String name; }/*** 获取excel中的道路名称*/private static List<String> getRoadName() {// 定义文件路径&…...

使用亚马逊针对 PyTorch 和 MinIO 的 S3 连接器实现可迭代式数据集

2023 年 11 月&#xff0c;Amazon 宣布推出适用于 PyTorch 的 S3 连接器。适用于 PyTorch 的 Amazon S3 连接器提供了专为 S3 对象存储构建的 PyTorch 数据集基元&#xff08;数据集和数据加载器&#xff09;的实现。它支持用于随机数据访问模式的地图样式数据集和用于流式处理…...

c++编译过程初识

编译过程 预处理&#xff1a;主要是执行一些预处理指令&#xff0c;主要是#开头的代码&#xff0c;如#include 的头文件、#define 定义的宏常量、#ifdef #ifndef #endif等条件编译的代码&#xff0c;具体包括查找头文件、进行宏替换、根据条件编译等操作。 g -E example.cpp -…...

Java旅程(五)Spring 框架与微服务架构 了解 JVM 内部原理和调优

在现代企业级应用中&#xff0c;Spring 框架和微服务架构已经成为主流技术&#xff0c;而 Java 虚拟机&#xff08;JVM&#xff09;的理解和调优对于保证应用的高性能和稳定性也至关重要。本篇博客将深入讲解 Spring 框架与微服务架构&#xff0c;并进一步探讨 JVM 内部原理和调…...

SWAT-MODFLOW地表水-地下水耦合模型建模;QSWATMOD实现SWAT-MODFLOW联合

SWAT-MODFLOW地表水-地下水耦合建模的应用重要性&#xff1a; 1.全面性&#xff1a;耦合模型能够同时考虑地表水和地下水的相互作用&#xff0c;提供了一个更全面的水文循环模拟框架。2.准确性&#xff1a;通过耦合地表水和地下水模型&#xff0c;可以提高水文模拟的准确性&…...

Azure Function 解决跨域问题

这边前端call本地部署的azure function出现了跨域问题&#xff0c;搜索一下解决方案 直接修改local.setting.json&#xff0c;在其中添加CORS配置为通配符”*”&#xff0c;就行了 local.settings.json {"IsEncrypted": false,"Values": {"PYTHON_E…...

金融租赁系统的创新发展与市场竞争力提升探讨

内容概要 随着经济的快速发展&#xff0c;金融租赁系统逐渐成为金融市场中不可或缺的一环。它不仅提供了灵活的资金解决方案&#xff0c;还促进了企业的资本结构优化与资源配置效率。因此&#xff0c;了解该系统的市场背景与发展现状至关重要。 在现今环境下&#xff0c;新兴…...

Rust: offset祼指针操作

offset是偏移元素个数&#xff0c;不是字节数&#xff01; fn main(){let student_a Student{id:20240001,name:"张三娃".into(),class_id:3,age:14,grade:1};let student_b Student{id:20240002,name:"李四牛".into(),class_id:3,age:15,grade:1};let …...

【C#】WPF设置Separator为垂直方向

1. 方法1 <Separator BorderBrush"Gray"><Separator.LayoutTransform><RotateTransform Angle"90" /></Separator.LayoutTransform> </Separator>2. 方法2 <Separator Style"{StaticResource {x:Static ToolBar.S…...

常见的限流算法

常见的限流算法 限流的定义固定窗口算法滑动窗口算法漏桶算法&#xff08;推荐&#xff09;令牌桶算法(推荐)限流粒度本地限流&#xff08;单机限流&#xff09;分布式限流&#xff08;多机限流&#xff09;分布式限流的实现 限流的定义 限流&#xff0c;也称流量控制。是指系统…...

图文教程:使用PowerDesigner导出数据库表结构为Word/Html文档

1、第一种情况-无数据库表&#xff0c;但有数据模型 1.1 使用PowerDesigner已完成数据建模 您已经使用PowerDesigner完成数据库建模&#xff0c;如下图&#xff1a; 1.2 Report配置和导出 1、点击&#xff1a;Report->Reports&#xff0c;如下图&#xff1a; 2、点击&…...

7-7 旅行售货员

目录 题目描述 输入格式: 输出格式: 输入样例: 输出样例: 解题思路&#xff1a; 详细代码&#xff1a; 题目描述 某售货员要到若干城市去推销商品&#xff0c;已知各城市之间的路程(或旅费)。他要选定一条从驻地出发&#xff0c;经过每个城市一遍&#xff0c;最后回到驻地的路…...

QT写的动态正弦曲线图显示并打印

创建一个显示正弦曲线的 QChartView&#xff0c;并通过定时器不断更新图表数据&#xff0c;模拟动态数据。此外&#xff0c;还包含了一个在特定时间自动将图表导出为 PDF 文件的功能。 代码分析和注释 #include <QApplication> #include <QMainWindow> #include &…...

AI开发:决策树模型概述与实现:从训练到评估和可视化 - Python

通过前面的一些练习&#xff0c;我们已经学习了支持向量机、 回归、 鸢尾花模型 、卷积、 知识图谱、 生成式对抗网络、 K近邻、 等AI算法的基本概念&#xff0c;熟悉了一些常用的AI库&#xff0c;并且使用PYTHON大法进行了一些实战练习。接下来&#xff0c;我们向更深一层的概…...

MySQL 性能瓶颈,为什么 MySQL 表的数据量不能太大?

MySQL的性能瓶颈(为什么MySQL有几万的qps,怎么来的?性能分析 为什么 MySQL 表不能太大网上大部分人的说法:问题的关键: B树层数对查询性能的影响到底有多大? 是什么导致的 MySQL 查询缓慢?如何解决: MySQL的性能瓶颈(为什么MySQL有几万的qps,怎么来的? 一个全表扫描的查询…...

Vue中接入萤石等直播视频(更新中ing)

一、萤石&#xff1a; 1. 萤石云开发文档&#xff1a; https://open.ys7.com/help/31 2、安装&#xff1a; npm install ezuikit-js --save 3、在文件中引用&#xff1a;import EZUIKit from ezuikit-js 4、具体代码&#xff1a; 获取accessToken&#xff1a;https://open.…...

25 go语言(golang) - 内存分配机制原理

Go 语言的内存分配机制是一个复杂且高效的系统&#xff0c;旨在为程序提供快速和安全的内存管理。理解 Go 的内存分配有助于编写更高效的代码&#xff0c;并优化程序性能。 一、内存区域 栈&#xff08;Stack&#xff09; 栈用于函数调用时的临时变量分配。栈上的内存在函数返…...

【Linux命令】ps -a 和 ps -ef 的区别

ps -a 和 ps -ef 是 ps&#xff08;process status&#xff09;命令的不同选项&#xff0c;它们用于显示不同的进程信息。以下是这两个选项的主要区别&#xff1a; ps -a -a 选项表示显示所有拥有终端的进程&#xff0c;但不包括守护进程&#xff08;daemon processes&#x…...

几个支持用户名密码的代理链工具: glider, gost, proxychains+microsocks

几个支持用户名密码的代理链工具: glider, gost, proxychainsmicrosocks gost -L:7777 -Fsocks5://192.168.2.20:7575 -Fsocks5://user:passwd1.1.1.1:10086 -Dgost&#xff1a;(https://github.com/ginuerzh/gost) 参考 https://www.quakemachinex.com/blog/279.html...

编译安装教程

编译教程 下面是一个完整的从源码编译安装软件的教程&#xff0c;涵盖了从环境准备到配置、编译、安装的所有可能会用到的步骤和细节&#xff0c;适用于各种类型的软件包。 一、环境准备 在开始编译源码之前&#xff0c;确保系统满足以下条件&#xff1a; 1. 安装必要工具 …...

计算机网络-物理层

1.1传输媒体&#xff1a; 导引型传输媒体&#xff1a;双绞线&#xff0c;同轴电缆&#xff0c;光纤 非导引型传输媒体&#xff1a;微波通信&#xff08;2&#xff5e;40GHz&#xff09; 1.2传输方式: 串行传输&#xff1a;一个接一个的依次传输 并行传输&#xff1a;一次发送n…...

缓存管理自动化:JuiceFS 企业版 Cache Group Operator 新特性发布

近期&#xff0c;JuiceFS 企业版推出了 Cache Group Operator&#xff0c;用于自动化创建和管理缓存组集群。Operator 是一种简化 Kubernetes 应用管理的工具&#xff0c;它能够自动化应用程序的生命周期管理任务&#xff0c;使部署、扩展和运维更加高效。 在推出 Operator 之前…...

Linux应用软件编程-多任务处理(线程)

线程&#xff1a;轻量级的进程&#xff0c;线程的栈区独立&#xff08;8M&#xff09;&#xff0c;与同一进程中的其他线程共用进程的堆区&#xff0c;数据区&#xff0c;文本区。 进程是操作系统资源分配的最小单位&#xff1b;线程是cpu任务调度的最小单位。 1. 线程的创建…...

MySql索引(基础篇)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 感谢各位大佬写的文章让我学到很多东西&#xff01;只是在各位大佬的基础加了我自己的思路&a…...

手机发烫怎么解决?

在当今这个智能手机不离手的时代&#xff0c;手机发烫成了不少人头疼的问题。手机发烫不仅影响使用手感&#xff0c;长期过热还可能损害手机硬件、缩短电池寿命&#xff0c;甚至引发安全隐患。不过别担心&#xff0c;下面这些方法能帮你有效给手机 “降温”。 一、使用习惯方面…...

Java实现观察者模式

一、前言 观察者模式&#xff0c;又称为发布订阅模式&#xff0c;是一种行为设置模式&#xff0c;允许对象之间建立一对多的依赖关系&#xff0c;这样当一个对象状态改变时&#xff0c;它的所有依赖者&#xff08;观察者&#xff09;都会收到通知并自动更新。 二、具体实现 …...

OpenResty开发环境搭建

简介 OpenResty 是一个基于 Nginx的高性能 Web 平台&#xff0c;用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。官方地址&#xff1a;http://openresty.org/cn/ 具备下列特点&#xff1a; 具备Nginx的完整功能基于Lua语言进行扩展&#…...

鸿蒙系统文件管理基础服务的设计背景和设计目标

有一定经验的开发者通常对文件管理相关的api应用或者底层逻辑都比较熟悉&#xff0c;但是关于文件管理服务的设计背景和设计目标可能了解得不那么清楚&#xff0c;本文旨在分享文件管理服务的设计背景及目标&#xff0c;方便广大开发者更好地理解鸿蒙系统文件管理服务。 1 鸿蒙…...

Elasticsearch-脚本查询

脚本查询 概念 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能&#xff0c;ES支持多种脚本语言&#xff0c;如painless&#xff0c;其语法类似于Java,也有注释、关键字、类型、变量、函数等&#xff0c;其就要相对于其他脚本高出几倍的性…...

【蓝桥杯——物联网设计与开发】拓展模块4 - 脉冲模块

目录 一、脉冲模块 &#xff08;1&#xff09;资源介绍 &#x1f505;原理图 &#x1f505;采集原理 &#xff08;2&#xff09;STM32CubeMX 软件配置 &#xff08;3&#xff09;代码编写 &#xff08;4&#xff09;实验现象 二、脉冲模块接口函数封装 三、踩坑日记 &a…...

devops和ICCID简介

Devops DevOps&#xff08;Development 和 Operations 的组合&#xff09;是一种软件开发和 IT 运维的哲学&#xff0c;旨在促进开发、技术运营和质量保障&#xff08;QA&#xff09;部门之间的沟通、协作与整合。它强调自动化流程&#xff0c;持续集成&#xff08;CI&#xf…...

uniapp使用live-pusher实现模拟人脸识别效果

需求&#xff1a; 1、前端实现模拟用户人脸识别&#xff0c;识别成功后抓取视频流或认证的一张静态图给服务端。 2、服务端调用第三方活体认证接口&#xff0c;验证前端传递的人脸是否存在&#xff0c;把认证结果反馈给前端。 3、前端根据服务端返回的状态&#xff0c;显示在…...

OSI 网络 7 层模型

问: 请你介绍一下OSI七层网络模型物理层解决什么问题?功能原理问题 数据链路层解决什么问题功能原理 网络层解决的问题功能原理 传输层解决什么问题功能原理会话层解决什么问题功能原理: 表示层解决什么问题 应用层解决什么问题如何展示? 问: 请你介绍一下OSI七层网络模型 物…...

RK356x bsp 7 - PCF8563 RTC调试记录

文章目录 1、环境介绍2、目标3、PCF85634、dts配置5、内核配置6、测试验证 1、环境介绍 硬件&#xff1a;飞凌ok3568-c开发板 软件&#xff1a;原厂rk356x sdk 2、目标 开发板断电后仍正常计时。 3、PCF8563 PCF8563 是由 NXP Semiconductors 公司生产的低功耗 CMOS 实时…...

Vue.js组件开发-如何实现vueFLow流程

在Vue.js组件中实现vueFlow流程实例 确保已经安装了vueFlow库。如果还没有安装&#xff0c;可以使用npm或yarn进行安装&#xff1a; npm install braks/vue-flow # 或者 yarn add braks/vue-flow步骤&#xff1a; ‌引入vueFlow组件‌&#xff1a; 在Vue组件文件中&#xff…...

upload-labs关卡记录15

图片马&#xff0c;这里就可以看到任务和注意事项&#xff1a; 使用一个正常图片&#xff0c;然后拼接一个一句话木马即可实现。这里就用命令窗口进行实现&#xff1a; copy 111.png/b shell.php/a shell.png 注意这里的命令窗口要在存在图片和一句话木马的目录下打开&#…...

面试题总结

一、mysql中的乐观锁、悲观锁、共享锁、排它锁、行锁、表锁 1、乐观锁 通过sql实现的&#xff0c;更新sql语句时加上where version #{version}乐观锁不是数据库自带的锁&#xff0c;需要我们自己去实现。乐观锁是指操作数据库时(更新操作)&#xff0c;想法很乐观&#xff0c;认…...

Linux | 零基础Ubuntu解压RaR等压缩包文件

目录 介绍 案例分析 安装工具 解压实践 介绍 RAR是一种专利文件格式&#xff0c;用于数据压缩与归档打包&#xff0c;开发者为尤金罗谢尔&#xff08;俄语&#xff1a;Евгений Лазаревич Рошал&#xff0c;拉丁转写&#xff1a;Yevgeny Lazarevich R…...

自动化测试-Pytest测试

目录 pytest简介 基本测试实例 编写测试文件 执行测试 pytest运行时参数 mark标记 Fixture pytest插件 Allure测试报告 测试步骤 pytest简介 Pytest‌是一个非常流行的Python测试框架&#xff0c;它支持简单的单元测试和复杂的功能测试&#xff0c;具有易于上手、功…...

磁盘调度算法

先来先服务&#xff08;FCFS&#xff09;算法 原理&#xff1a; 按照进程请求访问磁盘的先后顺序进行调度。就像是排队买东西&#xff0c;先到的先服务。 示例&#xff08;Python&#xff09;&#xff1a; def fcfs(requests):"""requests是一个包含磁盘请求序…...

多视图 (Multi-view) 与多模态 (Multi-modal)

多视图 (Multi-view) 与多模态 (Multi-modal) 是两种不同的数据处理方式&#xff0c;它们在机器学习和数据分析中有着重要的应用。尽管这两者有一些相似之处&#xff0c;但它们关注的角度和处理方法有所不同。 多视图 (Multi-view) 定义&#xff1a;多视图指的是同一数据对象…...

CFA知识点梳理系列:CFA Level II, Reading 7 Economics of Regulation

这是CFA知识点梳理系列的第七篇文章&#xff0c;上一篇文章可以参考以下链接: CFA知识点梳理系列&#xff1a;CFA Level II, Reading 6 Economic Growth...

微信流量主挑战:三天25用户!功能未完善?(新纪元4)

&#x1f389;【小程序上线第三天&#xff01;突破25用户大关&#xff01;】&#x1f389; 嘿&#xff0c;大家好&#xff01;今天是我们小程序上线的第三天&#xff0c;我们的用户量已经突破了25个&#xff01;昨天还是16个&#xff0c;今天一觉醒来竟然有25个&#xff01;这涨…...

1.微服务灰度发布落地实践(方案设计)

前言 微服务架构中的灰度发布&#xff08;也称为金丝雀发布或渐进式发布&#xff09;是一种在不影响现有用户的情况下&#xff0c;逐步将新版本的服务部署到生产环境的策略。通过灰度发布&#xff0c;你可以先将新版本的服务暴露给一小部分用户或特定的流量&#xff0c;观察其…...

Web3如何推动元宇宙的去中心化发展?

随着科技的不断进步&#xff0c;元宇宙的概念逐渐从科幻变成现实&#xff0c;它不仅是虚拟世界与现实世界的融合&#xff0c;更是数字交互和社会参与的新形态。在这个过程中&#xff0c;Web3作为下一代互联网的核心技术&#xff0c;正发挥着关键作用。特别是在去中心化的元宇宙…...

【NODE】01-fs和path常用知识点

前言 最近在使用express-generator知识进行搭建前后端通信&#xff0c;其中有些知识点涉及到nodejs的fs和path核心模块&#xff0c;因此另写一篇文章进行介绍和代码案例练习。 fs&#xff08;文件系统&#xff09;和 path 是 Node.js 的核心模块&#xff0c;用于文件操作和路径…...

矩阵线性方程组

矩阵可以是任何形状 当矩阵的行数等于列数,称之为方阵,那么它就有行列式 矩阵的公式 矩阵分块法 Matrix(母体) 克拉默法则 线性方程组 注意初等列变换不是一个同解变换 初等变换与秩 XAB 可以用初等列变换但是不推荐,还是使用初等行变换.用转置思想求解 ( X A ) T…...