使用Lua脚本可以实现更复杂的数据处理逻辑,go-mysql-transfer支持Lua5.1语法
# **示例**
t_user表,数据如下:
![](https://img.kancloud.cn/b7/ae/b7aea55df3a0d071d67a930b1f497314_589x141.png)
## **示例一**
Lua脚本:
```
-- t_user_mongo.lua
local ops = require("mongodbOps") --加载mongodb操作模块
local row = ops.rawRow() --当前数据库的一行数据,table类型
local action = ops.rawAction() --当前数据库事件,包括:insert、update、delete
local result = {} -- 定义一个table
for k, v in pairs(row) do
if k ~="ID" then -- 列名不为ID
result[k] = v
end
end
local id = row["ID"] --获取ID列的值
result["_id"] = id -- _id为MongoDB的主键标识
if action == "insert" then -- 新增事件
ops.INSERT("t_user",result) -- 新增,第一个参数为collection名称,string类型;第二个参数为要修改的数据,talbe类型
elseif action == "delete" then -- 删除事件 -- 修改事件
ops.DELETE("t_user",id) -- 删除,第一个参数为collection名称(string类型),第二个参数为ID
else -- 修改事件
ops.UPDATE("t_user",id,result) -- 修改,第一个参数为collection名称,string类型;第二个参数为ID;第三个参数为要修改的数据,talbe类型
-- ops.UPSERT("t_user",id,result) -- 修改或新增,第一个参数为collection名称,string类型;第二个参数为ID;第三个参数为要修改的数据,talbe类型
end
```
引入Lua脚本:
```
rule:
-
schema: eseap #数据库名称
table: t_user #表名称
lua_file_path: lua/t_user_mongo.lua #lua脚本文件
mongodb_database: transfer #mongodb database不能为空
```
同步到MongoDB的数据如下:
![](https://img.kancloud.cn/05/44/05441447cbbc3d00e0c7c3ac62de2cbc_497x142.png)
## **示例二**
Lua脚本:
```
-- t_user_mongo2.lua
local ops = require("mongodbOps") --加载mongodb操作模块
local row = ops.rawRow() --当前数据库的一行数据,table类型
local action = ops.rawAction() --当前数据库事件,包括:insert、update、delete
local id = row["ID"] --获取ID列的值
local userName = row["USER_NAME"] --获取USER_NAME列的值
local password = row["PASSWORD"] --获取USER_NAME列的值
local createTime = row["CREATE_TIME"] --获取CREATE_TIME列的值
local result = {} -- 定义一个table
result["_id"] = id -- _id为MongoDB的主键标识
result["account"] = userName
result["password"] = password
result["createTime"] = createTime
result["source"] = "binlog" -- 数据来源
if action == "insert" then -- 只监听insert事件
ops.INSERT("t_user",result) -- 新增,第一个参数为collection名称,string类型;第二个参数为要修改的数据,talbe类型
end
```
引入Lua脚本:
```
rule:
-
schema: eseap #数据库名称
table: t_user #表名称
lua_file_path: lua/t_user_mongo2.lua #lua脚本文件
mongodb_database: transfer #mongodb database不能为空
```
同步到MongoDB的数据如下:
![](https://img.kancloud.cn/ab/b1/abb1d666a66fa498d7500a5b7f3d9161_540x145.png)
# **mongodbOps模块**
提供的方法如下:
1. INSERT: 插入操作,如:ops.INSERT(collection,result)。参数collection为集合名称,字符串类型;参数result为要插入的数据,table类型
2. UPDATE: 修改操作,如:ops.UPDATE(collection,id,result)。参数collection为集合名称,字符串类型;参数id为要修改的数据主键,类型不限;参数result为要修改的数据,table类型
3. DELETE: 删除操作,如:ops.DELETE(collection,id)。参数collection为集合名称,字符串类型;参数id为要修改的数据主键,类型不限;
4. UPSERT: 修改或插入操作,如:ops.UPSERT(collection,id,result)。参数collection为集合名称,字符串类型;参数id为要修改的数据主键,类型不限;参数result为要修改的数据,table类型;如果集合中有数据则修改,否则新增
- 简介
- 部署运行
- 高可用集群
- 同步数据到Redis
- Redis配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到MongoDB
- MongoDB配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到RocketMQ
- RocketMQ配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到Kafka
- Kafka配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到RabbitMQ
- RabbitMQ配置
- 基于规则同步
- 基于Lua脚本同步
- 同步数据到Elasticsearch
- Elasticsearch配置
- 基于规则同步
- 基于Lua脚本同步
- 全量数据导入
- Lua脚本
- 基础模块
- Json模块
- HttpClient模块
- DBClient模块
- 监控
- 性能测试
- 常见问题
- 更新记录开发计划