MySQL高级三

news2024/11/18 9:38:38

目录

三、MySQL高级03

3.1 MyCat

3.1.1 MyCat简介

3.1.2 中间件的作用

3.2 安装MyCat

3.3 主从复制

3.3.1 主从复制的原理

3.3.2 主从复制的好处

3.3.3 配置主从复制


三、MySQL高级03

如果虚拟机的磁盘已满,可以对磁盘进行重新分配

参考:虚拟机扩展磁盘与增加磁盘操作_虚拟机新增磁盘_石头城12345的博客-CSDN博客

3.1 MyCat

3.1.1 MyCat简介

Mycat 是数据库中间件。  java->mycat->mysql
1 Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema,集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,Cobar停止维护。
2 Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新的功能在其中。青出于蓝而胜于蓝。
3 OneProxy基于MySQL官方的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件。舍弃了一些功能,专注在性能和稳定性上。
4 kingshard由小团队用go语言开发,还需要发展,需要不断完善。
5 Vitess是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用需要大量改造成本。
6 Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。
7 MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件
8 MySQLRoute是MySQL官方Oracle公司发布的中间件

3.1.2 中间件的作用

1、读写分离

 

2、数据分片

垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)

 

3、多数据源整合

 

4、原理

Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

这种方式把数据库的分布式从代码中解耦出来,用户察觉不出来后台使用Mycat 还是MySQL。

 

3.2 安装MyCat

注:使用mycat1.6的应用于要求

jdk版本在1.7以上
mysql版本支持5.+,不支持8.+
​
mysql版本如果不正确,会一直报错
Can't connect to MySQL server on'XXXXX'

1、安装wget

-- 使用yum安装wget
yum -y install wget
​
Installed:
  wget.x86_64 0:1.14-18.el7_6.1                                                                        
Complete!

2、使用wget下载MyCat压缩包

wget http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

3、解压安装包

tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

4、配置环境变量

-- 进入配置文件
vim /etc/profile
-- 配置MyCat的环境变量
export MYCAT_HOME=/usr/lwl/soft/mycat/mycat
export PATH=$MYCAT_HOME/bin:$PATH
​
配置完之后使配置文件生效
source /etc/profile

5、修改server.xml

vim /usr/lwl/soft/mycat/mycat/conf/server.xml
​
1、端口号在第33行,默认为8066(不用进行修改)
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
​
2、修改root用户密码(第81行)
原始密码:123456  修改后的密码root

6、修改schema.xml

方式一:

修改配置文件 schema.xml
删除<schema>标签间的表信息,<dataNode>标签只留一个,
<dataHost>标签只留一个,<writeHost>
<readHost>只留一对 

方式二:

或者将原本的schema.xml文件更名为schema-bak.xml

再建一个新的文件名为schema.xml,内容如下:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <!--这里的TESTDB对应server.xml文件中的property标签-->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
                <!--表名为test1,这张表在数据库test中一定要存在-->
                <table name="test1" dataNode="dn1" />
        </schema>
        <!--节点名字为dn1,dataHost对应下面的dataHost标签,database是指明数据库-->
        <dataNode name="dn1" dataHost="localhost1" database="test" />
        <!--数据库的一些信息,比如dbType="mysql"是说数据库类型是mysql-->
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <!--一直在运行的时候,使用的是user-->
                <heartbeat>select user()</heartbeat>
                <!--用来进行数据库写操作的主机信息,默认的用户名和密码都是root-->
                <writeHost host="hostM1" url="192.168.111.127:3306" user="root" password="密码">
                    <!--用来进行数据库读操作的主机信息,默认的用户名和密码都是root-->
                    <readHost host="hostS2" url="192.168.111.128:3306" user="root" password="密码"></readHost>
                </writeHost>
        </dataHost>
</mycat:schema>
​
​
配置完成后,要赋予新的schema.xml文件高级权限
chmod 777 schema.xml

schema文件解释:

引用:使用Mycat实现数据库读写分离 - 简书

1、schema 解释
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
​
name属性:表示的是逻辑库的名字,是应用程序连接的时候的数据库名称.
​
checkSQLschema属性:当该值设置为 true 时,如果我们执行语句select * from TESTDB.travelrecord;则 MyCat 会把语句修改为select * from travelrecord;。即把表示 schema 的字符去掉,避免发送到后端数据库执行时报(ERROR 1146 (42S02): Table ‘testdb.travelrecord’ doesn’t exist)。
​
sqlMaxLimit属性:当该值设置为某个数值时。每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值。例如设置值为 100,执行select * from TESTDB.travelrecord;的效果为和执行select * from TESTDB.travelrecord limit 100;相同。设置该值的话,MyCat 默认会把查询到的信息全部都展示出来,造成过多的输出。所以,在正常使用中,还是建议加上一个值,用于减少过多的数据返回。
当然 SQL 语句中也显式的指定 limit 的大小,不受该属性的约束。
需要注意的是,如果运行的 schema 为非拆分库的,那么该属性不会生效。需要手动添加 limit 语句
​
​
​
2、table标签解释
<table name="test1" dataNode="dn1" />
Table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。
​
name 属性:定义逻辑表的表名,这个名字就如同我在数据库中执行 create table 命令指定的名字一样,同个 schema 标签中定义的名字必须唯一。
​
dataNode属性:定义这个逻辑表所属的 dataNode, 该属性的值需要和后面 dataNode 标签中 name 属性的值相互对应。
​
​
​
3、dataNode标签解释
<dataNode name="dn1" dataHost="localhost1" database="test" />
dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片。
​
name 属性:定义数据节点的名字,这个名字需要是唯一的,我们需要在table 标签上应用这个名字,来建立表与分片对应的关系。
​
dataHost 属性:该属性用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性。
​
database 属性:该属性用于定义该分片属性哪个具体数据库实例上的具体库,因为这里使用两个纬度来定义分片,就是:实例+具体的库。因为每个库上建立的表和表结构是一样的。所以这样做就可以轻松的对表进行水平拆分。
​
​
​
4、dataHost标签解释
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
作为 Schema.xml 中最后的一个标签,该标签在 mycat 逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。
​
name 属性:唯一标识 dataHost 标签,供上层的标签使用
​
maxCon 属性:指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的 writeHost、readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数
​
minCon 属性:指定每个读写实例连接池的最小连接,初始化连接池的大小
​
balance 属性:
负载均衡类型,目前的取值有 3 种:
balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
balance="1",全部的 readHost 与 stand by writeHost参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载
均衡。
balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
balance="3",所有读请求随机的分发到 wiriterHost 对应的readhost 执行,writerHost 不负担读压力,
注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
​
writeType 属性:
负载均衡类型,目前的取值有 3 种:
① writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
② writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。switchType 属性
-1 表示不自动切换。
1 默认值,自动切换。
2 基于 MySQL 主从同步的状态决定是否切换。
​
dbType 属性:指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、oracle、spark 等。
​
dbDriver 属性:指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。
从 1.6 版本开始支持 postgresql 的 native 原始协议。
如果使用 JDBC 的话需要将符合 JDBC 4 标准的驱动 JAR 包放到MYCAT\lib 目录下,并检查驱动 JAR 包中。
包括如下目录结构的文件:META-INF\services\java.sql.Driver。在这个文件内写上具体的 Driver 类名,例如:
com.mysql.jdbc.Driver。
​
​
5、heartbeat标签解释
<heartbeat>select user()</heartbeat>
这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
​
​
6、writeHost 标签、readHost 标签解释
这两个标签都指定后端数据库的相关配置给 mycat,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例,组着这些读写实例来满足系统的要求。在一个 dataHost 内可以定义多个 writeHost 和 readHost。
但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。另一方面,由于这个 writeHost 宕机系统会自动的检测到,并切换到备用的 writeHost 上去。
​
host 属性:用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1。
​
url 属性:后端实例连接地址,如果是使用 native 的 dbDriver,则一般为 ipaddress:port 这种形式。用 JDBC 或其他的dbDriver,则需要特殊指定。当使用 JDBC 时则可以jdbc:mysql://localhost:3306/。
​
user 属性:后端存储实例需要的用户名字。
​
password 属性:后端存储实例需要的密码。
​

7、修改服务器名字(可以不修改)

修改前:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
​
​
#主机修改后:
# 这里的hostM1对应schema.xml中的writeHost标签
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 hostM1
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 hostM1
192.168.111.127 hostM1
​
#从机修改后
# 这里的hostM1对应schema.xml中的readHost标签
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 hostS1
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 hostS1
192.168.111.128 hostS1

8、开启主机(127)mycat

1、使用窗口(A)进入到mycat中的logs文件中  /usr/lwl/soft/mycat/mycat/logs
​
2、展示其中的日志文件
[root@hostM1 logs]# ls
2023-02  2023-03  console.log  mycat.log  mycat.pid  wrapper.log
​
3、动态显示日志文件
tail -f wapper.log
​
4、然后再开启一个窗口(B)开启mycat
开启命令:mycat start
​
5、在窗口(A)中的日志中可以观察到
MyCAT Server startup successfully. see logs in logs/mycat.log
即是mycat开启成功

9、连接mycat

mysql -uroot -proot -h192.168.111.127 -P8066 -DTESTDB
-u 代表输入用户
-p 代表密码
-h 代表IP地址
-P 代表端口号
-D 代表连接的数据库名称

10、测试是否连接成功

向TESTDB数据库的test1表中添加一条数据
切换到192.168.111.127的mysql数据库,查看test1的表中是否有相应的数据,如果有就代表读写分离成功
​
测试读写:
连接mycat的mysql,进行添加个查询操作,并且查看操作日志

3.3 主从复制

3.3.1 主从复制的原理

mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫Master,从服务器叫Slave;主从复制就是Slave跟着Master学,Master做什么,Slave就做什么。
那么Slave怎么同步Master的动作呢?现在Master有一个日志功能,把自己所做的增删改查的动作全都记录在日志中,Slave只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制,具体实现如下图:

 

3.3.2 主从复制的好处

1) 实现服务器负载均衡
2) 通过复制实现数据的异地备份
3) 提高数据库系统的可用性

3.3.3 配置主从复制

1、配置主从复制的要求

1、配置主从复制要求主机、从机安装相同版本的mysql
​
2、主机、从机的mysql中都需要有远程连接的权限
​
3、两台服务器都关闭防火墙
    systemctl stop firewalld
    
4、主机和从机能够互相连通(能ping通)
    在主机127执行:ping 192.168.111.128
    在从机128执行:ping 192.168.111.127

2、两台主机都开启mysql服务

systemctl start mysqld 或者 service mysqld start

3、修改mysql的配置文件 (/etc/my.cnf)

主机:修改192.168.111.127的配置文件
[mysqld] # 一定要在这下面配置
log-bin=mysql-bin   # 二进制的文件
server-id=127       # 唯一的标识  默认是1
​
从机:修改192.168.111.128的配置文件
[mysqld] # 一定要在这下面配置
log-bin=mysql-bin   # 二进制的文件
server-id=128      # 唯一的标识  默认是1
​
​
注:
1、可以只在一台服务器上配置即可,一定要保证主机和从机的server-id不一样
2、log-bin可以不写,会有默认的名字

4、重启mysql服务

systemctl restart mysqld 或者 service mysqld restart

5、主机(127)连接mysql查看主机的状态

show master status;

 

6、从机(128)连接mysql配置对应的主机信息

连接mysql后,配置对应的主机信息,
主机的ip地址,主机的用户名和密码,二进制文件名字和位置
​
change master to master_host='192.168.111.127',
master_user='root',master_password='root',
master_log_file='mysql-bin.000001',master_log_pos=154;

 

7、启动从机

-- 启动从机
start slave;
​
-- 查看从机状态
show slave status\G;

问题1、Slave_IO_Running: No

 

解决uuid相同的问题
​
1、可以先查看两台服务器的uuid
show variables like '%server_uuid%';
​
2、查找auto.cnf
find / -name auto.cnf
​
3、这个文件可以修改任何一个数字,也可以直接删除
这里修改了从机(128)的配置文件
[auto]  #修改前
server-uuid=647f2cac-b7ff-11ed-aefd-000c29102664
[auto]  #修改后 将倒数第五位的0改为7
server-uuid=647f2cac-b7ff-11ed-aefd-000c29172664
​
​
修改后可以先停止从机
stop slave;
​
重启主机和从机的mysql服务
systemctl restart mysqld;
​
再开启从机
start slave;

问题2、Slave_IO_Running: Connecting

 

出现上图就是连接不上主机:
1、防火墙没有关闭
2、主机的用户名和密码不对
3、日志文件的名字不对
4、pos的值不对
​
先停止从机:
stop slave;
​
重启主机和从机的mysql服务
systemctl restart mysqld;
​
再开启从机
start slave;
​
再排除情况
可以先查看日志文件名字是否更改

8、验证主从复制是否成功

在主机中test库中test1表中添加一条数据
然后在从机的test库中的test1表进行查询,能查到就代表配置成功

 

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

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

相关文章

将IDEA的项目托管到gitee

目录1. 在gitee上创建仓库2. 本地创建仓库目录3. 将项目添加到缓冲区4. 将缓冲区的项目添加到本地仓库5. 将本地仓库的项目上传到gitee6. 遇到的问题6.1 问题描述6.2 解决方法7. 相关图示与补充8. 相关参考1. 在gitee上创建仓库 2. 本地创建仓库目录 在IDEA中选择创建 Git 仓…

命令行和Python交互模式

命令行和Python交互模式的区别 命令行模式mac打开终端 在命令行模式下&#xff0c;可以执行python进入Python交互式环境&#xff0c;也可以执行python hello.py运行一个.py文件。 执行一个.py文件只能在命令行模式执行 Python交互模式键入python3即可&#xff0c;交互模式下可…

centos安装gitlab

更新系统 sudo yum -y update安装所需要的包 sudo yum -y install epel-release curl vim policycoreutils-python如果要安装并使用本地Postfix服务器发送通知&#xff0c;请安装Postfix&#xff0c;这里就不安装了&#xff1a; sudo yum -y install postfix安装后启动并启用…

JVM虚拟机概述(2)

3.JVM 运行时数据区 3.1.1 程序计数器&#xff08;Program Counter Register&#xff09; 是一块很小的内存空间,用来记录每个线程运行的指令位置&#xff0c;是线程私有的,每个线程都拥有一个程序计数器&#xff0c;生命周期与线程一致&#xff0c;是运行时数据区中唯一一个不…

高压放大器知识科普介绍

高压放大器是一种用于放大高压信号的电子设备&#xff0c;具有高压输出&#xff0c;低噪声&#xff0c;高精度&#xff0c;高稳定性&#xff0c;高可靠性&#xff0c;低功耗&#xff0c;低成本等的优点&#xff0c;所以才被广泛应用在磁场探测、电磁脉冲放大、电磁波放大、电磁…

集成RocketChat至现有的.Net项目中,为ChatGPT铺路

文章目录前言项目搭建后端前端代理账号鉴权方式介绍登录校验模块前端鉴权方式后端鉴权方式登录委托使用登录委托处理聊天消息前端鉴权方式后端校验方式项目地址前言 今天我们来聊一聊一个Paas的方案&#xff0c;如何集成到一个既有的项目中。 以其中一个需求为例子&#xff1a…

使用Vue展示数据(动态查询)

学习内容来源&#xff1a;视频P4 本篇文章进度接着之前的文章进行续写 精简前后端分离项目搭建 Vue基础容器使用 目录选择组件修改表格组件修改分页组件增加后端接口前端请求数据接口页面初始化请求数据点击页码请求数据选择组件 在官方文档中选择现成的组件&#xff0c;放在页…

大数据技术——概述

根据IBM前首席执行官郭士纳的观点&#xff0c;IT领域每隔十五年就会迎来一次重大变革三次信息化浪潮1.存储设备容量不断增加2.CPU处理能力大幅提升3.网络带宽不断增加运营式系统阶段数据库的出现使得数据管理的复杂度大大降低,数据往往伴随着一定的运营活动而产生并记录在数据库…

手把手搭建springboot项目06-springboot整合RabbitMQ及其原理和应用场景

目录前言工作流程-灵魂画手名词解释交换机类型一、安装1.1 [RabbitMQ官网安装](https://www.rabbitmq.com/download.html)1.2 Docker安装并启动二、食用教程2.1.导入依赖2.2 添加配置2.3 代码实现2.3.1 直连&#xff08;Direct&#xff09;类型2.3.2 引入消息手动确认机制2.3.2…

【保姆级】Java后端查询数据库结果导出xlsx文件+打印xlsx表格

目录前言一、需求一&#xff1a;数据库查询的数据导出成Excel表格1.1 Vue前端实现导出按钮点击事件1.2 后端根据数据库查询结果生成xlsx文件二、需求二&#xff1a;对生成的xlsx文件调用打印机打印2.1 Vue前端实现按钮事件2.2 后端实现打印前言 最近在弄一个需求&#xff0c;需…

低代码如何推动自动化未来

一项全球研究表明&#xff0c;企业平均每个月有60个小时的工作是手动完成的&#xff0c;也就是每个员工每天花3个小时完成文件归档、数据输入和报告整合&#xff0c;而这些工作都是可以通过自动化的方式完成的。 组织实现数字化转型的关键环节就是自动化。通过自动化&#xff…

温控负荷的需求响应潜力评估及其协同优化管理研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

登录Oracle数据库遇到ORA-01017密码错误的解决办法

文章目录症状分析解决办法欢迎加下方我的微信&#x1f447;&#xff0c;拉你入学习群我们在登录Oracle数据库时可能会遇到ORA-01017错误&#xff0c;这里分析原因并提供解决办法。点击试看博主的专著《MySQL 8.0运维与优化》&#xff08;清华大学出版社&#xff09; 症状 图像…

Linux rpm安装mysql

个人记录 第一步&#xff1a;卸载已安装的mysql rpm -qa | grep -i mysql 查询已安装的mysql1、确认停止mysql服务 2、删除卸载mysql –nodeps&#xff1a;表示强制卸载&#xff0c;如果因为依赖关系导致卸载不成功&#xff0c;加上强制卸载选项–nodeps rpm -ev mysql-com…

C盘爆满?两个超简单的解决办法

我们在使用电脑的过程中&#xff0c;经常容易出现C盘爆红&#xff0c;反而其他盘还有大量可用空间的情况。为什么会这样呢&#xff1f;其实主要就两种原因&#xff1a;一是电脑使用习惯不好&#xff0c;不管什么软件都默认安装在C盘&#xff0c;大文件又喜欢放在桌面&#xff0…

Python(青铜时代)——列表

列表 在Python中&#xff0c;所有 非数字型变量 都支持以下特点&#xff1a; 都是一个序列 sequence, 也可以理解为 容器 取值 [] 遍历 for in 计算长度、最大/最小值、比较、删除 链接 和 重复 * 切片 列表的定义 List (列表) 是Python 中使用 最频繁 的数据类型&#…

6.3 负反馈放大电路的方块图及一般表达式

一、负反馈放大电路的方块图表示法 任何负反馈放大电路都可以用图6.3.1所示的方块图来表示&#xff0c;上面一个方块是负反馈放大电路的基本放大电路&#xff0c;下面一个方块是反馈放大电路的反馈网络。负反馈放大电路的基本放大电路是在断开反馈且考虑了反馈网络的负载效应的…

让您的客户了解您的制造过程“VR云看厂实时数字化展示”

一、工厂云考察&#xff0c;成为市场热点虚拟现实&#xff08;VR&#xff09;全景技术问世已久&#xff0c;但由于应用范围较为狭窄&#xff0c;一直未得到广泛应用。国外客户无法亲自到访&#xff0c;从而导致考察难、产品取样难等问题&#xff0c;特别是对于大型制造企业来说…

剑指 Offer 14-剪绳子

摘要 ​​​​​​剑指 Offer 14- I. 剪绳子 剑指 Offer 14- II. 剪绳子 II 343. 整数拆分 一、动态规划解析 这道题给定一个大于1的正整数n&#xff0c;要求将n 拆分成至少两个正整数的和&#xff0c;并使这些正整数的乘积最大化&#xff0c;返回最大乘积。令x是拆分出的第…

Spark Transformation转换算子和Action行动算子

1、Transformation转换算子 RDD整体上分为Value类型、双Value类型和Key-Value类型 1.1&#xff0c;Value类型 1.1.1&#xff0c;map()映射 object value01_map {def main(args: Array[String]): Unit {//1.创建SparkConf并设置App名称val conf new SparkConf().setAppName(…