建议 pattern/strategy 比较两组数据(新数据与现有数据)...保留现有数据中不存在的新数据

Recommended pattern/strategy to compare two sets of data (new vs existing)... remaining with new data that's not in existing

我有一个 ETL process/job,它以预定的方式将数据库数据从源提取到目标。

  1. [Source data] 定期使用来自某些外部的新数据进行更新 资源。 [Destination data] 是使用的 [Source data] 的子集 下游业务。
  2. [Destination data]中的约束要求是应该 没有重复(可能发生,例如,在工作的情况下 失败,然后新的提取是 运行 在一些数据可能被导入之后)
  3. 作业一次导入1000条记录
  4. Scheduler/Job 有其他职责和它处理的其他数据

我的一个 "feasible" 选项涉及:

我担心内存中的数据太多。

任何关于更好方法的建议,或者这是最有效的方法吗?

只是为了分享,我找到了一个有全面答案的类似问题。它在 Java 中,但很容易转换为 C#。

仍然对任何替代方案持开放态度。否则会将此标记为答案并指出重复。


...我们可以按升序排列所有元素的 ID(一次性 O(n log n) 成本),并使用跳过元素的 O(n) 算法迭代它们它们比另一个序列中的当前元素大。这样更好,但仍然不是最优的。

最佳解决方案是创建 bs 集合的哈希 ID 集合。这不需要对两个集合进行排序,并允许进行线性时间成员资格测试。 assemble 一组 ID 有一次性 O(n) 成本。

HashSet<Integer> bIds = new HashSet<>(bs.size());
for (B b : bs)
    bIDs.add(b.getId());

for (A a : as)
    if (bIds.contains(a.getId()))
        cs.add(a);

此解决方案的总复杂度为 O(|as| + |bs|)

https://softwareengineering.stackexchange.com/a/258325/132218