4 Star 15 Fork 11

北京小程科技有限公司 / 数据库批量同步工具

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

dbsync

这是用来实现两个MySQL数据库中的具有相同字段表的增量同步。

  • 支持按照某种格式增量获取表中的待同步数据。
  • 支持按照列名称向数据库的表中批量插入待同步的数据。

数据库配置

在每一张需要同步的表中,应该有一个update_time更新时间的非空字段(名字可以不一样,但是类型必须是时间相关类型),用来按照更新时间获取最新的更新数据。

这个字段需要在数据更新时,自动更新为当前时间戳,用于记录数据更新的时间。

例如update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的字段设置。

获取增量更新数据

可以批量获取一张表的最新更新的数据,方法如下:

func DoFetch(db SQLCommon, tableName string, options FetchOptions) (FetchResult, error)

其中参数说明:

  • db:数据库操作句柄。
  • tableName:表名称。
  • options:获取时的配置信息,FetchOptions格式如下所示:
    • IgnoreFields:需要忽略的列名称,获取数据的结果不包含该列。
    • PageNumber:分页获取增量的页码,从1开始。
    • PageSize:分页获取增量的页大小,判断分页是否结束,只需要判断获取结果的数量是否小于页大小即可。
    • UpdateTimeFieldName:更新时间(即上面说明的update_time)所在列的列名称。
    • LastUpdateTime:上次更新的时间戳,大于这个时间戳开始查询,如果为0,则表示查询全部数据。
    • WhereSqlStmt:自定义SQL查询语句的Where子句,与更新时间的条件([UpdateTimeFieldName] > ?)是AND的关系。
    • WhereSqlArgs:自定义SQL查询语句的Where子句的参数列表。

获取的结果,是FetchResult格式的结构体:

  • columns:列名称列表。
  • data:最新更新的数据,二维数组,每一行是一条数据,里面的值与列名称是一一对应关系。
  • count:数据的数量。

注:时间类型的列,获取的结果time.Time会被转换为时间戳传递,用于节省数据长度。

插入单条更新数据

接口为:

func DoUpdateOne(db SQLCommon, tableName string, data []interface{}, options UpdateOptions) error

其中参数说明:

  • db:数据库操作句柄。
  • tableName:表名称。
  • data:一条数据,里面的值与options.Columns一一对应。
  • options:插入时的配置信息,UpdateOptions格式如下所示:
    • Columns:列名称列表,参照DoFetch返回的结果。
    • TimeFields:time.Time时间类型的列名称列表。
    • FixedFields:固定的插入列,因为在DoFetch中会配置忽略一些列,所以这里可以给这些列设置值。
    • UniqueFields:唯一键或主键的列名称列表,在插入失败时,更新操作不更新唯一键或主键。
    • SqlType:数据库类型,目前支持MySQL和SQLite。

该接口无返回值。

插入或更新会调用INSERT INTO ... VALUES (...) ON DUPLICATE KEY UPDATE ...这种SQL语句来执行,不采用REPLACE INTO的原因是它的更新会先删除旧数据,再插入新数据,可能导致一些忽略的字段被修改。

批量插入更新数据

接口为:

func DoUpdate(db SQLCommon, tableName string, data [][]interface{}, options UpdateMultiOptions) error

相比较插入单条更新数据的接口,只是数据变成了二维数组,options里面多了一个配置项:

  • BatchCount:一次批量插入的条数,用于加快插入或更新的执行速度。
MIT License Copyright (c) 2019 XiaochengTech Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

实现MySQL或SQLite数据库中表的增量同步。 展开 收起
Go
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/xiaochengtech/dbsync.git
git@gitee.com:xiaochengtech/dbsync.git
xiaochengtech
dbsync
数据库批量同步工具
master

搜索帮助