# 測試環境
平臺:虛擬機
CPU:E7-4890 4核8線程
內存:8G
硬盤:機械硬盤
OS:Windows Sever 2012 R2
MySQL: 5.5
Rides: 4.0.2
# 測試數據
t_user表,14個字段,1個字段包含中文,數據量527206條
# 測試配置
配置:
```
#maxprocs: 50 #并發協(線)程數量,默認為: CPU核數*2;一般情況下不需要設置此項
bulk_size: 1000 #每批處理數量,不寫默認100,可以根據帶寬、機器性能等調整;如果是全量數據初始化時redis建議設為1000,其他接收端酌情調大
```
規則:
```
schema: eseap
table: t_user
order_by_column: id #排序字段,全量數據初始化時不能為空
#column_lower_case:false #列名稱轉為小寫,默認為false
#column_upper_case:false#列名稱轉為大寫,默認為false
column_underscore_to_camel: true #列名稱下劃線轉駝峰,默認為false
# 包含的列,多值逗號分隔,如:id,name,age,area_id 為空時表示包含全部列
#include_column: ID,USER_NAME,PASSWORD
date_formatter: yyyy-MM-dd #date類型格式化, 不填寫默認yyyy-MM-dd
datetime_formatter: yyyy-MM-dd HH:mm:ss #datetime、timestamp類型格式化,不填寫默認yyyy-MM-dd HH:mm:ss
value_encoder: json #值編碼,支持json、kv-commas、v-commas
redis_structure: string # 數據類型。 支持string、hash、list、set類型(與redis的數據類型一直)
redis_key_prefix: USER_ #key的前綴
redis_key_column: ID #使用哪個列的值作為key,不填寫默認使用主鍵
```
腳本:
```
local json = require("json") -- 加載json模塊
local ops = require("redisOps") -- 加載redis操作模塊
local row = ops.rawRow() --當前變動的一行數據,table類型,key為列名稱
local action = ops.rawAction() --當前數據庫的操作事件,包括:insert、updare、delete
local id = row["ID"] --獲取ID列的值
local userName = row["USER_NAME"] --獲取USER_NAME列的值
local key = "user_"..id -- 定義key
if action == "delete" -- 刪除事件
then
ops.DEL(key) -- 刪除KEY
else
local password = row["PASSWORD"] --獲取USER_NAME列的值
local createTime = row["CREATE_TIME"] --獲取CREATE_TIME列的值
local result= {} -- 定義結果
result["id"] = id
result["userName"] = userName
result["password"] = password
result["createTime"] = createTime
result["source"] = "binlog" -- 數據來源
local val = json.encode(result) -- 將result轉為json
ops.SET(key,val) -- 對應Redis的SET命令,第一個參數為key(string類型),第二個參數為value
end
```
# 測試用例一
使用規則,將52萬條數據全量初始化同步到Redis,結果如下:

3次運行的中間值為4.6秒
# 測試用例二
使用Lua腳本,將52萬條數據全量初始化同步到Redis,結果如下:

3次運行的中間值為9.5秒
# 測試用例三
使用規則,將binlog中52萬條增量數據同步到Redis。結果如下:

每秒增量同步(TPS)32950條
# 測試用例四
使用Lua腳本,將binlog中52萬條增量數據同步到Redis。結果如下:

每秒增量同步(TPS)15819條
# 測試用例五
100個線程不停向MySQL寫數據,使用規則將數據實時增量同步到Redis,TPS保持在4000以上,資源占用情況如下:

100個線程不停向MySQL寫數據,使用Lua腳本將數據實時增量同步到Redis,TPS保持在2000以上,資源占用情況如下:

<br/>
# 結果說明
**測試環境不同,測試結果也會隨著改變;硬件配置、軟件版本、網絡環境都會影響著測試結果**
**以上,僅作為參考,為你在選擇go-mysql-transfer時候提供依據**
- 簡介
- 部署運行
- 高可用集群
- 同步數據到Redis
- Redis配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到MongoDB
- MongoDB配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到RocketMQ
- RocketMQ配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到Kafka
- Kafka配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到RabbitMQ
- RabbitMQ配置
- 基于規則同步
- 基于Lua腳本同步
- 同步數據到Elasticsearch
- Elasticsearch配置
- 基于規則同步
- 基于Lua腳本同步
- 全量數據導入
- Lua腳本
- 基礎模塊
- Json模塊
- HttpClient模塊
- DBClient模塊
- 監控
- 性能測試
- 常見問題
- 更新記錄開發計劃