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

news2024/12/23 20:46:26

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.coloradmin.cn/o/1562195.html

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

相关文章

android APP monkey 测试

monkey 测试 一、电脑ADB安装及使用详解1、什么是 Monkey 测试2、什么是ADB3、ADB的作用4、安装前提条件5、ADB下载6、ADB安装与配置 二、连接安卓手机检查是否连接上安卓手机windows端安装ADB驱动 三、 monkey测试操作指令演示指令APP包名查看方式测试效果 一、电脑ADB安装及使…

蜜罐技术---德迅猎鹰

什么是蜜罐 蜜罐是一种互联网安全系统,部署诱饵和陷阱在关键网络入口,诱导攻击者攻击伪装目标,保护真实资产,并且对攻击者做行为取证和追踪溯源,定位攻击者自然人身份,提升主动防御能力,让安全…

Ps:阈值

阈值 Threshold命令可将灰度图像或彩色图像转换为仅包含黑色和白色的二值图像。 Ps菜单:图像/调整/阈值 Adjustments/Threshold Ps菜单:图层/新建调整图层/阈值 New Adjustment Layer/Threshold 阈值命令通过设置一个特定的亮度阈值(阈值色阶…

EasyCVR视频汇聚平台海康Ehome2.0与5.0设备接入时的配置区别

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

ZCMU操作系统课程实验 - 实验1-Linux的使用

登录 1. 打开这个东西 2. 在 文件 - > 打开 中打卡机房里VMOS文件里的这个东东 3. 然后依次操作下去好了,有红色的选项,我都是选的"Do nothing"。完成后就会出现这样一个黑框框。 4. 让你登录。输入:root。密码&…

第十七章 Kafka

一、特性 - 高吞吐、低延迟 - 高伸缩性 - 持久性、可靠性 - 容错性 - 高并发 通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百…

MSOX3104T是德科技MSOX3104T示波器

181/2461/8938产品概述: Keysight MSOX3104T X 系列示波器提供您更快获得测量见解所需的所有性能和功能,再次重新定义了您对通用示波器的期望。除了触摸的优点外,内置 USB 主机和 USB 设备端口还使 PC 连接变得容易。InfiniiVision MSOX3104…

Nginx 日志输出配置json格式

nginx日志输出配置json格式 nginx服务器日志相关指令主要有两条: (1) 一条是log_format,用来设置日志格式 (2) 另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小。 log_format指令用来设置日志的记录格式,它的语…

【面试八股总结】传输控制协议TCP(一)

一、什么是TCP协议 TCP是传输控制协议Transmission Control Protocol TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接的:每条TCP连接杜只能有两个端点,每一条TCP连接只能是点对点的(一对一)可靠的&#xff1a…

iPhone设备中如何分析和解决应用程序崩溃日志的问题

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么? 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志,以便调查崩溃的原因。我们将展示三种不同的…

WPF学习笔记-FlowDocument实现表格单元格垂直居中以及边框设置

文章目录 概述一、基本方案1.1 添加Grid1.2 添加列1.3 添加行1.4 添加Grid的时候同时添加行和列1.5 添加元素1.6 获取指定单元格的元素1.7 添加TextBlock元素1.7.1 直接添加字符串1.7.2 添加Paragraph1.8 获取文本内容1.9 获取元素二、其他操作2.1 设置边框2.2 设置隔行颜色2.3…

深入剖析Xen与KVM虚拟化技术及其架构特点

引言 在现代数据中心与云计算领域中,虚拟化技术已经成为提升资源利用率、增强灵活性与可扩展性的重要基石。其中,Xen与KVM作为两种备受瞩目的开源虚拟化解决方案,分别以其独特的设计理念与技术创新引领着行业的进步与发展。Xen源自剑桥大学的…

Excel 隔几行批量插入空白行

例如如下表格,每隔6行插入一行数据: 1)第7个单元格输入1 2)选中6个单元格,然后双击填充数据: 3)F5 找到常量 Ctrlshift 复制插入的数据,然后选中数据 按F5,定位到空值

非关系型数据库之Redis配置与优化

一、关系数据库与非关系型数据库 1.1关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上一般面向于记录。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用…

Unix 网络编程, Socket 以及bind(), listen(), accept(), connect(), read()write()五大函数简介

Unix网络编程是针对类Unix操作系统(包括Linux、BSD以及其他遵循POSIX标准的操作系统)进行网络通信开发的技术领域。网络编程涉及创建和管理网络连接、交换数据以及处理不同层次网络协议栈上的各种网络事件。在Unix环境中,网络编程通常涉及到以…

分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测

分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测 目录 分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测分类效果基本介绍模型描述程序设计参考资料…

Web实例_报表开发01-基于HTML进行报表呈现

Web实例_报表开发01-基于HTML进行报表呈现 报表开发是一种在利用了软件的基础上, 针对不同类型的报表, 进行开放的工作。 而以报表的方式, 将相关的内容、数值呈现出来的话, 则会起到更好的概况作用。 再加上, 报表开发工作是依托于计算机来完成的, 因此在效率、完整性等方面…

蓝桥杯-穿越雷区

题目要求 需求:从一个方格中A点,按要求移动到B点。 要求:每次只能走上下左右,每次只能走一次,每次是轮换穿越’‘,’-两个,否则就会能量失衡,发生爆炸。 使用的算法:这题典型的就是使…

6款Mac垃圾清理软件横评 Mac电脑清理软件哪个好 cleanmymac评测

鉴于苹果笔记本昂贵的硬盘价格,导致我们不得不定期清理自己的硬盘空间,释放给真正有用的各种程序等。 即便我们把程序安装到外置硬盘,但是程序运行时的缓存,仍然是在内置的硬盘中。 今天就让我们对比看看,目前市面上…

Linux如何连接github仓库

一.创建一个github账号 如何创建一个github账号 二.在github上创建一个仓库 登录上github后出现这个界面 然后点击左上角头像,在按照图片位置点击: 继续按照图片上的位置进行点击: 创建成功: 三.云主机连接Github仓库 1.在linux中…