克隆 table 从一个数据库到另一个数据库
Clone table from database to database
我需要一个从一个数据库实例 (DB1) 获取整个 table 并在另一个数据库实例 (DB2) 上创建相同内容的解决方案。之前我用的是Spring Integration,但是听说Spring Batch更适合这种情况,想试试
所以,possible/have使用Spring批处理作业有以下步骤吗:
- 在与来自 DB1 的源 table 具有相同模式的 DB2 上创建一个空的 table。
- Select 来自 DB1 table -> 更新 DB2 table。如果在步骤中出现错误 - 回滚并删除 DB2 上的 table。
使用 Spring 集成 我看到 JdbcInboundChannelAdapter -> QueueChannel -> OutboundGateway
可能的解决方案,但也许 Spring 批处理是更好的选择?非常感谢任何建议。
这取决于你的要求。
我们最初使用 spring-batch 加载 DWH。但这不是简单的一对一副本。生产数据库中的数据存储在垂直 table 设计中(也称为实体属性值模型)。此外,每个条目也是双时历史化的。总而言之,这些大约有 5'000'000'000 行,必须根据正确的时间维度进行分组并转换为水平数据库设计。当然,这是从 DB2 到 Oracle。
所以我们必须显着转换结构,必要时必须转换数据类型,而且我们有 50 亿行要处理。
如果您在同一个数据库系统中只有一个普通的 1:1 副本,那么最简单的方法就是使用数据库工具。
如果您必须在不同的数据库系统之间传输,spring 批处理可能是一种选择。
如果您必须转换数据,无论是结构还是类型,spring 批处理可能是一个选项。
如果你有很多行,你可以使用 spring 批处理的分区功能来并行化或者简单地用不同的 id-ranges 启动同一个作业几次。
如果您要复制多个 table,您可以使用拆分流从多个 table 并行加载数据。
在我目前工作的公司,我们有完全通用的 File/Db reader 和 writer,它们完全基于 DB 元模型。如果我想做一个简单的复制工作,我只需要定义源和目标数据源以及所需的 tables 并适当地初始化 readers 和编写器。如果名称匹配,我什至不必添加配置来映射 tables.
之间的数据
这引出了以下基本问题
- 需要什么样的转换逻辑?
- 需要什么样的表现?
- 需要复制多少table?
- 源和目标是否在同一个系统上?
我已经使用其他 post 中描述的配置解决了我的任务:。感谢大家!
我需要一个从一个数据库实例 (DB1) 获取整个 table 并在另一个数据库实例 (DB2) 上创建相同内容的解决方案。之前我用的是Spring Integration,但是听说Spring Batch更适合这种情况,想试试
所以,possible/have使用Spring批处理作业有以下步骤吗:
- 在与来自 DB1 的源 table 具有相同模式的 DB2 上创建一个空的 table。
- Select 来自 DB1 table -> 更新 DB2 table。如果在步骤中出现错误 - 回滚并删除 DB2 上的 table。
使用 Spring 集成 我看到 JdbcInboundChannelAdapter -> QueueChannel -> OutboundGateway
可能的解决方案,但也许 Spring 批处理是更好的选择?非常感谢任何建议。
这取决于你的要求。
我们最初使用 spring-batch 加载 DWH。但这不是简单的一对一副本。生产数据库中的数据存储在垂直 table 设计中(也称为实体属性值模型)。此外,每个条目也是双时历史化的。总而言之,这些大约有 5'000'000'000 行,必须根据正确的时间维度进行分组并转换为水平数据库设计。当然,这是从 DB2 到 Oracle。
所以我们必须显着转换结构,必要时必须转换数据类型,而且我们有 50 亿行要处理。
如果您在同一个数据库系统中只有一个普通的 1:1 副本,那么最简单的方法就是使用数据库工具。
如果您必须在不同的数据库系统之间传输,spring 批处理可能是一种选择。
如果您必须转换数据,无论是结构还是类型,spring 批处理可能是一个选项。
如果你有很多行,你可以使用 spring 批处理的分区功能来并行化或者简单地用不同的 id-ranges 启动同一个作业几次。
如果您要复制多个 table,您可以使用拆分流从多个 table 并行加载数据。
在我目前工作的公司,我们有完全通用的 File/Db reader 和 writer,它们完全基于 DB 元模型。如果我想做一个简单的复制工作,我只需要定义源和目标数据源以及所需的 tables 并适当地初始化 readers 和编写器。如果名称匹配,我什至不必添加配置来映射 tables.
之间的数据这引出了以下基本问题
- 需要什么样的转换逻辑?
- 需要什么样的表现?
- 需要复制多少table?
- 源和目标是否在同一个系统上?
我已经使用其他 post 中描述的配置解决了我的任务: