将新记录从一个数据库导入到另一个数据库的最快方式

本文关键字:数据库 导入 另一个 方式 一个 新记录 | 更新日期: 2023-09-27 17:50:35

使用EF,我需要从一个数据库中提取记录,进行一些初始化和映射,并将记录插入另一个DB。我只需要这样做的记录,还没有被导入。我在辅助DB上的模型如下:

public class Loan
{
    public int Id { get; set; }
    // this is the id of this loan's record from the original DB
    public int OriginalDbId { get; set; }
    // the loan's last date of attendance
    public DateTime LDA { get; set; }
    ...
}

方法1:

我添加了一个名为ImportHistory的模型,它只是节省了上次导入的时间。我使用这个日期来提取LDA大于上次进口时间的贷款。问题是,用户可以编辑贷款的LDA,从而导致错过一些贷款,反之亦然。例如,如果贷款是在上次导入之后创建的,但是经过编辑使LDA位于上次导入之前,则不会导入新的贷款。

方法2:

我从辅助数据库检索了所有originaldbid。然后提取Id不包含在OriginalDbIds集合中的所有记录。请注意,查询中包含了更多的选择条件。

var allIds = _2ndDbLoanRepo.Query()
    .Select(m => m.OriginalDbId)
    .ToList();
var newRecords = _1stDbLoanRepo.Query()
    .Where(other criteria ...)
    .Where(m => !allIds.Contains(m.Id))
    .ToList();

当已经找到了100,000多条记录时,这种方法最终会变得很慢。它已经抛出了EntityCommandExecutionException,并带有"超时过期"的消息。当只有10k条记录时,在操作完成之前经过的超时时间或服务器没有响应。

那么最好的方法是什么呢?

将新记录从一个数据库导入到另一个数据库的最快方式

最快的方法是数据永远不会离开DB服务器。服务器进程更新一个日志表,前端从这个日志表更新——T.S.昨天

1 -服务器可以链接,映射可以保存为元数据,供服务器进程使用。

2 -你想过用导出/导入的方式吗?导出到文本文件,从文本文件导入。数据库就是这样做的,为什么你的程序应该有所不同?