前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[NewLife.XCode]备份恢复与同步(数据搬运专家)

[NewLife.XCode]备份恢复与同步(数据搬运专家)

作者头像
大石头
发布2022-05-10 09:51:32
5630
发布2022-05-10 09:51:32
举报
文章被收录于专栏:智能大石头智能大石头

NewLife.XCode是一个有20年历史的开源数据中间件,支持net6/net5/net45/net40,由新生命团队(2002~2020)开发完成并维护至今,以下简称XCode。

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。

开源地址:https://github.com/NewLifeX/X (求star, 1450+)

Nuget包:NewLife.XCode

源代码:https://github.com/NewLifeX/X/blob/master/XCode/DataAccessLayer/DbPackage.cs

数据应用开发中,经常需要用到备份、恢复和同步功能,XCode内置支持跨数据库备份同步。特别在分析线上问题时,经常是恨不得把线上某些表数据“弄”回来本地。所以,你需要XCode。

码神工具跨库数据同步

把数据从一个库同步到另一个库,以下视频从MySql库同步数据到SQLite库,包括创建数据表。

此处为语雀视频卡片,点击链接查看:码神数据同步.mp4

DbPackage类

数据备份恢复功能由DbPackage类提供支持。使用时仅需要指定Dal数据库连接,例如 dp.Dal = DAL.Create("memberShip") 。

DbPackage 操作数据有几大核心:

  • 二进制备份数据,占用空间小;
  • Actor并行处理,读写同时进行,极快速度;
  • 中性备份文件,数据库无关性,支持异构备份与恢复;

主要设置如下:

代码语言:javascript
复制
/// <summary>
/// 数据库连接
/// </summary>
public DAL Dal { get; set; }

/// <summary>数据页事件</summary>
public event EventHandler<PageEventArgs> OnPage;

/// <summary>批量处理时,忽略单表错误,继续处理下一个。默认true</summary>
public Boolean IgnoreError { get; set; } = true;

/// <summary>
/// 性能追踪器
/// </summary>
public ITracer Tracer { get; set; } = DAL.GlobalTracer;

备份

数据备份,把一个或多个表数据备份为压缩文件,支持备份数据表结构。

采用Actor架构,双线并行处理,主线程逐页抽取数据,Actor线程写入备份文件。

数据库结构备份为xml文件,单表数据备份为DbTable的二进制格式,因此备份文件非常小。

数据备份文件为NET类型的中性文件,与数据库类型及版本无关,可以恢复到其它任意类型数据库。数据备份文件头部记录字段名及字段类型,之后的数据逐行存储。

数据备份文件格式可阅读DbTable说明, https://www.yuque.com/smartstone/nx/dbtable

主要方法:

代码语言:javascript
复制
// 备份单表数据,抽取数据和写入文件双线程
Int32 Backup(IDataTable table, Stream stream);
// 备份单表数据到文件
Int32 Backup(IDataTable table, String file = null);
// 备份一批表到指定压缩文件
Int32 BackupAll(IList<IDataTable> tables, String file, Boolean backupSchema = true);

数据抽取逻辑,如果有自增字段,则按照自增字段分批抽取。否则使用直接分页的方式抽取,在数据量较大时(大于1万行),性能会越来越慢。

由于是顺序写入,写入性能很高,数据备份的瓶颈一般在于原始数据抽取。具体性能及错误分析,建议参考星尘监控。

恢复

数据恢复,把一个压缩文件恢复到目标数据库,支持恢复数据表结构,包括创建表和修改表。

采用Actor架构,双线并行处理,主线程逐页读取文件,Actor线程分批写入数据库。

由于备份文件是数据库无关的中性文件,因此目标数据库可以是不同于备份库的其它数据库类型。

备份时仅记录基础数据类型,因此个别特殊类型字段可能恢复失败。

主要方法:

代码语言:javascript
复制
// 从数据流恢复数据
Int32 Restore(Stream stream, IDataTable table);
// 从文件恢复数据
Int64 Restore(String file, IDataTable table, Boolean setSchema = true);
// 从指定压缩文件恢复一批数据到目标库
IDataTable[] RestoreAll(String file, IDataTable[] tables = null, Boolean setSchema = true);

由于是顺序读取文件,读取性能很高,数据恢复的瓶颈一般在于写入数据库。具体性能及错误分析,建议参考星尘监控。

同步

数据同步,把一个库的单表或多表同步到另一个库,支持同步数据表结构,包括创建表和修改表。

采用Actor架构,双线并行处理,主线程逐页抽取数据,Actor线程分批写入目标库。

由于同步过程中转为数据库无关的DbTable中性数据集,因此目标库可以是不同于源库的其它数据库类型。

支持同步所有基础数据类型,特殊数据类型有可能同步失败。

主要方法:

代码语言:javascript
复制
// 同步单表数据
Int32 Sync(IDataTable table, String connName, Boolean syncSchema = true);
// 备份一批表到另一个库
IDictionary<String, Int32> SyncAll(IDataTable[] tables, String connName, Boolean syncSchema = true);

由于是顺序读取数据,读取性能很高,数据同步的瓶颈一般在于写入数据库。具体性能及错误分析,建议参考星尘监控。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 码神工具跨库数据同步
  • DbPackage类
  • 备份
  • 恢复
  • 同步
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档