数据传输 | 利用 DTLE 将 MySQL 数据同步到 DBLE

MySQL的块数据操作 主要内容: 分享一篇mysql数据库操作视频解析: MySQL的块数据操作 本次分享将介绍目前数据迁移、数据同步、数据消费,多IDC架构中数据复制技术所面临问题及现有的产品和方案,并分享新开源的能在异构数据存储之间提供高性能和强大复制功能的DTLE相关技术内容。 更多c/c++ Linux服务器高阶知识、电子书籍、视频等等可以点击链接加入群聊【linux后台服务架构交流】 知识点有C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,Mong 阅读详情

作者:任仲禹

爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


背景

源于某客户的需求,存在线上某业务 MySQL 库因为数据量及业务读写压力较大,需要将业务数据迁移到 DBLE 分布式数据库,但同时因为业务为 7x24h,能够停机的时间窗口较短,所以需要考虑数据实时同步的方案。

过往 DBLE 的业务上线基本为全新部署,数据实时同步的情况极少实施,去年 DTLE 发布后这一问题得到了些改善,今天我们来实践下。

环境准备

1. 目标端 DBLE 集群部署
  • 安装 DBLE 软件、后端分片 MySQL 库过程略

    • DBLE 版本 3.20.10.8、MySQL版本 5.7.25
  • sharding.xml

  <?xml version="1.0"?>
  <!DOCTYPE dble:sharding SYSTEM "sharding.dtd">
  <dble:sharding xmlns:dble="http://dble.cloud/" version="4.0">
      <schema name="dtle" sqlMaxLimit="-1" shardingNode="dn_01">
          <singleTable name="gtid_executed_v4" shardingNode="dn_01" sqlMaxLimit="-1"></singleTable>
      </schema>
      <schema name="ren" sqlMaxLimit="-1" shardingNode="dn_01">
          <shardingTable name="test" shardingNode="dn_01,dn_02,dn_03,dn_04" sqlMaxLimit="-1" shardingColumn="id" function="func_jumphash"></shardingTable>
      </schema>
      <shardingNode name="dn_03" dbGroup="dh-mysql-cluster02" database="dh_dn_03"></shardingNode>
      <shardingNode name="dn_04" dbGroup="dh-mysql-cluster02" database="dh_dn_04"></shardingNode>
      <shardingNode name="dn_02" dbGroup="dh-mysql-cluster01" database="dh_dn_02"></shardingNode>
      <shardingNode name="dn_01" dbGroup="dh-mysql-cluster01" database="dh_dn_01"></shardingNode>
      <function name="func_jumphash" class="jumpStringHash">
          <property name="partitionCount">4</property>
          <property name="hashSlice">0:-1</property>
      </function>
  </dble:sharding>
  • db.xml
  <?xml version="1.0"?>
  <!DOCTYPE dble:db SYSTEM "db.dtd">
  <dble:db xmlns:dble="http://dble.cloud/" version="4.0">
      <dbGroup name="dh-mysql-cluster02" rwSplitMode="0" delayThreshold="-1">
          <heartbeat timeout="0" errorRetryCount="0">show slave status</heartbeat>
          <dbInstance name="10.186.61.13-3326-dh-1" url="10.186.61.13:3326" user="dbleuser" password="jpfmxIeMt1vxAJ6zd6Q10PGRRi+Qj023Dl+YXuOr3C4VXTdV5+GJaOIv5iVmWCwpXcucn/zi02HVlT7ADX+m6Q==" maxCon="100" minCon="10" primary="true" readWeight="0" id="mysql-i63009" usingDecrypt="true"></dbInstance>
      </dbGroup>
      <dbGroup name="dh-mysql-cluster01" rwSplitMode="0" delayThreshold="-1">
          <heartbeat timeout="0" errorRetryCount="0">show slave status</heartbeat>
          <dbInstance name="10.186.61.11-3316-dh-1" url="10.186.61.11:3316" user="dbleuser" password="QQWRF80AGNbx4jIAx/b2Ww7Myol1+ntlyzGmA1A3PXVISmRD/i5pgRnLLwYsXoLmH0jiv1qZAkqIBHv6Yg/XAg==" maxCon="100" minCon="10" primary="true" readWeight="0" id="mysql-47vn84" usingDecrypt="true"></dbInstance>
      </dbGroup>
  </dble:db>
  • user.xml
  <?xml version="1.0"?>
  <!DOCTYPE dble:user SYSTEM "user.dtd">
  <dble:user xmlns:dble="http://dble.cloud/" version="4.0">
      <managerUser name="root" password="CrjpLhvVJkHk0EPW35Y07dUeTimf52zMqClYQkIAN3/dqiG1DVUe9Zr4JLh8Kl+1KH1zd7YTKu5w04QgdyQeDw==" usingDecrypt="true"></managerUser>
      <shardingUser name="ren" schemas="ren,dtle" password="P+C2KazQiS3ZZ6uojBJ91MZIqYqGczspQ/ebyBZOC9xKAAkAFrqEDC9OPn/vObAyO4P8Zu3vHQJ+rljM040Kdg==" usingDecrypt="true" readOnly="false" maxCon="0" blacklist="default_black_list"></shardingUser>
  </dble:user>
2. 源端和目标端测试表创建
  • 源端 MySQL 数据库软件安装略

  • 源端MySQL与目标端DBLE都需要创建测试表名:test

  use ren;
  CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,
    `city` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,
    `dt` datetime DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_ctiy` (`city`)
  ) ENGINE=InnoDB;
3. 部署单节点DTLE
  • DTLE社区版本GitHub下载地址:https://github.com/actiontech/dtle/

  • 下载完成后直接rpm安装(本示例使用内部QA验证版本)

    • rpm -ivh --prefix=/data/dtle dtle-ee-9.9.9.9.x86_64.rpm
  • 安装完成确认启动正常

  # curl -XGET "127.0.0.1:4646/v1/nodes" -s | jq
  [
    {
      "Address": "127.0.0.1",
      "ID": "223c31b4-05cd-a763-b3e7-dbea6d416576",
      "Datacenter": "dc1",
      "Name": "nomad0",
      "NodeClass": "",
      "Version": "1.1.2",
      "Drain": false,
      "SchedulingEligibility": "eligible",
      "Status": "ready",
      "StatusDescription": "",
      "Drivers": {
        "dtle": {
          "Attributes": {
            "driver.dtle.full_version": "9.9.9.9-master-a65ee13",
            "driver.dtle": "true",
            "driver.dtle.version": "9.9.9.9"
          },
          "Detected": true,
          "Healthy": true,     
          "HealthDescription": "Healthy",
          "UpdateTime": "2022-02-28T07:45:15.650289984Z"
  ·········
  ]

创建 MySQL-To-DBLE 任务

一、全量同步
1. 准备job文件
# cat job.json
{
  "Job": {
    "ID": "mysqlToDBLE",
    "Datacenters": ["dc1"],
    "TaskGroups": [{
        "Name": "src",
        "Tasks": [{
          "Name": "src",
          "Driver": "dtle",
          "Config": {
            "Gtid": "",
            "ReplicateDoDb": [{
              "TableSchema": "ren",
              "Tables": [{
                "TableName": "test"
              }]
            }],
            "ConnectionConfig": {
              "Host": "10.186.61.11",
              "Port": 3306,
              "User": "root",
              "Password": "root"
            }
          }
        }]
      }, {
        "Name": "dest",
        "Tasks": [{
          "Name": "dest",
          "Driver": "dtle",
          "Config": {
            "ConnectionConfig": {
              "Host": "10.186.61.10",
              "Port": 8066,
              "User": "ren",
              "Password": "ren"
            }
          }
        }]
    }]
  }
}
2. 准备全量复制数据
  • 源端 MySQL库执行
mysql> insert into test values(1,'ren','sh',now());
mysql> insert into test values(2,'jack','bj',now());
mysql> insert into test values(3,'tom','sz',now());
3. 启动同步任务
# curl -XPOST "http://127.0.0.1:4646/v1/jobs" -d @job.json -s| jq
{
  "EvalID": "88ab4a42-98b7-696e-0f98-08c1fe3ee4bd",
  "EvalCreateIndex": 12310,
  "JobModifyIndex": 12310,
  "Warnings": "",
  "Index": 12310,
  "LastContact": 0,
  "KnownLeader": false
}
4. 检查同步情况
  • 确认全量数据同步完成
# 目标端 DBLE 中执行
mysql> use ren;
Database changed
mysql> show tables;
+------------------+
| Tables_in_ren    |
+------------------+
| test             |
| gtid_executed_v4 |
+------------------+
2 rows in set (0.01 sec)

mysql> select * from test;
+----+------+------+---------------------+
| id | name | city | dt                  |
+----+------+------+---------------------+
|  1 | ren  | sh   | 2022-03-07 06:53:30 |
|  2 | jack | bj   | 2022-03-07 06:53:41 |
|  3 | tom  | sz   | 2022-03-07 06:53:59 |
+----+------+------+---------------------+
3 rows in set (0.01 sec)

# 源端 MySQL 写入增量测试数据
mysql> insert into test select null,'mike','nj',now();
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0
········
mysql> insert into test select null,'mike4','nj',now();
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> update test set city = 'sh' where name like 'mike%';
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from test;
+----+-------+------+---------------------+
| id | name  | city | dt                  |
+----+-------+------+---------------------+
|  1 | ren   | sh   | 2022-03-07 06:53:30 |
|  2 | jack  | bj   | 2022-03-07 06:53:41 |
|  3 | tom   | sz   | 2022-03-07 06:53:59 |
| 45 | mike  | sh   | 2022-03-07 08:03:57 |
| 46 | mike2 | sh   | 2022-03-07 08:04:02 |
| 47 | mike3 | sh   | 2022-03-07 08:04:05 |
| 48 | mike4 | sh   | 2022-03-07 08:04:09 |
+----+-------+------+---------------------+
7 rows in set (0.01 sec)

# 目标端 DBLE 检查增量同步情况
mysql> select * from test;
+----+-------+------+---------------------+
| id | name  | city | dt                  |
+----+-------+------+---------------------+
|  1 | ren   | sh   | 2022-03-07 06:53:30 |
|  2 | jack  | bj   | 2022-03-07 06:53:41 |
|  3 | tom   | sz   | 2022-03-07 06:53:59 |
| 45 | mike  | sh   | 2022-03-07 08:03:57 |
| 46 | mike2 | sh   | 2022-03-07 08:04:02 |
| 47 | mike3 | sh   | 2022-03-07 08:04:05 |
| 48 | mike4 | sh   | 2022-03-07 08:04:09 |
+----+-------+------+---------------------+
7 rows in set (0.04 sec)

mysql> explain select * from test where id  = 1;
+---------------+----------+----------------------------------+
| SHARDING_NODE | TYPE     | SQL/REF                          |
+---------------+----------+----------------------------------+
| dn_01         | BASE SQL | select * from test where id  = 1 |
+---------------+----------+----------------------------------+
1 row in set (0.03 sec)
二、基于GTID位点增量同步
1. 销毁全量同步任务
# cd /data/dtle/usr/bin/
# ll
total 188836
-rwxr-xr-x 1 root root 107811060 Mar 17  2020 consul
-rwxr-xr-x 1 root root  85550512 Jun 22  2021 nomad
# ./nomad job status
ID                 Type     Priority  Status   Submit Date
mysqlToDBLE        service  50        running  2022-03-07T15:47:31+08:00
mysqltoMysql-sync  service  50        running  2022-03-03T16:06:10+08:00
# ./nomad job stop -purge mysqlToDBLE
·······
  ⠙ Deployment "433ed3d4" successful
·······
# ./nomad job status
ID                 Type     Priority  Status   Submit Date
mysqltoMysql-sync  service  50        running  2022-03-03T16:06:10+08:00
2. 记录源端GTID位点
# 记录源端 MySQL 需要开始的GTID位点
mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000178
········
Executed_Gtid_Set: 442dbe92-00c3-11ec-a0cf-02000aba3d0b:1-49705119,
cdc6fb62-00c2-11ec-a259-02000aba3d0a:1-3555
1 row in set (0.01 sec)
# 插入增量数据(模拟业务新增数据)
mysql> insert into test select 88,'sync01','wh',now();
mysql> insert into test select 99,'sync02','wh',now();
# 源端 MySQL 确认数据已插入
mysql> select * from test;
+----+--------+------+---------------------+
| id | name   | city | dt                  |
+----+--------+------+---------------------+
|  1 | ren    | sh   | 2022-03-07 06:53:30 |
········
| 48 | mike4  | sh   | 2022-03-07 08:04:09 |
| 88 | sync01 | wh   | 2022-03-07 08:24:20 |
| 99 | sync02 | wh   | 2022-03-07 08:24:31 |
+----+--------+------+---------------------+
9 rows in set (0.00 sec)
# 目标端 DBLE 数据因同步job已销毁,新插入数据未同步过来
mysql> select * from test;
+----+-------+------+---------------------+
| id | name  | city | dt                  |
+----+-------+------+---------------------+
|  1 | ren   | sh   | 2022-03-07 06:53:30 |
········
| 48 | mike4 | sh   | 2022-03-07 08:04:09 |
+----+-------+------+---------------------+
7 rows in set (0.00 sec)
3. 准备增量同步job文件
# cat job.json
{
  "Job": {
    "ID": "mysqlToDBLE",
    "Datacenters": ["dc1"],
    "TaskGroups": [{
        "Name": "src",
        "Tasks": [{
          "Name": "src",
          "Driver": "dtle",
          "Config": {
            "Gtid": "442dbe92-00c3-11ec-a0cf-02000aba3d0b:1-49705119,cdc6fb62-00c2-11ec-a259-02000aba3d0a:1-3555",
            "ReplicateDoDb": [{
              "TableSchema": "ren",
              "Tables": [{
                "TableName": "test"
              }]
            }],
            "ConnectionConfig": {
              "Host": "10.186.61.11",
              "Port": 3306,
              "User": "root",
              "Password": "root"
            }
          }
        }]
      }, {
        "Name": "dest",
        "Tasks": [{
          "Name": "dest",
          "Driver": "dtle",
          "Config": {
            "ConnectionConfig": {
              "Host": "10.186.61.10",
              "Port": 8066,
              "User": "ren",
              "Password": "ren"
            }
          }
        }]
    }]
  }
}
4. 开始增量同步任务
# curl -XPOST "http://127.0.0.1:4646/v1/jobs" -d @job.json -s |jq
{
  "EvalID": "cad6fb19-62d3-67aa-6f5c-fbb79f8016d2",
  "EvalCreateIndex": 12855,
  "JobModifyIndex": 12855,
  "Warnings": "",
  "Index": 12855,
  "LastContact": 0,
  "KnownLeader": false
}
5. 检查同步情况
# 目标端 DBLE 中查看到 GTID 位点之后的数据已同步过来
mysql> select * from test;
+-----+--------+------+---------------------+
| id  | name   | city | dt                  |
+-----+--------+------+---------------------+
|   1 | ren    | sh   | 2022-03-07 06:53:30 |
|  48 | mike4  | sh   | 2022-03-07 08:04:09 |
·········
|  88 | sync01 | wh   | 2022-03-07 08:24:20 |
|  99 | sync02 | wh   | 2022-03-07 08:24:31 |
+-----+--------+------+---------------------+
11 rows in set (0.06 sec)
6. 其它DML及DDL同步
  • 验证下其它update、delete语句及DDL语句同步情况
# 源端 MySQL 执行操作
mysql> delete from test where id >= 100;
Query OK, 2 rows affected (0.01 sec)
mysql> delete from test where id > 3;
Query OK, 6 rows affected (0.01 sec)
mysql> update test set name = 'actionsky' where id = 3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 目标端 DBLE 检查同步情况
mysql> select * from test;
+----+-----------+------+---------------------+
| id | name      | city | dt                  |
+----+-----------+------+---------------------+
|  1 | ren       | sh   | 2022-03-07 06:53:30 |
|  2 | jack      | bj   | 2022-03-07 06:53:41 |
|  3 | actionsky | sz   | 2022-03-07 06:53:59 |
+----+-----------+------+---------------------+
3 rows in set (0.01 sec)

# 源端 MySQL 执行 DDL操作
mysql> alter table test add column info varchar(20) default 'hello';
mysql> update test set info = 'thanks' where id = 3;
mysql> alter table test add index idx_info(`info`);

# 目标端 DBLE 可以进行DDL同步(篇幅所限,实际上DBLE兼容的DDL语句都能同步成功)
mysql> select * from test;
+----+-----------+------+---------------------+--------+
| id | name      | city | dt                  | info   |
+----+-----------+------+---------------------+--------+
|  1 | ren       | sh   | 2022-03-07 06:53:30 | hello  |
|  2 | jack      | bj   | 2022-03-07 06:53:41 | hello  |
|  3 | actionsky | sz   | 2022-03-07 06:53:59 | thanks |
+----+-----------+------+---------------------+--------+
3 rows in set (0.02 sec)

mysql> show create table test\G
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,
  `city` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,
  `dt` datetime DEFAULT CURRENT_TIMESTAMP,
  `info` varchar(20) COLLATE utf8mb4_bin DEFAULT 'hello',
  PRIMARY KEY (`id`),
  KEY `idx_ctiy` (`city`),
  KEY `idx_info` (`info`)
) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
1 row in set (0.01 sec)

配置 MySQL-To-DBLE 注意事项

1. 检测连接失败问题
  • 问题描述:DTLE配置JOB过程中,“检测连接”失败,nomad日志报错ERROR 1064 (HY000): java.sql.SQLSyntaxErrorException: illegal value[TRUE]
  • 原因:DTLE下发的检测客户端语句set autocommit=true,在DBLE某些版本中不支持
  • 解决:升级DBLE到3.20.10.6版本及之后
2. 任务启动后同步失败报’dtle’不存在
  • 问题描述:DTLE同步任务启动后报错, nomad 日志出现Can’t create database ‘dtle’ that doesn’t exists.
  • 原因:
    • DTLE To MySQL ,不会出现该种报错
    • DTLE To DBLE ,由于DBLE中间件中schema的创建方式与普通MySQL不一致,所以该create语法不支持
  • 解决:
    • 需要对DBLE进行额外的 Schema/Table 配置,参考前文 sharding.xml 和 user.xml中相关配置
3. 任务启动后同步失败报’Data too long’
  • 问题描述:DTLE同步任务启动后报错,nomad日志出现“applier error/restart: insert gno: Error 1406: Data too long for column ‘source_uuid’ at row 1”
  • 原因:
    • DTLE在DBLE中创建的表gtid_executed_v4 中,字段source_uuid的Binary数据类型长度不够
    • 也可通过排查DBLE中间件日志(core/log/dble.log),报错信息为“execute sql err : errNo:1406 Data too long for column ‘source_uuid’ at row 1”
  • 解决:
    • DBLE中,修改字段
    • alter table gtid_executed_v4 modify column source_uuid binary(60);

结论

  • DTLE 目前功能基本可以满足 MySQL -> DBLE 间数据实施同步需求,不过需要注意的是,不建议采用本文所提到的 全量同步 方式
    • 生产环境实施由于 MySQL 老库数据量较大,可以先将数据全量逻辑备份出来(需记录GTID位点),再通过 DBLE 自带的 split 工具进行拆分后进行导入,然后再使用 DTLE 基于GTID位点增量同步 的方式进行数据同步
  • DTLE 创建 To-DBLE 任务前需要关注下前文所示注意事项,尤其是提前准备好 sharding.xml、user.xml文件并创建好 DTLE的元数据表gtid_executed_v4。
dtle:MySQL的分布式数据传输服务 dtle(Data-Transformation-le) 什么是干粉 dtle是MySQL数据传输/复制工具。 压缩碎片可以压缩传输中的数据,从而节省了成本。 双向数据同步数据块可以双向同步数据,这使得Master-Master MySQL体系结构 云杂点之间的复制可以在云RDS之间复制数据 分布式部署点作为分布式服务,可提供高可用性和可伸缩性 文献资料 英语(即将推出) 贡献 我们欢迎您的贡献,也非常感谢。 有关提交补丁和贡献工作流程的详细信息,请参见。 社区 QQ群:852990221 在微信上订阅“ Actiontech开源社区”以获取有关dtle的更多信息: 联系我们 dtle有 立即下载

相关推荐

数据库原理(萨师煊)课件

这里包含了数据库概述,关系数据库模型,关系数据库语言SQL,数据库设计,关系规范化理论,数据库保护的内容,挺详细的需要可下看看

数据传输 | dtle 使用初探

作者:马莹乐 爱可生研发团队成员,负责 mysql 中间件和数据库管理平台的测试。擅长找茬(测试技术爱好者),欢迎大家试用 dtle~ 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 dtle 是一款爱可生 MySQL 开源数据传输中间件,此文简要介绍初步使用方法。 项目地址:https://github.com/actiontec...

ActionTech的博客 2830

Isaacgym使用操作指南

Isaac Gym 是一个强大的仿真工具,特别适合那些需要进行大规模并行仿真和训练的机器人和强化学习任务。通过 GPU 加速、深度学习集成和丰富的物理仿真能力,Isaac Gym 能够显著提高仿真和训练效率,是机器人学和 AI 研究中的一大利器。

Tony Wey的博客 1万+

跨机房数据双向同步工具之DTLE(更新中)

一、环境说明 2节点DTLE: test_node1:192.168.222.76 角色:server+client test_node2:192.168.222.77 角色:client 二、安装 准备安装包: https://github.com/actiontech/dtle/releases rpm -ivhdtle-3.20.08.0.x86_64.rpm 三、配置 配置文件位于:/etc/dtle/consul.hcl、/etc/dtle/nomad.hcl ...

leonpenn的博客 *你本如虎,正当添翼* 1382

微信图片.dat文件解密实战:用Python一键转PNG(附完整代码)

本文详细介绍了如何通过Python解密微信图片.dat文件并转换为PNG格式的完整教程。文章深入解析了微信.dat文件的异或加密原理,提供了自动检测密钥的Python脚本,并分享了批量解密和性能优化的实用技巧,帮助用户轻松恢复和整理微信聊天图片。

weixin_29096377的博客 464

麒麟银河操作系统V10部署ffmpeg(也能用于Linux系统)

部署ffmpeg用来处理视频的各种操作,如编码解码,格式转换,剪辑,处理实时视频流,音频流,加滤镜等

zhouwenxing666的博客 9035

数据传输 | DTLE 如何配置故障转移域

作者:刘安 爱可生测试团队成员,主要负责 DTLE 开源项目相关测试任务,擅长 Python 自动化测试开发。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 背景: 最近接到一个工单:DTLE client 被部署在两个机房,其中只有 DTLE clinst 可以相互访问,所以希望故障转移时能在对应机房内切换。 网络结构如下图: 通过分析网络结构可知: DTLE client 只能访问本地机房的 MySQL 如果发生故障转移,只能调度到本地机房.

ActionTech的博客 447

神经网络基础概念总结(小白入门自用)

神经网络人工神经网络多层感知机激活函数反向传播算法损失函数权值初始化正则化方法 人工神经网络 人工神经元:人工神经元是人工神经网络的基本单元。模拟生物神经元,人工神经元有1个或者多个输入(模拟多个树突或者多个神经元向该神经元传递神经冲动);对输入进行加权求和(模拟细胞体将神经信号进行积累和树突强度不同);对输入之和使用激活函数计算活性值(模拟细胞体产生兴奋或者抑制);输出活性值并传递到下一个人工神经元(模拟生物神经元通过轴突将神经冲动输入到下一个神经元)。 人工神经网络:大量的人工神经元以某种链接方式得来的

qq_42011158的博客 648

WebDNN高级技巧:10个提升模型推理速度的优化策略

WebDNN作为浏览器中最快的深度学习模型运行框架,支持直接加载ONNX模型并通过多种后端优化实现高效推理。本文将分享10个经过验证的高级优化策略,帮助开发者充分发挥WebDNN的性能潜力,显著提升模型在浏览器环境中的运行速度。 ## 1. 选择最优后端架构 WebDNN提供多后端支持,需根据目标设备特性选择最佳执行环境: - **WebGPU**:支持最新GPU特性的设备优先选择,通过[sr

gitblog_00347的博客 521

Xilinx FPGA平台GTX简易使用教程(汇总篇)

Xilinx平台GTX简易使用教程,先“知其然”,慢慢再研究“所以然”。

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 3万+

构建一个基于Simulink的LC滤波器仿真模型

需求分析LC滤波器(Inductor-Capacitor Filter)是一种常见的无源滤波器,广泛应用于电力电子、通信、音频处理等领域。其主要作用是平滑输入信号中的高频谐波成分,保留低频或直流成分,从而提高输出信号的质量。在电力电子系统中,LC滤波器常用于逆变器、整流器等设备的输出端,以减少开关噪声和电磁干扰(EMI),确保输出电压和电流的稳定性。本项目将基于Simulink平台,开发一个完整的LC滤波器仿真模型,涵盖从电源输入到滤波输出的整个过程,并通过PI控制器实现对滤波效果的闭环控制。

MHD0815的博客 740

数据传输 | dtle 之库表重命名

作者:陈怡 爱可生南分团队 DBA,负责公司自动化运维平台维护和处理客户问题。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 前言 DTLE 是开源的数据传输组件,支持 MySQL 多种使用场景的数据传输。 可能会遇到这样的场景,将数据传输到目的端时,目的端的库名想要与源端的库名不一样。或者传输到目的端时,库名与源端的一样,但是想重命名表名与源端的不同。本文将简单介绍 DTLE 如何设置满足这样的场景。 安装部署 1、3.21.10.0 版本 rp.

ActionTech的博客 406

S7-1500 PLC与多台S7-200SMART PLC进行PROFINET通信的快捷方法

S7-1500 PLC与多台S7-200SMART PLC进行PROFINET通信的快捷方法

Robot_PLC_HMI_Automation 5686

mysql增量同步kafka_MySQL开源数据传输中间件DTLE架构设计实践-爱可生

大家好,我今天分享的主题是关于爱可生在前不久开源的数据传输中间件DTLE,也可简称为DTS。爱可生作为一家以MySQL为主的技术服务公司,在我们服务企业客户过程中,经常会遇到各种数据同步的需求,能做数据同步的软件很多,但未能找到满足我们所有需求的软件,所以我们决定自研一款数据传输软件,结合我们客户的需求场景做了DTLE,并选择在10月24号“程序员节”向社区开源。今天主要是对DTLE的一些技术架构...

weixin_42165980的博客 458

第229篇 轨迹时间参数化——TOPP-RA和速度约束处理

本文介绍了时间最优路径参数化(TOPP)问题及其解法。TOPP研究如何在给定空间路径上分配时间,使机器人运动时间最短且不超速,需满足速度、加速度和力矩约束。经典解法采用相平面法,通过前向和后向扫描确定最优速度曲线。TOPP-RA改进了数值稳定性,支持多约束处理。文章对比了TOPP与轨迹优化的区别,列举了开源工具,并解答了面试常见问题,指出TOPP广泛应用于机械臂、AGV等领域。TOPP不改变路径形状,仅优化速度分配,其最优解具有bang-bang特性。

郑伟强dev的专栏 320

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

mysql数据采集中间件_开源 | MySQL数据传输中间件—DTLE

目前,随着MySQL在各个行业的深入使用,在不同数据系统、不同数据中心、不同业务系统之间进行数据传输、数据订阅、形成数据总线等需求逐渐增多。爱可生推出的DTLE是一个针对MySQL的使用特点、支持多种使用场景的数据传输中间件。DTLE是什么?DTLE是一个开源的数据传输中间件,其针对的核心场景如下:· 跨数据中心的数据传输:DTLE能在数据中心间进行可靠数据传输,并提供链路压缩以降低传输成本· 云...

weixin_34377666的博客 475

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

爱可⽣开源MySQL数据传输中间件—DTLE

  2018年10⽉24⽇,企业级数据处理技术整体解决方案提供商上海爱可⽣信息技术股份有限公司正式开源其 MySQL 数据传输中间件DTLE。   DTLE: http://dtle.cloud https://github.com/actiontech/dtle 对应文档地址: https://actiontech.github.io/dtle-docs-cn/ DTLE ...

ActionTech的博客 853

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

mysql数据库开源中间件_开源 | MySQL数据传输中间件—DTLE

目前,随着MySQL在各个行业的深入使用,在不同数据系统、不同数据中心、不同业务系统之间进行数据传输、数据订阅、形成数据总线等需求逐渐增多。爱可生推出的DTLE是一个针对MySQL的使用特点、支持多种使用场景的数据传输中间件。DTLE是什么?DTLE是一个开源的数据传输中间件,其针对的核心场景如下:· 跨数据中心的数据传输:DTLE能在数据中心间进行可靠数据传输,并提供链路压缩以降低传输成本· 云...

weixin_39821605的博客 157

开源MySQL数据传输中间件—DTLE

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34168700的博客 362

mysql开源的数据库中间件_开源 | MySQL数据传输中间件—DTLE

目前,随着MySQL在各个行业的深入使用,在不同数据系统、不同数据中心、不同业务系统之间进行数据传输、数据订阅、形成数据总线等需求逐渐增多。爱可生推出的DTLE是一个针对MySQL的使用特点、支持多种使用场景的数据传输中间件。DTLE是什么?DTLE是一个开源的数据传输中间件,其针对的核心场景如下:· 跨数据中心的数据传输:DTLE能在数据中心间进行可靠数据传输,并提供链路压缩以降低传输成本· 云...

weixin_39889487的博客 219

开源 | MySQL数据传输中间件—DTLE

目前,随着MySQL在各个行业的深入使用,在不同数据系统、不同数据中心、不同业务系统之间进行数据传输、数据订阅、形成数据总线等需求逐渐增多。爱可生推出的DTLE是一个针对MySQL的使用特点、支持多种使用场景的数据传输中间件。 DTLE:http://dtle.cloudhttps://github.com/actiontech...对应...

weixin_33948416的博客 256

爱可生MySQL开源数据传输中间件DTLE首次技术分享

10月27日,上海爱可生信息技术股份有限公司赞助的「3306π」技术 Meetup - 武汉站成功举办,爱可生技术服务总监洪斌分享了《MySQL 开源数据传输中间件架构设计实践》的主题演讲,并对爱可生10月24日最新开源项目 DTLE 相关技术细节进行了详细讲解。   DTLE: http://dtle.cloud https://github.com/actiontech/dtle ...

ActionTech的博客 9866

dataguard日志传输模式解析_MySQL开源数据传输中间件架构设计实践

主要内容:本次分享将介绍目前数据迁移、数据同步、数据消费,多IDC架构中数据复制技术所面临问题及现有的产品和方案,并分享新开源的能在异构数据存储之间提供高性能和强大复制功能的DTLE相关技术内容。更多c/c++ Linux服务器高阶知识、电子书籍、视频等等请后台私信【架构】获取知识点有C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,Mon...

weixin_39970689的博客 162

重磅预告 | 今晚直播:MyCat的坑如何在分布式中间件DBLE上改善

上周,DBLE团队历时3个月准备的开源MySQL分布式中间件DBLE系列公开课发布了,为使社区同学能够更好的评估课程内容、质量以及对DBLE有更清晰深入的认知,我们联合IT168将在第二节课程发布前开放一期直播,跟大家聊聊DBLE与MyCat错综复杂的故事。 直播时间:3月14日(今晚)20:00PM 分享嘉宾:DBLE项目负责人 蓝寅 分享主题:《MyCat的坑如何在分布式中间件DB...

ActionTech的博客 353

回顾 | 开源分布式中间件DBLE社区分享活动总结

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34014277的博客 125

MySQL开源数据传输中间件架构设计实践

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34029680的博客 135
上一篇: 第40期:MySQL 分区表案例分享
下一篇: 技术分享 | 聊聊 MySQL 关机的故事
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值