DolphinDB集群间数据库同步教程
本页是一篇关于 DolphinDB 集群间数据库同步的教程,并包含作者与发布日期信息。
Source: https://dolphindb.cn/blogs/69
What this page covers
- 同步方式概述:离线与在线。
- 离线方式的 backup/restore 与文件同步流程。
- 离线备份:用 SQL 指定备份范围或列。
- 离线文件同步:rsync/scp 与 ssh 免密要求。
- 离线恢复:restore 到目标表与参考链接。
- 在线方式:通过 socket 连接读取并写入远端 DFS 数据库。
- 在线与离线方式对比:性能、内存、磁盘与可用性。
技能认证特训营第二期报名推广
页面顶部包含限时报名相关的推广信息与报名链接。
- 本节提供一个报名入口链接。
- 本节属于推广/报名信息区块。
DolphinDB集群间数据库同步教程(标题与作者日期)
本节给出教程主题(集群间数据库同步)以及作者与发布日期信息。
- 作者署名为 Junxi。
- 发布日期为 2021-08-05。
- 内容主题为 DolphinDB 集群间数据库同步。
同步方式概述:离线与在线
本节说明 DolphinDB 支持离线与在线两种方式在不同集群间同步 DFS 分布式数据库,并界定同步对象范围。
- 集群间同步方式包含离线方式与在线方式。
- 同步对象限定为 DFS 分布式数据库。
- 同步对象不包含内存表或流数据表等。
离线方式:backup/restore与文件同步流程
本节介绍离线同步通过备份到磁盘、跨机器同步备份文件、再恢复到目标数据库的流程,并配图说明。
- 离线同步包含 backup 到磁盘的步骤。
- 离线同步包含跨机器同步备份文件的步骤。
- 离线同步包含在目标端 restore 恢复到数据库的步骤。
- 离线方式使用 backup/restore 功能实现同步。
离线方式:数据备份(SQL指定范围/列)
本节展示使用 backup 函数按分区备份数据,并用 SQL 指定全量、近7天或指定列的备份示例及相关参考链接。
- backup 可按分区备份数据。
- backup 可通过 SQL 指定需要备份的数据范围。
- 近 7 天备份示例假设分区字段为 TradingDay(DATE)。
- 本节提供 DolphinDB 元编程教程参考链接。
- 本节提供 backup 与 restore 的官方文档链接。
离线方式:节点间数据文件同步(rsync/scp与ssh免密)
本节说明当两库不在同一物理机时需同步二进制文件,给出使用 shell 调用 rsync 的脚本示例并提示需配置 ssh 免密。
- 当两个数据库不在同一台物理机器上,需要同步二进制文件。
- 可用操作系统文件同步手段同步目录(如 rsync 或 scp)。
- 示例将 backupDir 中变化文件同步到另一台机器的 restoreDir。
- 通过 ssh 执行 rsync/scp 需要配置 ssh 免密登录。
- rsync 被描述为只同步发生变化的文件。
离线方式:数据恢复(restore到目标表/按分区恢复提示)
本节给出使用 restore 函数将备份数据恢复到目标数据库表的示例,并提供可按条件恢复分区的参考链接。
- restore 可从 restoreDir 恢复所需要的数据。
- 示例把 db1 表 mt 的数据恢复到 db2 表 mt。
- 本节提供数据备份与恢复教程链接。
离线方式:定时同步实例(scheduleJob)
本节提供跨集群每日定时同步的脚本实例,包含连接源节点、执行 backup、rsync 同步与 restore 恢复,并用 scheduleJob 设定每天22:30执行。
- 示例场景为两个 DolphinDB 集群部署在不同机器上。
- 示例计划为每天 22:30 同步 A 集群数据库 db1 到 B 集群。
- 示例中 db1 分区类型为 VALUE,按天分区。
- 示例中分区字段为 Timestamp(TIMESTAMP)。
- 脚本应在需要恢复数据的 B 集群上执行。
- 脚本步骤包含 xdb 连接并 login、backup、rsync、restore。
- scheduleJob 可用于启动定时任务(示例为每天 22:30)。
在线方式:通过socket连接读取并写入远端DFS数据库
本节说明在线同步要求两集群同时在线,通过网络连接与远程写入将数据从源库直接写入目标库,并配图说明。
- 在线同步要求两个集群同时在线。
- 在线同步通过建立 socket 连接进行数据传输。
- 在线同步可通过远程过程调用(rpc write)写入目标库。
- 在线方式描述为无需磁盘备份与同步步骤。
在线方式示例:内存充足与内存不足两种场景
本节给出在线同步在内存足够时一次性取数写入、以及内存不足时通过 repartitionDS 切分数据并用 mr 顺序写远端的脚本与调度方式。
- 在线示例考虑两种场景:内存足够与内存不足。
- 场景1在备份节点 select 当天数据到 t。
- 场景1通过 xdb 连接恢复节点并 login。
- 场景1远程调用 writeData 将 t 追加到目标表。
- 场景2用 repartitionDS 将当天数据按 sym 字段再分区为 10 份。
- 场景2用 mr 将分片数据逐一写到远端。
- 场景2将 mr 的 parallel 参数设置为 false 以尽量少占用内存。
- 若内存充足,文中指出并行效率更高。
两种方式对比:性能、内存要求、磁盘占用与可用性
本节对比在线与离线同步在性能、内存要求、磁盘空间占用以及对集群在线状态要求等方面差异。
- 离线方式性能低于在线方式。
- 离线方式要求内存能容纳一个分区的完整数据。
- 列数很多且常用字段少时,离线方式可能出现内存风险。
- 在线方式对内存容量要求更低。
- 离线方式在本机与远端都需要存盘,占用更多磁盘空间。
- 在线方式不需要额外占用磁盘空间。
- 离线方式不要求两个集群同时在线。
- 在线方式要求两个集群同时在线并正常提供服务。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| DolphinDB集群间数据库同步教程 | 发布日期 | 2021-08-05 | high |
| DolphinDB集群间数据库同步教程 | 作者署名 | Junxi | high |
| DolphinDB | 支持的集群间数据库同步方式 | 提供离线方式和在线方式实现不同集群间数据库的同步 | high |
| 同步对象范围 | 数据库类型限定 | 数据库指的是DFS分布式的数据库,而非内存表或流数据表等 | high |
| 离线方式 | 实现手段 | 通过数据库备份(backup)和恢复(restore)功能实现数据同步 | high |
| 在线方式 | 实现手段 | 通过建立在线连接把数据从一个库读取再写入到另一个库中 | high |
| 离线方式 | 备份输出形式 | backup函数以二进制形式将数据导入到磁盘(并以分区为单位备份) | high |
| 离线方式 | 流程步骤 | 先backup到磁盘→同步备份文件到目标物理机器→再restore从磁盘恢复到数据库 | high |
| backup函数 | 可用SQL指定需要同步的数据范围 | 可通过SQL语句指定备份数据(示例含全量、近7天、指定列) | high |
| 示例2(近7天备份) | 分区字段假设 | 假设时间分区字段为TradingDay(DATE) | high |
| 参考链接 | backup函数文档链接 | https://www.dolphindb.cn/cn/help/backup.html | high |
| 参考链接 | restore函数文档链接 | https://www.dolphindb.cn/cn/help/restore.html | high |
| 参考链接 | DolphinDB元编程教程链接 | https://github.com/dolphindb/Tutorials_CN/blob/master/meta_programming.md | high |
| 节点间数据文件同步(离线方式) | 触发条件 | 若需同步的两个数据库不在同一台物理机器上,则需要同步二进制文件 | high |
| DolphinDB shell命令支持 | 用途 | 可利用操作系统提供的文件同步手段同步目录(例如rsync或scp) | high |
| rsync | 特性描述 | linux常用命令,只同步发生变化的文件,非常高效 | medium |
| rsync脚本示例 | 同步内容与目标 | 将backupDir目录下所有发生变化的文件同步到另一台机器的restoreDir目录(通过userName@restoreIP) | high |
| rsync/scp通过ssh执行 | 前置要求 | 需要配置ssh免密登录(也可用其他服务器同步工具) | high |
| restore函数 | 用途 | 从restoreDir中恢复所需要的数据 | high |
| restore示例1(离线恢复) | 数据流向 | 将备份数据库db1表mt的所有数据恢复到数据库db2的表mt中(示例调用restore并传入loadTable("dfs://db2","mt")) | high |
| 参考链接 | 数据备份与恢复教程链接 | https://github.com/dolphindb/Tutorials_CN/blob/master/restore-backup.md | high |
| 离线方式具体实例 | 部署条件 | 两个DolphinDB集群部署在不同机器上 | high |
| 离线方式具体实例 | 同步计划 | 每天22:30将A集群数据库db1(包括表mt)所有数据同步到B集群 | high |
| 离线方式具体实例:db1分区 | 分区类型与字段 | 分区类型VALUE,按天分区,分区字段Timestamp(TIMESTAMP) | high |
| 离线方式具体实例脚本执行位置 | 运行位置说明 | 脚本应在B集群(需要恢复数据的集群)上执行 | high |
| 离线方式具体实例脚本 | 主要步骤 | 通过xdb连接备份节点并login→执行backup导出当日数据→用rsync同步目录→执行restore恢复到数据库→可用scheduleJob定时 | high |
| scheduleJob | 用途 | 用于启动定时任务(示例为每天22:30执行) | high |
| 在线方式 | 在线条件 | 要求两个集群同时在线,通过建立socket连接直接从一个集群读数据并写入另一个集群 | high |
| 在线方式示意(图注说明) | 数据写入方式 | 通过远程过程调用(rpc write)将数据从一个DFS数据库读取并写入到另一个DFS数据库中(无需磁盘备份与同步步骤) | medium |
| 在线方式示例 | 场景划分 | 考虑两种场景:内存足够容纳一天数据;内存不足以容纳一天数据 | high |
| 在线方式场景1 | 实现方式 | 在备份节点执行:select取当天数据到t→xdb连接恢复节点并login→远程调用writeData将t append到目标表 | high |
| 在线方式场景2 | 内存不足时的数据切分与写入 | 用repartitionDS将当天数据按sym字段再分区为10份;用mr逐一写到远端;mr的parallel参数设为false以尽量少占用内存 | high |
| 在线方式场景2 | 并行写入的效果描述 | 如果内存充足,并行的效率更高 | medium |
| 两种方式对比:性能 | 结论 | 离线方式性能低于在线方式(在线不存盘直接网络传输并写入;离线需备份到磁盘、传到远端磁盘、再读盘写入) | high |
| 两种方式对比:内存要求(离线) | 内存需求 | 离线方式以分区为单位备份,要求内存必须容纳一个分区的完整数据 | high |
| 离线方式内存风险场景 | 可能问题 | 在列特别多(几千列)且常用字段较少的特殊场景下,内存可能不能容纳一个分区所有列的数据 | high |
| 两种方式对比:内存要求(在线) | 内存需求 | 在线方式对内存容量要求低很多;若分区数据量超过内存,可对一个分区再进行更细粒度划分 | high |
| 两种方式对比:磁盘占用 | 差异 | 离线方式在本机以及远端都需要存盘,占用更多磁盘空间;在线方式不需要额外占用磁盘空间 | high |
| 两种方式对比:集群在线状态 | 差异 | 离线方式不需要两个集群同时在线(可在不同时间段同步);在线方式需要两个集群都同时在线并正常提供服务 | high |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |