【发布时间】:2014-02-04 12:10:45
【问题描述】:
我有两个 SQLite 非常大的表(数百万行,里面有几何图形)。第一个是不变的(记录没有更新等)。第二个更新(可以更新/删除旧记录,可以添加新记录)。
有时我需要使用第二张表更新第一张表。因为数据量太大,我必须检测第二个表中所做的更改并将它们应用到第一个表中。我也不能在 RAM 中执行此操作,因为表包含几何图形并且它们可能非常重。
实现这一目标的可能方法是什么?
【问题讨论】:
我有两个 SQLite 非常大的表(数百万行,里面有几何图形)。第一个是不变的(记录没有更新等)。第二个更新(可以更新/删除旧记录,可以添加新记录)。
有时我需要使用第二张表更新第一张表。因为数据量太大,我必须检测第二个表中所做的更改并将它们应用到第一个表中。我也不能在 RAM 中执行此操作,因为表包含几何图形并且它们可能非常重。
实现这一目标的可能方法是什么?
【问题讨论】:
简单的解决方案:删除第一个表,然后使用类似的表达式
drop table table1;
create table table1 as select * from table2;
更复杂的解决方案:使用一对移动的“游标”——不是 Oracle 中的数据库游标,而是一些包含表 PK 值的变量。 将两个游标设置为两个表中的最低 ID。然后,只需遵循简单的规则:
通过这种方式,您可以获得具有 O(1) 内存需求的线性 O(N) 算法(撇开 DB 操作复杂性不谈)。
【讨论】: