【问题标题】:Update huge SQLite databases更新庞大的 SQLite 数据库
【发布时间】:2014-02-04 12:10:45
【问题描述】:

我有两个 SQLite 非常大的表(数百万行,里面有几何图形)。第一个是不变的(记录没有更新等)。第二个更新(可以更新/删除旧记录,可以添加新记录)。

有时我需要使用第二张表更新第一张表。因为数据量太大,我必须检测第二个表中所做的更改并将它们应用到第一个表中。我也不能在 RAM 中执行此操作,因为表包含几何图形并且它们可能非常重。

实现这一目标的可能方法是什么?

【问题讨论】:

    标签: c# sql sqlite


    【解决方案1】:

    简单的解决方案:删除第一个表,然后使用类似的表达式

    drop table table1;
    create table table1 as select * from table2;
    

    更复杂的解决方案:使用一对移动的“游标”——不是 Oracle 中的数据库游标,而是一些包含表 PK 值的变量。 将两个游标设置为两个表中的最低 ID。然后,只需遵循简单的规则:

    1. 如果 table1 中的记录存在于 table2 中并且相同,则跳过,推进两个游标
    2. 如果 table1 中的记录存在于 table2 中且不相同,则更新 table1 中的记录,推进两个游标
    3. 如果table1中的记录在table2中不存在,删除它,推进table1游标
    4. 如果table2中的记录在table1中不存在,插入它,推进table2游标

    通过这种方式,您可以获得具有 O(1) 内存需求的线性 O(N) 算法(撇开 DB 操作复杂性不谈)。

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多