关于OcenaBase v4.2中,分区转移和负载均衡的技术解读

OceanBase​​​​​​​​​​​​​​作为一款原生分布式数据库,其核心的技术特性之一是高可扩展性,其具体表现在两个方面:

首先,是灵活的扩缩容能力,包括垂直扩缩容和水平扩缩容:

  • 垂直扩缩容:指通过调整服务节点上的资源规格来改变服务能力的方法。举例来说,当服务节点在CPU或内存资源上遭遇瓶颈时,我们可以通过灵活地调整每个节点的CPU配置和内存大小,迅速提升服务能力。
  • 水平扩缩容:指通过增减服务节点的数量来实现服务能力的调整。例如,从单个服务节点扩展为两个服务节点,可以实现服务能力的扩容。然而只支持服务节点数量的变化是不够的,为了实现业务读写服务能力的水平扩缩容,还需要支持数据重分布,比如从单个服务节点扩展为两个服务节点,让数据均衡地分布在两个服务节点上。反之,当两个服务节点缩容为单个服务节点时,需要让数据重分布到单个服务节点上。

其次,是数据动态均衡能力,即在服务节点不变的情况下,通过调整数据分布,以实现各个服务节点负载动态均衡的能力。例如,随着表和分区的动态创建和删除,不同服务节点上服务的分区个数会有很大差异,导致服务节点的负载不均衡,基于分区动态均衡能力,可以实现分区在各个服务节点上均衡分布,从而实现负载均衡。

无论是水平扩缩容,还是数据的动态均衡,本质上都是通过调整数据的分布以实现服务节点的负载均衡。因此,我们将水平扩缩容和数据动态均衡的能力统称为负载均衡能力。

OceanBase 各版本的负载均衡有何不同

OceanBase从1.x版本开始就具备灵活的扩展性,支持以分区为单位将数据打散分布在多个服务节点上,实现了动态扩缩容和分区自动均衡。
OceanBase 4.0版本升级为单机分布式一体化架构后,引入了自适应日志流概念,扩展性更加灵活,支持单机和分布式形态的动态变换。目前OceanBase 4.0和OceanBase 4.1 的扩展能力还不够完善,由于分区和日志流是静态的绑定关系,不支持动态调整分区分布,从而限制了自动负载均衡的能力,不支持部署形态的灵活变换。


OceanBase 4.2版本是首个完整实现单机分布式一体化架构的版本,具有里程碑意义

OceanBase采用分区转移技术实现了日志流的分裂和合并,支持了以分区为单位进行跨节点的数据搬迁,完善了负载均衡策略,补齐了可扩展性能力,真正实现了单机和分布式形态的动态变换。

OceanBase支持多租户机制,不同租户间资源隔离,支持租户级别的水平扩缩容和分区均衡,下面将详细介绍OceanBase 4.2版本租户级别的负载均衡特性。

OceanBase v4.2租户级别的负载均衡特性

水平扩缩容


OceanBase支持从两方面来描述租户的服务能力:

  1. Unit Number,即每个Zone上提供服务的Unit个数。
  2. Primary Zone,即提供读写服务的Zone列表。

用户通过动态调整Unit Number和Primary Zone,可以实现租户的读写服务能力在Zone内和Zone间的水平扩缩容。负载均衡模块将根据用户服务能力的配置自适应调整日志流和分区分布。

用户可以通过下面的命令来调整租户的Primary Zone。

SQL> ALTER TENANT tenant PRIMARY_ZONE='zone1,zone2;zone3'; 
SQL> ALTER TENANT tenant PRIMARY_ZONE='RANDOM'; 

当Primary Zone为RAMDOM时,调整Locality参数也会导致Primary Zone的变化。例如:Locality为从F@zone1,F@zone2,F@zone3变更为F@zone1,F@zone2,R@zone3时,RANDOM的Primary Zone配置意味着Primary Zone从zone1,zone2,zone3变更为了zone1,zone2

SQL> ALTER TENANT tenant PRIMARY_ZONE='RANDOM';
SQL> ALTER TENANT tenant LOCALITY='F@zone1,F@zone2,R@zone3';

用户可以通过下面的命令来调整租户每个Zone的Unit的个数,4.0版本开始,OceanBase要求每个Zone的Unit个数必须一样,因此,仅支持租户级别调整Unit个数的命令。为了方便统一管理各个Zone的Unit,引入了Unit Group机制,每个Zone相同编号的Unit属于同一个Unit Group。Unit个数的扩缩容本质上是以Unit Group为单位创建和删除Unit。

; 对于缩容场景,随机选择一个Unit Group删除
SQL> ALTER RESOURCE TENANT tenant_name UNIT_NUM = xxx;; 对于缩容场景,删除 指定的Unit Group
SQL> ALTER RESOURCE TENANT tenant_name UNIT_NUM = xxx DELETE UNIT_GROUP = ( id_list )

相比之前的版本,4.2版本新增支持了Unit缩容场景,可以统一减少每个Zone的Unit个数。发起缩容操作后,默认情况下,系统会随机选择一个Unit Group执行删除;用户也可以指定Unit Group列表,删除特定的Unit集合。Unit Group的列表可以在 DBA_OB_UNITS 表中查询。

分区均衡

分区均衡指:在表和分区动态变化的情况下,通过动态调整分区分布,实现分区个数以及存储空间在服务节点上的均衡。

OceanBase 支持多种表类型,包括:非分区表、一级分区表和二级分区表。不同类型的表的均衡策略不一样。为了方便描述均衡效果,OceanBase为不同的表分区划分了均衡组,在各个均衡组内要实现分区个数均衡和存储空间均衡。均衡组之间没有关系,内部自适应调整均衡组之间的分布关系。默认情况下,OceanBase的分区均衡策略如下。

  • 一级分区表:每个一级分区表是一个独立的均衡组,表的所有一级分区打散分布在各个服务节点上。
  • 二级分区表:每个一级分区下的所有二级分区形成一个独立的均衡组,每个一级分区下的所有二级分区打散分布在各个服务节点上。
  • 非分区表:所有的非分区表统一考虑,有且只有一个均衡组,所有的非分区表打散分布在各个服务节点上。

另外,为了更加灵活描述不同表数据之间的聚集和打散关系,引入了TableGroup机制。

TableGroup机制

用户手册:OceanBase分布式数据库-海量数据 笔笔算数

OceanBase从1.x版本开始就引入了Table Group概念:Table Group是一个逻辑对象,代表一组表的集合,他们在物理存储上有临近关系。Table Group的引入是为了解决Partition Wise Join需求。多张具有关联关系的表往往遵守相同的分区规则,通过将相同规则的分区聚集分布在一起,可以实现Partition Wise Join,极大地优化读写性能。

从4.2版本开始,TableGroup概念有较大调整。

首先,不再支持Table Group上的分区属性,不再通过分区属性限制一个Table Group的表的分区方式,也不再支持Table Group相关的分区管理操作。

其次,为了兼容老版本创建Table Group的语法,带分区属性创建Table Group时并不会报错,会忽略分区属性。在OceanBase 4.0和OceanBase 4.1中如果创建了带分区属性的Table Group,升级到4.2版本后,将默认转换为不带分区属性的Table Group,行为上自动兼容。

再次,视图也进行了调整:DBA_OB_TABLEGROUPS的分区属性字段将不再有含义,展示为NULLDBA_OB_TABLEGROUP_PARTITIONS/DBA_OB_TABLEGROUP_SUBPARTITIONS视图将废弃,不再展示数据。CDB相关视图调整同上。

最后,Table Group内分区的聚集和打散语义不再相同,OceanBase 4.2版本为Table Group引入了SHARDING属性,用于控制Table Group内表数据的聚集和打散关系。

那么,什么是SHARDING属性,在不同场景中它的取值和意义分表是什么?

Table Group中SHARDING属性的取值

Table GroupSHARDING属性有三种取值:NONEPARTITIONADAPTIVE。下面基于场景来描述OceanBase 4.2版本Table GroupSHARDING属性的取值和意义。

SHARDING属性的取值和意义

场景1:Table Group内所有表聚集在一起。

用户希望将任意类型的表聚集在一台机器上,以满足业务单机访问的需求。采用SHARDING = NONE的Table Group可以实现将任意类型的表聚集在一起。

SHARDING = NONE的Table Group含义如下:

  • 支持加入任意分区类型的表,包括非分区表、一级分区表、二级分区表。
  • 加入Table Group的所有表的所有分区聚集在一起,系统保证调度在一台机器上。

场景2:Table Group内表数据水平打散。

当单机无法承载单个业务的数据时,用户希望将数据打散分布在多台机器,实现水平扩展。OceanBase默认为不同分区类型的表提供了水平扩展和自动负载均衡的能力。

  • 非分区表:所有的非分区表打散均匀分布在多台机器上。
  • 一级分区表:表的所有一级分区打散分布在多台机器上。
  • 二级分区表:每个一级分区的所有二级分区打散分布在多台机器上,不同一级分区间随机打散。

默认情况下,不同表之间数据是随机分布的,但无妨。如果希望多张具有关联关系的表数据分布相同,则需要明确不同表分区之间的对齐规则,从而将不同表的分区聚集在同一台server,实现Partition Wise Join,提升性能。采用SHARDING不为NONE的Table Group可以满足该需求。

SHARDING = NONE的Table Group描述了所有表的所有分区聚集在同一台server,并且不限制表的分区类型。

SHARDING不为NONE时,Table Group内每一张表的数据打散分布在多台机器上。为了保证所有表的数据分布相同,Table Group要求所有表的分区方式一致,包括分区类型、分区个数、分区Value。系统会调度具有相同分区属性的分区聚集(对齐)分布在同一台Server,从而实现Partition Wise Join。

下面描述不同SHARDING取值的含义以及对Table Group内表的影响。

  • PARTITION:按一级分区打散,如果是二级分区表,一级分区下的所有二级分区聚集在一起。
    • 分区方式要求:一级分区的分区方式相同,如果是二级分区表,也只校验一级分区的分区方式。因此,一级分区表和二级分区表可以同时存在,只要他们的一级分区的分区方式相同即可。
    • 分区对齐规则:相同一级分区Value的分区聚集在一起,包括一级分区表的一级分区和二级分区表的对应一级分区下的所有二级分区。
  • ADAPTIVE:自适应打散方式。如果Table Group内是一级分区表,则按一级分区打散;如果Table Group内是二级分区表,则每个一级分区下的二级分区打散。
    • 分区方式要求:要么全部是一级分区表,要么全部是二级分区表。如果是一级分区表,则要求一级分区的分区方式相同;如果是二级分区表,则要求一级和二级分区方式都相同。
    • 分区对齐规则:对于一级分区表,一级分区Value相同的分区聚集在一起;对于二级分区表,一级分区Value相同,并且二级分区Value相同的分区聚集在一起。

了解了SHARDING属性的取值和意义后,我们以具体示例来看如何使用。

SHARDING属性的取值示例

示例一:SHARDING = NONE。

SHARDING = NONE的Table Group内,无论何种分区方式的表的分区,都会聚集为一个Partition Group,分布在一台机器上。

SQL> CREATE TABLEGROUP TG1 SHARDING = 'NONE';# 非分区表
SQL> CREATE TABLE T_NONPART (pk int primary key) tablegroup = TG1;# 一级分区表
SQL> CREATE TABLE T_PART_2 (pk int primary key)  tablegroup = TG1 partition by hash(pk) partitions 2;# 二级分区表
SQL> CREATE TABLE T_SUBPART_2_2 (pk int, c1 int, primary key(pk, c1))  tablegroup = TG1 partition by hash(pk) subpartition by hash(c1) subpartitions 2 partitions 2;

TablePartition Group
0
T_NONPARTP0
T_PART_2P0, P1
T_SUBPART_2_2P0SP0, P0SP1, P1SP0, P1SP1

示例二:SHARDING = PARTITION。

SHARDING = PARTITION的Table Group里所有表都会看成是一级分区表,要求所有表的一级分区方式相同,而一级分区属性相同的分区会聚集成一个Partition Group。

SQL> CREATE TABLEGROUP TG1 SHARDING = 'PARTITION';# 一级分区表
SQL> CREATE TABLE T_PART_2 (pk int primary key)  tablegroup = TG1 partition by hash(pk) partitions 2;# 二级分区表
SQL> CREATE TABLE T_SUBPART_2_2 (pk int, c1 int, primary key(pk, c1))  tablegroup = TG1 partition by hash(pk) subpartition by hash(c1) subpartitions 2 partitions 2;

TablePartition Group
01
T_PART_2P0P1
T_SUBPART_2_2P0SP0, P0SP1P1SP0, P1SP1

示例三:SHARDING = ADAPTIVE

Table Group要求所有表的一级和二级分区方式完全一致。一级分区表和二级分区表不支持在一个Table Group中。

一级分区表的Table Group:

SQL> CREATE TABLEGROUP TG_PART SHARDING = 'ADAPTIVE';# 一级分区表
SQL> CREATE TABLE T1_PART_2 (pk int primary key)  tablegroup = TG_PART partition by hash(pk) partitions 2;# 一级分区表
SQL> CREATE TABLE T2_PART_2 (pk int primary key, c1 int)  tablegroup = TG_PART partition by hash(pk) partitions 2;

TablePartition Group
01
T1_PART_2P0P1
T2_PART_2P0P1

二级分区表的Table Group:

SQL> CREATE TABLEGROUP TG_SUBPART SHARDING = 'ADAPTIVE';# 二级分区表
SQL> CREATE TABLE T1_SUBPART_2_2 (pk int, c1 int, primary key(pk, c1))  tablegroup = TG_SUBPART partition by hash(pk) subpartition by hash(c1) subpartitions 2 partitions 2;# 二级分区表
SQL> CREATE TABLE T2_SUBPART_2_2 (pk int, c1 int, c2 int, primary key(pk, c1))  tablegroup = TG_SUBPART partition by hash(pk) subpartition by hash(c1) subpartitions 2 partitions 2;

TablePartition Group
00011011
T1_SUBPART_2_2P0SP0P0SP1P1SP0P1SP1
T2_SUBPART_3_3P0SP0P0SP1P1SP0P1SP1

相关视图 

1701336611

视图名称说明
DBA/CDB_OB_TABLE_LOCATIONS分区副本分布,包含分区详细信息。最常用的视图之一
DBA/CDB_OB_LS_LOCATIONS日志流副本分布
DBA/CDB_OB_BALANCE_JOBS正在执行的负载均衡任务,如扩容、缩容、分区均衡等
DBA/CDB_OB_BALANCE_JOBS_HISTORY负载均衡任务历史
DBA/CDB_OB_BALANCE_TASKS正在执行的LS均衡任务,如LS分裂、LS合并等
DBA/CDB_OB_BALANCE_TASK_HISTORYLS均衡任务历史
DBA/CDB_OB_TRANSFER_TASKS正在执行的分区转移(transfer)任务,tablet级别
DBA/CDB_OB_TRANSFER_TASK_HISTORY分区转移(transfer)任务历史
GV$OB_UNITSunit分布及资源使用情况
GV$OB_SERVERSserver分布及资源使用情况

负载均衡配置参数enable_rebalance

在上述负载均衡过程中,涉及一个控制参数enable_rebalance,该参数在OceanBase 4.2前的版本用于控制租户间的均衡是否开启。为了支持控制租户内的均衡,我们决定将enable_rebalance配置项变更为租户级别,不同租户下的配置项控制不同的均衡操作。

1. 在系统租户下控制是否做租户间均衡

  • false:不会进行后台的unit迁移操作,但是在机器永久下线或者处于DELETING状态时,unit迁移不受配置项控制。
  • true:机器可以通过unit迁移达到均衡态。

2. 在用户租户下控制是否做租户下的均衡。

  • false:租户内不在进行负载均衡操作,已经在进行中的均衡操作会取消。用户如果发起扩缩容操作时会报错,例如:
    • 租户的Unit Number增大缩小。
    • 第一优先级的Primary Zone发生变化,如果第一优先级的Primary Zone不发生变化,则不会报错。
    • Primary Zone为RANDOM的情况下,F副本个数发生变化。
  • true :租户内可以执行负载均衡操作,如下。
# 均衡都关闭
alter system set enable_rebalance = false tenant = ALL;#只开启租户间均衡 
alter system set enable_rebalance = true tenant='sys';#关闭租户间均衡,但是可以进行租户内均衡
alter system set enable_rebalance = false tenant='sys';
alter system set enable_rebalance = true tenant='mysql_tenant';

总结

OceanBase 4.2版本的分区转移功能支持了以分区为单位灵活的跨节点搬迁数据的能力,弥补了因OceanBase 4.0版本架构升级而引入的问题,即无法在日志流间负载均衡的缺陷,真正实现了单机分布式一体化的灵活转化。

分区转移的源端日志流会有数秒卡DDL和用户写入,后续会优化为支持用户写入。 如果分区转移有跨节点的负载均衡任务,那么耗时和分区个数和数据量正相关。 需要转移的分区个数越多,转移的速度就越慢;需要转移的数据量越大,跨节点拷贝的速度也会越慢,主要受限于磁盘、网络的带宽瓶颈(网络限速默认参数为实际带宽的60%)。

需要说明的是,OceanBase 4.2版本的分区转移不支持活跃事务,预计在4.3版本实现支持。但是,提供了两种模式以满足不同使用的场景。

第一种模式是非紧急状态下的负载均衡,默认配置下,分区转移操作在业务低峰期没有活跃事务的时候执行。此操作对于业务是基本无感知的。

第二种模式是紧急运维负载均衡,需要用户手动开启分区转移主动杀事务的配置,分区转移会主动“杀死”对应日志流上的活跃事务,保证分区转移的顺利进行,但会对业务运行有一定影响。

另外,分区转移期间禁止部分DDL操作,如删除分区/Truncate分区、/删除表/Truncate表;分区分裂、合并;添加、删除局部索引;以及第一次添加LOB列,都会引发阻塞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo 3.x源码(18)—Dubbo服务引用源码(1)

基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo的服务导出的源码,在DubboBootstrapApplicationListener#startSync方法中,在调用了exportServices方法进行服务导出之后,立即调用了referServices方法…

【ZZULIOJ】1025: 最大字符(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 给你三个ASCII字符(不含空白字符:包括空格、制表符\t、回车换行符\n),找出其中最大的那个 输入 输入包含三个字符,之间有一个空格隔开。 输出 输出ASCII码最大的那个字符…

神经网络汇聚层

文章目录 最大汇聚层平均汇聚层自适应平均池化层 最大汇聚层 汇聚窗口从输入张量的左上角开始,从左往右、从上往下的在输入张量内滑动。在汇聚窗口到达的每个位置,它计算该窗口中输入子张量的最大值或平均值。计算最大值或平均值是取决于使用了最大汇聚…

RISC-V/ARM mcu OpenOCD 调试架构解析

Risc-v/ARM mcu OpenOCD 调试架构解析 最近有使用到risc-v的单片机,所以了解了下risc-v单片机的编译与调试环境的搭建,面试时问到risc-v的调试可参看以下内容。 risc-v根据官方的推荐,调试器服务是选择OpenOCD,DopenOCD(开放片上…

【ROS笔记3】节点 和 命名空间 (通俗理解运用)

1. 前言 在ROS中,节点、话题、服务、参数等都可以有自己的命名空间(namespace)。命名空间是ROS用来组织和隔离不同资源的一种方式,确保了系统中的名字是唯一的,并允许同样的结构在不同的上下文中被重用。这就像在真实世界中的邮政系统,同一个城市里可以有多条同名的“梅花…

Python反爬案例——验证码的识别

验证码的识别 使用打码平台识别验证码 利用打码平台可以轻松识别各种各样的验证码,图形验证码、滑动验证码、点选验证码和逻辑推理验证码。打码平台提供了一系列API,只需要向API上传验证码图片,它便会返回对应的识别结果。 使用超级鹰平台…

深入理解指针1:指针变量、指针运算、野指针、const修饰指针

生活中我们把门牌号也叫地址,在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起 了新的名字叫:指针。 所以我们可以理解为:内存单元的编号地址指针 1、指针变量 我们知道的是:数组名是数组首元素的地址。也就是说&…

构建高可用性数据库架构:深入探索Oracle Active Data Guard(ADG)

随着企业数据规模的不断增长和业务的复杂化,数据库的高可用性和可靠性变得尤为重要。Oracle Active Data Guard(ADG)作为Oracle数据库提供的一种高可用性解决方案,在实时备份和灾难恢复方面发挥着重要作用。本文将深入探讨ADG的原…

中断服务程序模板

通常定时器初始化过程如下: ①对 TMOD赋值,以确定TO和T1的工作方式。 ②计算初值,并将初值写入THO、TLO或TH1、TL1。 ③中断方式时,则对IE赋值,开放中断。 ④使TRO或TR1置位,启动定时器/计数器定时或计数。 代码 利用定时器0工作方式1&…

轻松设置Facebook自动隐藏评论和删除评论功能

Facebook作为海外营销的最大流量平台之一,是很多跨境卖家争夺的市场,希望可以通过Facebook这个全球性的平台来推广自己的产品或服务。身处这个竞争激烈的市场,任何一条负面评论或不当言论出现在你的品牌页面上都可能影响到品牌形象&#xff0…

臻奶惠无人售货机:新零售时代的便捷消费革命

臻奶惠无人售货机:新零售时代的便捷消费革命 在新零售的浪潮中,智能无人售货机作为一个创新的消费模式,已经成为距离消费者最近的便捷购物点之一。这种模式不仅能够满足居民对消费升级的需求,还能通过建立多样化和多层次的消费体…

k8s练习-创建一个Deployment

创建Deployment 创建一个nginx deployment [rootk8s-master home]# cat nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deployment spec:selector:matchLabels:app: nginx # 配置pod的labelsreplicas: 2 # 声明2个副本template:metada…

spring boot自动配置原理-怎样回答这个问题

首先我们说一下自动配置的概念。 自动配置:遵循约定大约配置的原则,在boot程序启动后,起步依赖中的一些bean对象会自动注入到ioc容器 例子 程序引入spring-boot-starter-web 起步依赖,启动后,会自动往ioc容器中注入…

记一次 pdfplumber 内存泄漏导致的服务器宕机

有一个项目需求,要在每天凌晨5点的时候执行一个任务,获取一系列的PDF文件并解析。 后端是Django框架,定时任务用Celery来实现的。 本地跑没什么问题,但是一放到服务器上跑就会宕机,而且是毫无征兆的宕机,…

黑马HTMLCSS基础

黑马的笔记和资料都是提供好了的,这个文档非常适合回顾复习。我在黑马提供的笔记上做了一些微不足道的补充,以便自己复习查阅。该笔记比较重要的部分是 表单,http请求 第一章. HTML 与 CSS HTML 是什么:即 HyperText Markup lan…

WPF —— 动画

wpf动画类型 1<类型>Animation这些动画称为from/to/by动画或者叫基本动画&#xff0c;他们会在起始值或者结束值进行动画处理&#xff0c;常用的例如 <DoubleAnimation> 2 <类型>AnimationUsingKeyFrames: 关键帧动画&#xff0c;功能要比from/to这些动画功…

正则表达式 (regex) 简介和基本用法

正则表达式 (regex) 是用于模式匹配和文本操作的强大工具。 它们广泛应用于编程、文本处理、数据验证等领域。 以下是正则表达式的一些常见用例&#xff1a; 模式匹配&#xff1a;正则表达式可用于搜索文本中的特定模式。 例如&#xff0c;在文档中查找电子邮件地址、URL、电话…

使用虚拟引擎为AR体验提供动力

Powering AR Experiences with Unreal Engine ​​​​​​​ 目录 1. 虚拟引擎概述 2. 虚拟引擎如何为AR体验提供动力 3. 虚拟引擎中AR体验的组成部分是什么&#xff1f; 4. 使用虚拟引擎创建AR体验 5. 虚拟引擎中AR的优化提示 6. 将互动性融入AR与虚拟引擎 7. 在AR中…

AutoGluon

官网 amazon (base) PS C:\Users\gg葱> conda env list # conda environments: # pytorch1 C:\Users\gg葱\.conda\envs\pytorch1 base * D:\ANCDD:\Documents\LMm\env\pytorch2(base) PS C:\Users\gg葱> conda create --prefixD:/Doc…

5G PLMN相关概念

PLMN PLMN&#xff08;Public Land Mobile Network&#xff0c;公用陆地移动网络&#xff09;&#xff0c;是由政府或其批准的经营者为公众提供陆地移动通信业务而建立、经营的网络。PLMN与公众交换电话网&#xff08;PSTN&#xff09;互连&#xff0c;形成整个地区或国家规模…