SmartCode.ETL 这不是先有鸡还是蛋的问题! (2)

属性 Name:Extract,使用 ExtractDataSource 插件作为数据源

ExtractDataSource.Paramters 参数名 说明
DbProvider   数据驱动提供者:MySql,MariaDB,PostgreSql,SqlServer,Oracle,SQLite  
ConnectionString   连接字符串  
Query   查询命令,需要抽取的数据。默认会自动注入三个参数 LastMaxId,LastMaxModifyTime,LastQueryTime 作为查询条件  
PKColumn   主键列名  
AutoIncrement   是否为自增主键,true 自动计算抽取的最大主键值(MaxId)  
ModifyTime   最近一次修改时间列名,设置后自定计算抽取的最大修改时间列(MaxModifyTime)  
Build.Load 参数说明

属性 Type:Load,使用 LoadBuildTask 插件作为构建任务

Build.Load.Paramters 参数名 说明
DbProvider   数据驱动提供者:MySql,MariaDB,PostgreSql,SqlServer,Oracle,SQLite  
ConnectionString   连接字符串  
Table   目标表名  
PreCommand   执行批量插入任务之前执行的命令  
PostCommand   执行批量插入任务之后执行的命令  
ColumnMapping   列映射  
同步策略 LastMaxId

LastMaxId 即上一次抽取的数据最大Id值(第一次抽取时LastMaxId为-1),该模式使用于数据插入后不再变更的数据表。

LastMaxModifyTime

LastMaxModifyTime 即上一次抽取的数据最大ModifyTime值(第一次抽取时LastMaxModifyTime为1970-01-01 08:00:00),适用于插入数据后还会变更的数据表。

并发任务同步

对 Id 取模,分拆不同任务,同时并发执行

大数据量同步

使用 Top/Limit 限制数据抽取数量,分多次同步执行完成整个数据同步。

ETL_Task 任务监控

SmartCode.ETL

性能监控 运行环境

源抽取库:Windows Server 2012 , 8 vCPU 16 GB + SSD + SqlServer-2014

目标分析库:CentOS-7 , 8 vCPU 16 GB + SSD + PostgreSql-11 + SmartCode

ETL_Task.Extract

以下是数据抽取性能,抽取数量为 1434678,耗时 41267 毫秒。

{ "MaxId": 1755822, "PKColumn": "Id", "QuerySize": 1434678, "QueryTime": "2018-11-01T11:31:53.6191084+08:00", "QueryCommand": { "Taken": 41267, "Command": "Select * From T_ProductSearchLog With(NoLock) Where Id>@LastMaxId", "Paramters": { "LastMaxId": -1, "LastQueryTime": "1970-01-01T08:00:00" } } } ETL_Task.Load

以下是数据加载性能,批量插入数据量为 1434678,耗时 21817 毫秒,平均每秒插入 65759.6 条数据。

{ "Size": 1434678, "Table": "t_product_search_log", "Taken": 21817, "PreCommand": null, "PostCommand": null }

目前 SmartCode.ETL 已经落地到我们的生产环境了(11-01上线截至目前执行了 26069 次同步任务,暂无error日志抛出)

PS: 虽然 SmartCode.ETL 只花了周末俩天时间完成扩展,但已经可以满足我们至少90%的应用场景。这足以见得 SmartCode 扩展能力是多么令人意外了。当然SmartCode的其他能力还得后续等各位一起发掘!!!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpppgp.html