宁夏百度网站怎么做/seo优化工具推荐
🧑💼 作者简介
冯光普:多点 DMALL 数据库团队负责人,负责数据库稳定性建设与 DB PaaS 平台建设,在多活数据库架构、数据同步方案等方面拥有丰富经验。
杨家鑫:多点高级 DBA,擅长故障分析与性能优化,喜欢探索新技术。
多点 DMALL 作为中国及亚洲最大的零售云解决方案数字零售服务商,是中国唯一的端到端全渠道零售云解决方案服务商,目前,其业务据点覆盖六个国家和地区,商业模式受到广泛验证,其发展历程可以说是中国乃至世界零售数字化进程的缩影。
但在业务高速增长、成果光鲜亮丽的背后,多点 DMALL 也面临着诸多来自零售 SaaS 场景和业务系统瓶颈的挑战,本文针对零售 SaaS 场景数据处理的痛点,从业务视角出发,讲述多点 DMALL 如何在做到保障业务数据库稳定可靠的同时,还能兼顾更高的读写性能与更低的存储成本。
多点 DMALL 服务对象横跨国内、海外等众多零售商,在国内有物美、中百等大型商超,覆盖麦德龙、Seven Eleven 711 便利店等跨国零售商。同时,还为众多海内外品牌商提供服务,让品牌商、供应商、零售商能够链接起来,让数据和信息更好地流动,让服务对象能够更好地支撑服务 C 端用户。
从生产商、品牌商、供应商,再到各个商场门店的零售商,最后到消费者,不难想象,超长的服务链路会产生超级庞大的数据量,系统的复杂度也将随着数据量呈指数级增长。在此背景下,多点零售 SaaS 系统数据库面临三大难题:
第一,运维复杂度高。多点 DMALL 使用微服务架构,全流程业务环节多,系统应用规模大,对应数据库的数量超过了 500 个。且随着系统不断迭代,数据的规模还在持续增加,运维管理难度越来越大。
第二,业务增长快,水平扩展需求增多。随着业务的增长,我们制定了出海战略,需要在海外展开业务,基于地区数据安全法的要求,需要独立部署一整套全新的系统去承接海外业务流量。在初始的部署阶段,对后期业务规模及数据增长速度是难以准确预估的。因此,数据库资源在初始阶段的分配就变得十分困难。为了节约成本,常见的做法是给到较少的部署资源。但很快我们发现,业务的快速增长,数据的增长特别迅猛,带给我们的是如何快速扩容这一难题。
第三,需要在同一个集群中服务大量商家。便利店/连锁商超的 SKU(最小存货单位)规模,从几千到几万,我们很难做到给每个商家独立部署一套系统。因此,我们 SaaS 系统支持上百个中小商家客户,所有商家产生的数据,在底层共享数据库资源。还有一个显著特点,在我们系统中存在非常大的单个租户,比如大型连锁商超,我们希望能让大型连锁商超所在的租户与其他租户有一定的资源隔离。
综上,我们希望数据库能够支撑庞大数据规模,还能应对数据快速增长。
为了解决上述难题,我们开始了数据库选型。由于分布式数据库支持更大的容量规模,具备透明扩展的能力,提供金融级数据安全,并且可以提高开发效率以及降低运维成本,能够更好地支撑业务发展。因此,我们坚定地认为它是数据库未来的趋势,此次选型仅调研了分布式数据库产品。
(一)基于业务的选型考虑因素
首先,从扩展性考虑,我们有很多 MySQL 单库数据量超过了 4TB,并且还在快速增长。我们将最大 MySQL 切换到分布式数据库后,数据增长到了 29TB。对于数据快速增长及面临的 MySQL 容量瓶颈,DBA 非常担忧:
-
要么我们不断推动研发清理数据,做数据归档,然而结果往往很被动,因为研发的重点工作是业务需求迭代;
-
要么继续扩展磁盘,如果是在云上,扩展空间比较容易,云厂商提供的块存储单盘可以达到 32TB 甚至更大,但数据继续增长,仅仅是将风险延后, 治标不治本, 后续会更加被动。
当然,我们还可以选择分库分表的方案,但这是一件操作繁琐、风险很高的事情,且需要耗时数月,因为 SQL 能力有损,代码改造不可避免。
因此,我们希望利用分布式数据库透明可扩展的能力,平滑支撑业务快速增长。
首先,从运维成本考虑,在保证系统稳定性前提下,降低运维复杂度。假设 MySQL 中的一个 database 是一颗蛋,一个 MySQL 实例是一个篮子,那么部署 1000 个 database,应该放到多少 MySQL 实例中?把哪些库放在同一个实例中?如果把两个对资源要求都很高的重要库放在同一个实例中,就有可能会互相抢占资源。还有,例如支付类的数据量虽然不大,但对业务的要求很高,也不能和其他库放在同一个实例中。
因为业务不同,优先级不同,数据增长速度不同,QPS 要求不同,所以 DBA 常常需要 “挪蛋”。哪怕抛开资源成本不谈,本身的运维挑战就很大,我们希望分布式数据库可以解决这个问题,帮助 DBA 去自动 “挪蛋”。
其次,从高可用考虑,期望保证集群高可用能力。运维 MySQL 集群,我们基本都是使用 MHA、Orchestrator 去实现高可用,但他们都是“外挂”形式的,本质上是解决不了网络分区导致的脑裂问题,因为数据库和 HA 组件之间,是两个独立的软件,不在同一个进程里,他们之间没有一致性协同控制。
对于 MySQL,Group Replication 这类高可用架构,其内置实现的高可用是可靠的,它与 OceanBase 或者 TiDB 等分布式数据库一样,是基于Paxos 或者 Raft 分布式一致性协议,可以实现 RPO=0,RTO<30s。
(二)产品选型测试数据
基于上述选型因素,我们选择了原生分布式数据库 OceanBase,并进一步对比了 OceanBase 与MySQL 在表读写、表只读、表只写等方面 QPS 的表现,以及二者在存储成本方面的表现。下表为此次测试相关配置。
OceanBase | MySQL | |
社区版本 | v4.1.0 | v5.7.16 |
内存配置 | 租户memory_size 16G | innodb_buffer_pool_size 16G |
单机器配置 | 32C RAID10 SSD | 32C RAID10 SSD |
刷盘配置 | 默认强制刷盘 | sync_binlog=1 innodb_flush_log_at_trx_commit=2 |
并发数 | 5,10,20,30,60,120 | 5,10,20,30,60,120 |
测试模式 | read_write,read_only,write_only | read_write,read_only,write_only |
单次测试时间 | 300s,共18种测试(并发数x测试模式) | 300s,共18种测试(并发数x测试模式) |
每种测试方法 | obd test sysbench(obd自带) 会先 prepare、再 run、再cleanup | sysbench prepare sysbench run sysbench cleanup |
在 OceanBase 与 MySQL 配置相同的情况下,对比 10 张 3 千万 sysbench,我们发现当并发数小于 200 的时候,MySQL 的表现略好于 OceanBase。但无论是 QPS 还是延迟,随着并发数的上涨,OceanBase 的性能都会逐渐接近 MySQL。
(三)OceanBase 不同配置的对比
对于单机部署的模式,选择通过连接 OBProxy 访问 OBServer 还是直接 OBServer,也会影响其在 10 张 3 千万 Sysbench 表读写 QPS 的表现。
我们来看选择连接 OBProxy 和选择直连 OBServer 时的表现,可以看到直连 OBServer 性能比通过 OBProxy 连接的性能高 30-50%。
所以对于单机部署的模式来说,我们建议直接 OBServer,避免通过 OBProxy 访问 OBServer 多走一次网络带来的额外代价。
在不同租户内存配置下,性能也会有所不同。可以看到 32GB 租户内存相比 16GB 租户内存,性能提升约 14%。
(四)OceanBase 与 MySQL 表空间对比
在生产环境监控快照场景,将 20 张表共 5 亿数据量从 MySQL 迁移 OceanBase,表空间占用降低 6 倍。
基于上述测试数据,我们最终决定上线 OceanBase,总的来说:
-
生产环境监控快照场景 MySQL 存储(单副本)对比 OceanBase 存储(单副本),数据压缩率为 6:1,OceanBase 的数据压缩比优秀;
-
单机部署并且连接 obproxy,在并发度较低时,OceanBase QPS 和平均延迟表现稍逊 MySQL(最低 QPS 也过万,租户内存越高 QPS 性能越好;最低平均延迟 3ms)。在并发度逐渐上升的过程中,OceanBase 各项性能的提升比例会高于 MySQL(当并发度超过 200 之后,OceanBase 各项性能会逼近甚至超过 MySQL);
-
MySQL 一层架构、OceanBase 二层架构(obproxy + observer,单机部署时直连 observer 比连 obproxy 性能会提升 30%~50%)。每多一层,网络层面的延迟消耗会增加。
第一,OceanBase 是单机分布式一体化数据库。从两个方面来讲:单机是指性能可以像 MySQL 单机一样做到低延迟、高性能;分布式是指当我们需要去规模化扩容时可以轻松扩展。那这两个特性可以帮我们解决什么问题呢?
从业务发展阶段及价值来看,在业务初期,数据量较小,享受 MySQL 般极致性能;在业务高速增长期,可以透明扩展,几乎不限容量;在业务的全生命周期里,可以轻松做到不改代码、不停机迁移,并保证高性能。
第二,OceanBase 作为原生的分布式数据库,天然具备分片自动迁移、负载均衡的可扩展能力,可以在业务无感知的情况下透明扩缩容。基于 Paxos 协议的极致追求,OceanBase 4.x 版本进一步的极致优化,可以做到 RPO=0,RTO<8s,保证系统高可用。
第三,OceanBase 通过最小化分布式开销的架构设计保证数据库高性能,而 OceanBase 的高压缩比相对 MySQL 节省成本6倍以上。同时 OceanBase 多租户十分契合 SaaS 客户的业务场景,资源隔离、扩缩容非常容易。
分布式数据库的数据处理涉及内存、磁盘、网络交互,在延迟方面,内存中读写数据在 0.1 微秒级别,SSD 延迟约为 0.1 毫秒,机房内网络延迟约为 0.1 毫秒,同城机房间延迟约 3 毫秒。整体来看,内存的读写延迟与 SSD、网络之间,相差了 100-1000 倍;吞吐方面,内存读写可达到 100GB/s,而 SSD 约为 1~2 GB/s,万兆网络约为 1.2GB/s,内存与 SSD、网络之间,吞吐能力相差约 100 倍,差了两个数量级。
MySQL 作为单机数据库,InnoDB 和 Server 层是在同一进程中,数据交互非常高效,在性能和延迟方面,基本是无敌的。但对于分布式数据库来说,往往采用了计算存储分离架构,由于计算和存储层之间网络 I/O 开销不可避免,这种设计上就带来的性能瓶颈很难被优化。
OceanBase 的架构设计独特之处就是 SQL引擎,存储引擎,事务引擎实现在一个进程里,OBServer 既做计算又做存储。应用通过 OBProxy 连接 OBServer 集群,OBSever 节点会把数据路由信息上报给 OBProxy,OBProxy 在接收到应用层 SQL后,根据路由信息,直接转发 SQL 到最合适的 OBSever 上去执行。如果数据都在 1 个 OBServer 节点上,那么 SQL 执行过程就是单机的,类似于 MySQL,最大程度减少了网络 I/O 。
(一)为什么 OceanBase 性能更好
当数据量大时或者更高并发时, OceanBase 性能明显优于MySQL, 于是我们对OceanBase 架构进行深入研究。
第一,OceanBase 同时兼具单机低延时、分布式高吞吐特性。在面对生产业务数据时,OceanBase 单机事务占比可以达到 80% 以上,因为 OceanBase 中,数据分片的粒度是一个表或分区。因此,如果更新的只是一张非分区表,或者分区表的单个分区,那么它必定是一个单机事务。更进一步,如果事务中涉及的多个表,都在同一台机器中,也会是单机事务。
第二,通过 Table group 优化跨机 join,可以将跨机事务优化成单机事务。分区粒度的设计,可以保证 80% 的事务是单机的,再通过 Table group 机制优化高频的跨机 join 后,单机事务占比可以进一步提升,如果整个业务中有 90% 以上的事务都是单机事务,性能肯定会很好。
第三,系统会通过 Query 优先级的区分,使得小查询优先,大查询最多占用 30% 工作线程,通过 arge_query_worker_percentage 配置,在没有小查询时,大查询可用到 100% 工作线程。整个机制类似于高速公路通行规则,例如,高速公路有 3 条车道,如果 3 条车道都有车,那么后车很难超车。如果制定一个规则,大车只能走最右侧车道,小车还有两个车道可以通行,这样的运行机制就能很好地预防慢 SQL、大查询堵塞或拖垮系统。
以上三点,来自于架构设计,以及实践中的优化,是保证 OceanBase 高性能的原因。那么,为什么 OceanBase 能够在拥有更高性能的同时,成本却更低呢?
(二)为什么 OceanBase 成本更低?
OceanBase 使用 LSM-Tree 存储引擎,同时支持编码压缩和通用压缩,具有高压缩比,根据我们的测试数据(见下图)可看出集群存储空间相比 MySQL节省 75%,成本更低。
随着多点 DMALL 业务的发展,数据量激增,节点数也在呈指数级变化,眼看着MySQL 的成本很快将超过 OceanBase。如下图所示,6 倍压缩是我们在真实生产环境中得到的测试结论。未来业务数据一直增长,OceanBase 可以不停地加新的节点,而对应的存储成本的增长却是远远慢于 MySQL的。
(三)OceanBase 的多租户和资源隔离能力
OceanBase 的多租户特性更契合 SaaS 场景,从租户间的资源隔离能力与租户的弹性伸缩能力可见一斑。
-
租户之间的资源隔离能力:OceanBase 的多租户是从CPU、 内存、I/O 上进行物理隔离,这非常关键,保证了业务之间不会出现资源争抢,相互影响,不会因为一个业务而影响其他的租户。
-
租户的快速弹性伸缩能力:对于一个租户而言,假设有 3 个 Zone,每个 Zone 有 2 台机器,一共 6 台机器,每台机器 有 1 个资源单元。如果想去扩容,只需要一条 SQL语句,就可以加上 Zone 4、加上 Zone 5,变成更多的 Zone,从 6 个资源单元变成了 10 个,轻松完成水平扩容。同时垂直类的扩容也很简单,比如初期给定的资源是 2C8G,业务增长后,又不想加机器,可以把资源单元从 2C8G 变更为 6C12G,整个过程是动态无损的,业务无感知。这对 DBA 来讲也是一条 SQL 就能搞定,极大降低了工作量。因此,多租户能力很好地解决了 SaaS 场景需要部署一套系统,想要节省成本且方便后期扩容的需求。
多点 DMALL作为 SaaS 场景服务商,本身面临着数据库多、数据增速快、资源成本高、运维难度大等诸多痛点。分布式数据库可以很好地支撑业务增长,提升开发效率,解放 DBA,是未来数据库转型坚定的方向。经过探索测试,验证了 OceanBase 在扩展性、性能、成本方面的优势,符合当前业务发展的需求,且多租户能力方面与零售 SaaS 场景非常契合,后续必定会有更加深入的合作。
相关文章:

存储空间压缩6倍 ,多点DMALL零售SaaS场景降本实践
🧑💼 作者简介 冯光普:多点 DMALL 数据库团队负责人,负责数据库稳定性建设与 DB PaaS 平台建设,在多活数据库架构、数据同步方案等方面拥有丰富经验。 杨家鑫:多点高级 DBA,擅长故障分析与性能…...

BGP路由属性
任何一条BGP路由都拥有多个路径属性(Path Attributes),当路由器通告BGP路由给它的对等体时,该路由将会携带多个路径属性,这些属性描述了BGP路由的各项特征,同时在某些场景下也会影响BGP路由优选的决策。 一…...

Java面试常用函数
1. charAt() 方法用于返回字符串指定索引处的字符。索引范围为从 0 到 length() - 1。 map.getOrDefault(num, 0) :如果map存在num这个key,则返回num对应的value,否则返回0. Arrays.sort(nums); 数组排序 Arrays.asList("a","b",&q…...

linux编译curl库(支持https)
openssl下载和编译 https://www.openssl.org/source/old/ 解压 tar -xvf openssl-3.0.1.tar.gz cd openssl-3.0.1/配置 ./config如果是编译静态库加入 -fPIC no-shared 如果指定安装路径,使用 --prefix=/usr/local/openssl/选项指定特定目录 编译和安装 make sodu make i…...

Ei Scopus检索 | 2024年第三届能源与环境工程国际会议(CFEEE 2024)
会议简介 Brief Introduction 2024年第三届能源与环境工程国际会议(CFEEE 2024) 会议时间:2024年9月1日-3日 召开地点:新西兰奥克兰 大会官网:https://www.cfeee.org/ 2024年第三届能源与环境工程国际会议(CFEEE 2024) 将于2024年12月12日至1…...

thinkphp6(tp6)创建定时任务
使用 thinkphp6 框架中提供的命令行形式实现定时任务 一、创建一个自定义命令类文件 php think make:command Hello 会生成一个 app\command\Hello.php 命令行指令类,我们修改内容如下: <?php declare (strict_types1);namespace app\command;use …...

【学习笔记】C++ 中 static 关键字的作用
目录 前言static 作用在变量上static 作用在全局变量上static 作用在局部变量上static 作用在成员变量上 static 作用在函数上static 作用在函数上static 作用在成员函数上 前言 在 C/C 中,关键字 static 在不同的应用场景下,有不同的作用,这…...

攻防世界-web-file_include
1. 题目描述 打开界面,如下代码: 代码很简单,从参数中获取到filename然后include这个filename 2. 思路分析 2.1 首先参考常见做法,将参数设置为php://filter/readconvert.base64-encode/resourceflag.php,看是否有…...

C语言的函数指针、指针函数, 函数数组
函数指针 是指向函数的指针,它允许您在程序运行时动态选择要调用的函数。函数指针可以像普通变量一样传递、存储和使用,这使得它们在许多编程场景中非常有用,如回调函数、函数表、插件架构等。 以下是一个简单的例子来说明函数指针的概念&a…...

笔记本开启WiFi
笔记本开启WiFi 为了节省流量:笔记本开启WiFi 条件 支持热点的电脑;我的是华硕飞行堡垒7。 注意事项 笔记本连接公司网络,公司网络通常都在监管下的,手机连接wifi后,刷抖音、购物网站,公司后台会捕获你…...

力扣第37天----第322题、第279题
力扣第37天----第322题、第279题 文章目录 力扣第37天----第322题、第279题一、第322题--零钱兑换二、第279题--组合总和 Ⅳ 一、第322题–零钱兑换 整体思路,跟前面的几道完全背包差不多,就不具体解释了。有一些细节要注意,见代码注释。…...

【ArcGIS Pro二次开发】(67):处理面要素空洞
这个一个简单的小功能。 有些面要素可能会存在空洞,这个工具的目的就是获取面要素的空洞,或者去除空洞获取要素的边界。 这个功能其实在之前做拓扑功能的时候就已经有了,这次只是单独把它提取出来。因为有时候会单独用到这个功能。 一、要实…...

FPGA-结合协议时序实现UART收发器(一):UART协议、架构规划、框图
FPGA-结合协议时序实现UART收发器(一):UART协议、架构规划、框图 记录FPGA的UART学习笔记,以及一些细节处理,主要参考奇哥fpga学习资料。 本次UART主要采用计数器方法实现,实现uart的稳定性发送和接收功能…...

web请求cookie中expires总结
用意 cookie 有失效日期 "expires",如果还没有过失效期,即使重新启动电脑,cookie 仍然不会丢失 注意:如果没有指定 expires 值,那么在关闭浏览器时,cookie 即失效。 设置 如果cookie存储时间大…...

如何学习Java核心知识
Java作为一门广泛应用于软件开发的编程语言,拥有着强大的生态系统和丰富的资源,是值得投入时间和精力去学习的。以下是一些建议,帮助你系统地学习Java核心知识。 1. 学习Java语言基础: 学习Java语言基础是学习Java的第一步&…...

【AWS】如何用SSH连接aws上的EC2实例(虚拟机)?
目录 0.环境 1.连接结果示例 2.SSH连接思路 3.具体步骤 1)安装并运行ssh服务 2)启动ssh服务 3)在AWS上找到正在运行的EC2实例,并且根据提供的ssh连接语句进行连接 0.环境 windows 11 64位 前提: 有aws账户&…...

数据结构——看完这篇保证你学会队列
数据结构——队列 一、队列的概念二、队列的实现方式三、队列所需要的接口四、接口的详细实现4.1初始化4.2销毁4.3入队4.5出队4.6获取队头元素4.7获取队尾元素4.8获取队列元素个数4.9判空 五、完整代码5.1Queue.h5.2Queue.c5.3test.c 一、队列的概念 队列:只允许在…...

开源免费缺陷管理工具:对比6款
在软件开发环境中,缺陷管理工具是关键的基础设施。例如,在构建一个电商平台时,这些工具能系统地跟踪从发现到解决的各个问题阶段。它们支持多用户协作,实现信息和状态的实时共享。通过数据分析,这些工具还能帮助团队识…...

Weblogic反序列化漏洞
文章目录 1、搭建环境2、漏洞特征3、漏洞利用1)获取用户名密码2)后台上传shell 4、检测工具 1、搭建环境 漏洞环境基于vulhub搭建–进入weak_password的docker环境 sudo docker-compose up -d拉取靶场 2、漏洞特征 404特征Weblogic常用端口:7001 3、漏洞利用…...

element-ui el-table 滚动到底部,进行加载下一页
使用element-ui 自带的InfiniteScroll 无限滚动组件无法使用在table里面,所以项目只能组件写一个 俺的方法是写了一个自定义组件,进行监听滚动条是否拉到最底部进行一个处理。方法如下 直接复制完事了, loadTableMore: { bind(el, binding…...

线性代数的学习和整理19,特征值,特征向量,以及引入的正交化矩阵概念(草稿)
目录 1 什么是特征值和特征向量? 1.1 特征值和特征向量这2个概念先放后 1.2 直观定义 1.3 严格定义 2 如何求特征值和特征向量 2.1 方法1:结合图形看,直观方法求 2.1.1 单位矩阵的特征值和特征向量 2.1.2 旋转矩阵 2.2 根据严格定义…...

初步了解android如何锁键
百年三万六千日,光阴只有瞬息间。 手机下面的三个图形,正方形,园形,三角形分别的什么建?都起到什么功能? 三角形的那个叫返回键,就是可以返回你的上一个操作; 圆形是HOME键,按一下可…...

行业追踪,2023-09-13
自动复盘 2023-09-13 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...

$nextTick和setTimeout区别(宏任务微任务)
nextTick 在vue 源码中是利用 Promise.resolve()实现的。该问题实际就是Promise与setTimeout的区别,本质是Event Loop中微任务与宏任务的区别。 nextTick:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。…...

Linux内核及可加载内核模块编程
图1 Linux系统整体结构 图2 Linux的源代码结构 下面显示一段内核模块代码案例: #include <linux/moduLe.h> #include <linux/kernel.h #include <linux/intt.h> /*模块的初始化函数lkp_ init()_init是用于初始化的修饰符 */ static int __init lk…...

软件设计师_备考笔记
考试介绍及考点分布情况 考试要求: (1)掌握数据表示、算术和逻辑运算; (2)掌握相关的应用数学、离散数学的基础知识; (3)掌握计算机体系结构以及各主要部件的性能和基…...

Java学习笔记------抽象类和抽象方法
抽象方法 抽象方法:将共性的行为(方法)抽取到父类之后,由于每一个子类执行的内容是不一样的,所以,在父类中不能确定具体的方法体,该方法就可以定义为抽象方法抽象类:如果一个类中存…...

毕业设计选题指南-25个优质选题
毕业设计是大学生活中的一项重要任务,它不仅代表了您所学知识的应用,还为未来职业道路奠定了基础。然而,许多学生常常陷入选题的困境,不知道如何选择一个合适的毕业设计题目。本文将提供一些建议,帮助您决定一个适合您…...

React使用useImperativeHandle实现父组件触发子组件事件
相关知识: useImperativeHandle forwardRef 相关代码: 获取子组件实例,由于这是函数组件,没有this因此不能整体获取,我们可以通过useImperativeHandle获取想要的变量或者方法。 父组件import React, { useRef } fro…...

【PowerQuery】Excel的PowerQuery的复制
在Excel中构建符合要求的PowerQuery连接之后,所有的PowerQuery 连接已经顺利的保存在Excel 工作簿当中,但是如何去查看已经保存的PowerQuery连接呢?图6.3 显示了查看PowerQuery连接。 Excel界面->数据页签->查询与连接 如果你的Power…...