一、DataX简介

DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

二、DataX架构原理

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

1.DataX框架设计

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

Reader:数据采集模块,负责采集数据源的数据,将数据发送给Framework

Writer:数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。

Framework:用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

2.DataX运行流程

Job单个数据同步的作业,称为一个Job,一个Job启动一个进程。

Task根据不同数据源的切分策略,一个Job会切分为多个Task,Task是DataX作业的最小单元每个Task负责一部分数据的同步工作。

TaskGroupScheduler调度模块会对Task进行分组,每个Task组称为一个Task Group。每个TaskGroup负责以一定的并发度运行其所分得的Task,单个Task Group的并发度为5。

Reader>Channel>Writer每个Task启动后,都会固定启动Reader>Channel>Writer的线程来完成同步工作。

3.DataX调度决策思路

举例来说,用户提交了一个DataX作业,并且配置了总的并发度为20,目的是对一个有100张分表的mysql数据源进行同步。DataX的调度决策思路是:

1)DataX Job根据分库分表切分策略,将同步工作分成100个Task。

2)根据配置的总的并发度20,以及每个Task Group的并发度5,DataX计算共需要分配4个TaskGroup。

3)4个TaskGroup平分100个Task,每一个TaskGroup负责运行25个Task。

4.DataX与Sqoop对比

三、DataX部署

1)下载DataX安装包并上传到hadoop102的/opt/software

下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

2)解压datax.tar.gz到/opt/module

3)自检,执行如下命令

[root@hadoop102 ~]$ python /opt/module/datax/bin/datax.py /opt/module/datax/job/job.json

出现如下内容,则表明安装成功

……

2021-10-12 21:51:12.335 [job-0] INFO  JobContainer -

任务启动时刻                    : 2021-10-12 21:51:02

任务结束时刻                    : 2021-10-12 21:51:12

任务总计耗时                    :                 10s

任务平均流量                    :          253.91KB/s

记录写入速度                    :          10000rec/s

读出记录总数                    :              100000

读写失败总数                    :                   0

四、DataX使用

1.DataX使用概述

(1)DataX任务提交命令

DataX的使用十分简单,用户只需根据自己同步数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

[root@hadoop102 datax]$ python bin/datax.py path/to/your/job.json

(2)DataX配置文件格式

可以使用如下命名查看DataX配置文件模板。

[root@hadoop102 datax]$ python bin/datax.py -r mysqlreader -w hdfswriter

配置文件模板如下,json最外层是一个job,job包含setting和content两部分,其中setting用于对整个job进行配置,content用户配置数据源和目的地。

Reader和Writer的具体参数可参考官方文档,地址如下:

https://github.com/alibaba/DataX/blob/master/README.md

2.同步MySQL数据到HDFS案例

案例要求:同步gmall数据库中base_province表数据到HDFS的/base_province目录

需求分析:要实现该功能,需选用MySQLReader和HDFSWriter,MySQLReader具有两种模式分别是TableMode和QuerySQLMode,前者使用table,column,where等属性声明需要同步的数据;后者使用一条SQL查询语句声明需要同步的数据。

下面分别使用两种模式进行演示。

(1)MySQLReader之TableMode

1)编写配置文件

(1)创建配置文件base_province.json

[root@hadoop102 ~]$ vim /opt/module/datax/job/base_province.json

(2)配置文件内容如下

{

"job": {

"content": [

{

"reader": {

"name": "mysqlreader",

"parameter": {

"column": [

"id",

"name",

"region_id",

"area_code",

"iso_code",

"iso_3166_2"

],

"where": "id>=3",

"connection": [

{

"jdbcUrl": [

"jdbc:mysql://hadoop102:3306/gmall"

],

"table": [

"base_province"

]

}

],

"password": "000000",

"splitPk": "",

"username": "root"

}

},

"writer": {

"name": "hdfswriter",

"parameter": {

"column": [

{

"name": "id",

"type": "bigint"

},

{

"name": "name",

"type": "string"

},

{

"name": "region_id",

"type": "string"

},

{

"name": "area_code",

"type": "string"

},

{

"name": "iso_code",

"type": "string"

},

{

"name": "iso_3166_2",

"type": "string"

}

],

"compress": "gzip",

"defaultFS": "hdfs://hadoop102:8020",

"fieldDelimiter": "\t",

"fileName": "base_province",

"fileType": "text",

"path": "/base_province",

"writeMode": "append"

}

}

}

],

"setting": {

"speed": {

"channel": 1

}

}

}

}

2)配置文件说明

(1)Reader参数说明

(2)Writer参数说明

注意事项:

HFDS Writer并未提供nullFormat参数:也就是用户并不能自定义null值写到HFDS文件中的存储格式。默认情况下,HFDS Writer会将null值存储为空字符串(‘’),而Hive默认的null值存储格式为\N。所以后期将DataX同步的文件导入Hive表就会出现问题。

解决该问题的方案有两个:

一是修改DataX HDFS Writer的源码,增加自定义null值存储格式的逻辑,可参考https://blog.csdn.net/u010834071/article/details/105506580。

二是在Hive中建表时指定null值存储格式为空字符串(‘’),例如:

DROP TABLE IF EXISTS base_province;

CREATE EXTERNAL TABLE base_province

(

`id`         STRING COMMENT '编号',

`name`       STRING COMMENT '省份名称',

`region_id`  STRING COMMENT '地区ID',

`area_code`  STRING COMMENT '地区编码',

`iso_code`   STRING COMMENT '旧版ISO-3166-2编码,供可视化使用',

`iso_3166_2` STRING COMMENT '新版IOS-3166-2编码,供可视化使用'

) COMMENT '省份表'

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

NULL DEFINED AS ''

LOCATION '/base_province/';

(3)Setting参数说明

3)提交任务

(1)在HDFS创建/base_province目录

使用DataX向HDFS同步数据时,需确保目标路径已存在

[root@hadoop102 datax]$ hadoop fs -mkdir /base_province

(2)进入DataX根目录

[root@hadoop102 datax]$ cd /opt/module/datax

(3)执行如下命令

[root@hadoop102 datax]$ python bin/datax.py job/base_province.json

4)查看结果

(1)DataX打印日志

2021-10-13 11:13:14.930 [job-0] INFO  JobContainer -

任务启动时刻                    : 2021-10-13 11:13:03

任务结束时刻                    : 2021-10-13 11:13:14

任务总计耗时                    :                 11s

任务平均流量                    :               66B/s

记录写入速度                    :              3rec/s

读出记录总数                    :                  32

读写失败总数                    :                   0

(2)查看HDFS文件

[root@hadoop102 datax]$ hadoop fs -cat /base_province/* | zcat

3 山西 1 140000 CN-14 CN-SX

4 内蒙古 1 150000 CN-15 CN-NM

5 河北 1 130000 CN-13 CN-HE

6 上海 2 310000 CN-31 CN-SH

7 江苏 2 320000 CN-32 CN-JS

8 浙江 2 330000 CN-33 CN-ZJ

9 安徽 2 340000 CN-34 CN-AH

10 福建 2 350000 CN-35 CN-FJ

11 江西 2 360000 CN-36 CN-JX

12 山东 2 370000 CN-37 CN-SD

14 台湾 2 710000 CN-71 CN-TW

15 黑龙江 3 230000 CN-23 CN-HL

16 吉林 3 220000 CN-22 CN-JL

17 辽宁 3 210000 CN-21 CN-LN

18 陕西 7 610000 CN-61 CN-SN

19 甘肃 7 620000 CN-62 CN-GS

20 青海 7 630000 CN-63 CN-QH

21 宁夏 7 640000 CN-64 CN-NX

22 新疆 7 650000 CN-65 CN-XJ

23 河南 4 410000 CN-41 CN-HA

24 湖北 4 420000 CN-42 CN-HB

25 湖南 4 430000 CN-43 CN-HN

26 广东 5 440000 CN-44 CN-GD

27 广西 5 450000 CN-45 CN-GX

28 海南 5 460000 CN-46 CN-HI

29 香港 5 810000 CN-91 CN-HK

30 澳门 5 820000 CN-92 CN-MO

31 四川 6 510000 CN-51 CN-SC

32 贵州 6 520000 CN-52 CN-GZ

33 云南 6 530000 CN-53 CN-YN

13 重庆 6 500000 CN-50 CN-CQ

34 西藏 6 540000 CN-54 CN-XZ

(2)MySQLReader之QuerySQLMode

1)编写配置文件

(1)修改配置文件base_province.json

[root@hadoop102 ~]$ vim /opt/module/datax/job/base_province.json

(2)配置文件内容如下

{

"job": {

"content": [

{

"reader": {

"name": "mysqlreader",

"parameter": {

"connection": [

{

"jdbcUrl": [

"jdbc:mysql://hadoop102:3306/gmall"

],

"querySql": [

"select id,name,region_id,area_code,iso_code,iso_3166_2 from base_province where id>=3"

]

}

],

"password": "000000",

"username": "root"

}

},

"writer": {

"name": "hdfswriter",

"parameter": {

"column": [

{

"name": "id",

"type": "bigint"

},

{

"name": "name",

"type": "string"

},

{

"name": "region_id",

"type": "string"

},

{

"name": "area_code",

"type": "string"

},

{

"name": "iso_code",

"type": "string"

},

{

"name": "iso_3166_2",

"type": "string"

}

],

"compress": "gzip",

"defaultFS": "hdfs://hadoop102:8020",

"fieldDelimiter": "\t",

"fileName": "base_province",

"fileType": "text",

"path": "/base_province",

"writeMode": "append"

}

}

}

],

"setting": {

"speed": {

"channel": 1

}

}

}

}

2)配置文件说明

(1)Reader参数说明

3)提交任务

(1)清空历史数据

[root@hadoop102 datax]$ hadoop fs -rm -r -f /base_province/*

(2)进入DataX根目录

[root@hadoop102 datax]$ cd /opt/module/datax

(3)执行如下命令

[root@hadoop102 datax]$ python bin/datax.py job/base_province.json

4)查看结果

(1)DataX打印日志

2021-10-13 11:13:14.930 [job-0] INFO  JobContainer -

任务启动时刻                    : 2021-10-13 11:13:03

任务结束时刻                    : 2021-10-13 11:13:14

任务总计耗时                    :                 11s

任务平均流量                    :               66B/s

记录写入速度                    :              3rec/s

读出记录总数                    :                  32

读写失败总数                    :                   0

(2)查看HDFS文件

[root@hadoop102 datax]$ hadoop fs -cat /base_province/* | zcat

3 山西 1 140000 CN-14 CN-SX

4 内蒙古 1 150000 CN-15 CN-NM

5 河北 1 130000 CN-13 CN-HE

6 上海 2 310000 CN-31 CN-SH

7 江苏 2 320000 CN-32 CN-JS

8 浙江 2 330000 CN-33 CN-ZJ

9 安徽 2 340000 CN-34 CN-AH

10 福建 2 350000 CN-35 CN-FJ

11 江西 2 360000 CN-36 CN-JX

12 山东 2 370000 CN-37 CN-SD

14 台湾 2 710000 CN-71 CN-TW

15 黑龙江 3 230000 CN-23 CN-HL

16 吉林 3 220000 CN-22 CN-JL

17 辽宁 3 210000 CN-21 CN-LN

18 陕西 7 610000 CN-61 CN-SN

19 甘肃 7 620000 CN-62 CN-GS

20 青海 7 630000 CN-63 CN-QH

21 宁夏 7 640000 CN-64 CN-NX

22 新疆 7 650000 CN-65 CN-XJ

23 河南 4 410000 CN-41 CN-HA

24 湖北 4 420000 CN-42 CN-HB

25 湖南 4 430000 CN-43 CN-HN

26 广东 5 440000 CN-44 CN-GD

27 广西 5 450000 CN-45 CN-GX

28 海南 5 460000 CN-46 CN-HI

29 香港 5 810000 CN-91 CN-HK

30 澳门 5 820000 CN-92 CN-MO

31 四川 6 510000 CN-51 CN-SC

32 贵州 6 520000 CN-52 CN-GZ

33 云南 6 530000 CN-53 CN-YN

13 重庆 6 500000 CN-50 CN-CQ

34 西藏 6 540000 CN-54 CN-XZ

(3)DataX传参

通常情况下,离线数据同步任务需要每日定时重复执行,故HDFS上的目标路径通常会包含一层日期,以对每日同步的数据加以区分,也就是说每日同步数据的目标路径不是固定不变的,因此DataX配置文件中HDFS Writer的path参数的值应该是动态的。为实现这一效果,就需要使用DataX传参的功能。

DataX传参的用法如下,在JSON配置文件中使用${param}引用参数,在提交任务时使用-p"-Dparam=value"传入参数值,具体示例如下。

1)编写配置文件

(1)修改配置文件base_province.json

[root@hadoop102 ~]$ vim /opt/module/datax/job/base_province.json

(2)配置文件内容如下

{

"job": {

"content": [

{

"reader": {

"name": "mysqlreader",

"parameter": {

"connection": [

{

"jdbcUrl": [

"jdbc:mysql://hadoop102:3306/gmall"

],

"querySql": [

"select id,name,region_id,area_code,iso_code,iso_3166_2 from base_province where id>=3"

]

}

],

"password": "000000",

"username": "root"

}

},

"writer": {

"name": "hdfswriter",

"parameter": {

"column": [

{

"name": "id",

"type": "bigint"

},

{

"name": "name",

"type": "string"

},

{

"name": "region_id",

"type": "string"

},

{

"name": "area_code",

"type": "string"

},

{

"name": "iso_code",

"type": "string"

},

{

"name": "iso_3166_2",

"type": "string"

}

],

"compress": "gzip",

"defaultFS": "hdfs://hadoop102:8020",

"fieldDelimiter": "\t",

"fileName": "base_province",

"fileType": "text",

"path": "/base_province/${dt}",

"writeMode": "append"

}

}

}

],

"setting": {

"speed": {

"channel": 1

}

}

}

}

2)提交任务

(1)创建目标路径

[root@hadoop102 datax]$ hadoop fs -mkdir /base_province/2020-06-14

(2)进入DataX根目录

[root@hadoop102 datax]$ cd /opt/module/datax

(3)执行如下命令

[root@hadoop102 datax]$ python bin/datax.py -p"-Ddt=2020-06-14" job/base_province.json

3)查看结果

[root@hadoop102 datax]$ hadoop fs -ls /base_province

Found 2 items

drwxr-xr-x - root supergroup 0 2021-10-15 21:41 /base_province/2020-06-14

3.同步HDFS数据到MySQL案例

案例要求:同步HDFS上的/base_province目录下的数据到MySQL gmall 数据库下的test_province表。

需求分析:要实现该功能,需选用HDFSReader和MySQLWriter。

(1)HDFSReader和MySQLWriter

1)编写配置文件

(1)创建配置文件test_province.json

[root@hadoop102 ~]$ vim /opt/module/datax/job/base_province.json

(2)配置文件内容如下

{

"job": {

"content": [

{

"reader": {

"name": "hdfsreader",

"parameter": {

"defaultFS": "hdfs://hadoop102:8020",

"path": "/base_province",

"column": [

"*"

],

"fileType": "text",

"compress": "gzip",

"encoding": "UTF-8",

"nullFormat": "\\N",

"fieldDelimiter": "\t",

}

},

"writer": {

"name": "mysqlwriter",

"parameter": {

"username": "root",

"password": "000000",

"connection": [

{

"table": [

"test_province"

],

"jdbcUrl": "jdbc:mysql://hadoop102:3306/gmall?useUnicode=true&characterEncoding=utf-8"

}

],

"column": [

"id",

"name",

"region_id",

"area_code",

"iso_code",

"iso_3166_2"

],

"writeMode": "replace"

}

}

}

],

"setting": {

"speed": {

"channel": 1

}

}

}

}

2)配置文件说明

(1)Reader参数说明

(2)Writer参数说明

3)提交任务

(1)在MySQL中创建gmall.test_province表

DROP TABLE IF EXISTS `test_province`;

CREATE TABLE `test_province`  (

`id` bigint(20) NOT NULL,

`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

`region_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

`area_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

`iso_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

`iso_3166_2` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

(2)进入DataX根目录

[root@hadoop102 datax]$ cd /opt/module/datax

(3)执行如下命令

[root@hadoop102 datax]$ python bin/datax.py job/test_province.json

4)查看结果

(1)DataX打印日志

2021-10-13 15:21:35.006 [job-0] INFO  JobContainer -

任务启动时刻                    : 2021-10-13 15:21:23

任务结束时刻                    : 2021-10-13 15:21:35

任务总计耗时                    :                 11s

任务平均流量                    :               70B/s

记录写入速度                    :              3rec/s

读出记录总数                    :                  34

读写失败总数                    :                   0

(2)查看MySQL目标表数据

五、DataX优化

1.速度控制

DataX3.0提供了包括通道(并发)、记录流、字节流三种流控模式,可以随意控制你的作业速度,让你的作业在数据库可以承受的范围内达到最佳的同步速度。

关键优化参数如下:

注意事项:

1.若配置了总record限速,则必须配置单个channel的record限速

2.若配置了总byte限速,则必须配置单个channe的byte限速

3.若配置了总record限速和总byte限速,channel并发数参数就会失效。因为配置了总record限速和总byte限速之后,实际channel并发数是通过计算得到的:

计算公式为:

min(总byte限速/单个channel的byte限速,总record限速/单个channel的record限速)

配置示例:

{

"core": {

"transport": {

"channel": {

"speed": {

"byte": 1048576 //单个channel byte限速1M/s

}

}

}

},

"job": {

"setting": {

"speed": {

"byte" : 5242880 //总byte限速5M/s

}

},

...

}

}

2.内存调整

当提升DataX Job内Channel并发数时,内存的占用会显著增加,因为DataX作为数据交换通道,在内存中会缓存较多的数据。例如Channel中会有一个Buffer,作为临时的数据交换的缓冲区,而在部分Reader和Writer的中,也会存在一些Buffer,为了防止OOM等错误,需调大JVM的堆内存。

建议将内存设置为4G或者8G,这个也可以根据实际情况来调整。

调整JVM xms xmx参数的两种方式:一种是直接更改datax.py脚本;另一种是在启动的时候,加上对应的参数,如下:

python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" /path/to/your/job.json

大数据技术之DataX的更多相关文章

  1. 除Hadoop大数据技术外,还需了解的九大技术

    除Hadoop外的9个大数据技术: 1.Apache Flink 2.Apache Samza 3.Google Cloud Data Flow 4.StreamSets 5.Tensor Flow ...

  2. 参加2013中国大数据技术大会(BDTC2013)

    2013年12月5日-6日参加了为期两天的2013中国大数据技术大会(Big Data Technology Conference, BDTC2013),本期会议主题是:“应用驱动的架构与技术 ”.大 ...

  3. 大数据技术人年度盛事! BDTC 2016将于12月8-10日在京举行

    2016年12月8日-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所和CSDN共同协办的2016中国大数据技术大会(Big Data Technology ...

  4. 大数据技术 vs 数据库一体机[转]

    http://blog.sina.com.cn/s/blog_7ca5799101013dtb.html 目前,虽然大数据与数据库一体机都很火热,但相当一部分人却无法对深入了解这两者的本质区别.这里便 ...

  5. 超人学院Hadoop大数据技术资源分享

    超人学院Hadoop大数据技术资源分享 http://bbs.superwu.cn/forum.php?mod=viewthread&tid=807&fromuid=645 很多其它精 ...

  6. 2016中国大数据技术大会( BDTC ) 共商大数据时代发展之计

    中国大数据技术大会(BDTC)的前身是Hadoop中国云计算大会(HadoopinChina,HiC).从2008年仅60余人参加的技术沙龙发展到当下数千人的技术盛宴,目前已成为国内最具影响力.规模最 ...

  7. WOT2016大数据技术峰会——千人技术盛宴

    WOT2016大数据技术峰会是一场聚焦大数据领域最前沿的的技术及经验分享.2016年11月25-26日北京粤财JW万豪酒店如约而至,会议规模达到1000人! 由51CTO主办的千人技术盛宴--WOT2 ...

  8. 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)

    [摘要] 知乎上一篇很不错的科普文章,介绍大数据技术生态圈(Hadoop.Hive.Spark )的关系. 链接地址:https://www.zhihu.com/question/27974418 [ ...

  9. 从大数据技术变迁猜一猜AI人工智能的发展

    目前大数据已经成为了各家互联网公司的核心资产和竞争力了,其实不仅是互联网公司,包括传统企业也拥有大量的数据,也想把这些数据发挥出作用.在这种环境下,大数据技术的重要性和火爆程度相信没有人去怀疑. 而A ...

  10. 大数据技术 - MapReduce的Combiner介绍

    本章来简单介绍下 Hadoop MapReduce 中的 Combiner.Combiner 是为了聚合数据而出现的,那为什么要聚合数据呢?因为我们知道 Shuffle 过程是消耗网络IO 和 磁盘I ...

随机推荐

  1. spring启动流程 (2) Bean实例化流程

    本文通过阅读Spring源码,分析Bean实例化流程. Bean实例化入口 上一篇文章已经介绍,Bean实例化入口在AbstractApplicationContext类的finishBeanFact ...

  2. 怎样实现WPF Prism Module的国际化和本地化?

    怎样实现WPF Prism Module的国际化和本地化? English | 简体中文 上一篇有简单介绍主工程的国际化,使用的资源字典(XAML)实现的. 这几天我添加了几个Prism模块(Modu ...

  3. [转帖]JVM性能提升50%,聊一聊背后的秘密武器Alibaba Dragonwell

    https://zhuanlan.zhihu.com/p/453437019 今年四月五日,阿里云开放了新一代ECS实例的邀测[1],Alibaba Dragonwell也在新ECS上进行了极致的优化 ...

  4. [转帖]jmeter SSL证书相关配置

    在实际工作中,我们大多数接口都是用的HTTPS来保证安全,使用jmeter测试HTTPS请求是如何配置证书呢? 1.最简单的方法,在选项里选择SSL管理器,然后选择相应的证书即可 在弹出的选择框选择证 ...

  5. [转帖]Jmeter_jmeter-plugins插件的安装使用

    一.安装JMter Plugins 1.官网下载 JMeter Plugins 的jar包 2. 将下载的jar包复制到 %JMETER_HOME%\lib\ext 目录下 3. 启动 JMeter ...

  6. 周末拾遗 xsos 的学习与使用

    周末拾遗 xsos 的学习与使用 摘要 周末陪儿子上跆拳道课. 自己一个人傻乎乎的开着笔记本想着学习点东西. 上午看到了一个sosreport的工具. 本来想学习一下. 发现xsos 应该是更好的一个 ...

  7. Oracle存储过程的基本学习

    Oracle存储过程的基本学习 摘要 这个简要学习应该会分为上下两部分 第一部分是存储过程的学习. 第二部分是python的学习. 核心目标是查询Oracle数据库中的主键数据. 如果有主键upper ...

  8. [转帖]NGINX 局限太多,Cloudflare 最终放弃它并用 Rust 自研了全新替代品

    https://www.infoq.cn/news/s2fa603MsEENsCmibTYI 长期以来,NGINX 可以说是网站安全和托管服务提供商 Cloudflare 的核心,是其所使用的基础软件 ...

  9. [转帖]接口偶尔超时,竟又是JVM停顿的锅!

    https://www.cnblogs.com/codelogs/p/16391159.html 简介# 继上次我们JVM停顿十几秒的问题解决后,我们系统终于稳定了,再也不会无故重启了!这是之前的文章 ...

  10. CentOS上面阿里源的设置过程

    1. 移除已经有的yum仓库 #原因: 公司内部部分境外网站不能访问,会提示异常. rm -rf /etc/yum.repos.d/* 2. 使用阿里源进行处理. #主要有两个, 一个是base的一个 ...