Sql 从单个表中的多个表插入数据设置过程
我正在数据库中构建一个进程,其中多个表用于在单个表中写入数据(每个表在单个进程中)。该过程应该是容错的-如果发生错误,所有插入的数据都应该回滚。在我看来,在整个数据库系统中实现这种逻辑有两种方法Sql 从单个表中的多个表插入数据设置过程,sql,database,data-integration,Sql,Database,Data Integration,我正在数据库中构建一个进程,其中多个表用于在单个表中写入数据(每个表在单个进程中)。该过程应该是容错的-如果发生错误,所有插入的数据都应该回滚。在我看来,在整个数据库系统中实现这种逻辑有两种方法 在一个进程开始时,我锁定目标数据库,所有其他进程都必须等待该进程完成(不可能进行真正的并行处理) 每个进程将数据写入tmp表,最后可以批量加载目标中的所有数据。(跟踪哪些数据已经导出等) 对于这种类型或问题,是否有更多/更好的选择 干杯考虑到行数(1m)以及每5分钟运行一次进程的事实,我认为您提到的两种
- 第一种方法将过于频繁且长时间地锁定目标表
- 第二种方法是插入大量数据,然后在最后提交或回滚。根据您使用的数据库,如此大量的未提交数据可能会导致性能问题。最后的回滚也会给数据库带来很大的负载李>
- 创建一个名为process_stats(process_id,status)的表
- 每次启动流程时,在此表中插入一个状态为“已启动”的条目。流程结束后,将状态更改为“成功”或“失败”
- 从目标表中引用此表(因此在目标表中添加一个名为process_id的列)
- 最后,任何读取目标表的查询都应该将目标表与process_stats表连接起来,并且仅当process status为“SUCCESSFUL”时才选择records
- 如果进程失败,您可以选择从目标表中删除相应的记录
通常要插入的行数是多少?视情况而定,但可能会增加到1.000.000,并且进程每5分钟运行一次。问题的规格非常广泛,但是像SQL Server这样的引擎可以使用内置命令在出错时回滚事务。