【问题标题】:Combining databases: identifying common records -- most efficient way组合数据库:识别公共记录——最有效的方法
【发布时间】:2016-10-07 09:43:11
【问题描述】:

我有一组 20 个 sqlite 数据库(每个数据库 50 个表,每个数据库大约有 10 万条记录)。 我想将这 20 个数据库合并到一个主数据库中。 这个概念是有一个额外的列,它指示记录适用于哪个域。


例如:

表 A

FRUIT | COLOR  | SHAPE
----------------------
apple | red    | round 
banana| yellow | curved

表 B

FRUIT | COLOR  | SHAPE
----------------------
apple | red    | round 
banana| yellow | curved

表 C

FRUIT | COLOR  | SHAPE
----------------------
apple | red    | round 
banana| blue   | straight

这些表(A、B 和 C)将组合成一个主表:

主表

FRUIT | COLOR  | SHAPE   | DOMAIN
---------------------------------
apple | red    | round   | 0b111
banana| yellow | curved  | 0b110
banana| blue   | straight| 0b001

我有文本文件格式的数据库(即制表符分隔列表)。我使用 Python 将它们导入到我的 sqlite 数据库中。 我将如何最有效地执行此合并过程?

我有两个想法:

  1. 将第一个 DB 导入主 DB。导入下一个数据库时,检查是否存在完整的记录。如果是,请在适用性列上运行 SQL UPDATE 查询。如果没有,请使用 INSERT 创建新记录。

  2. 对于每种类型的表,在 python 中加载 20 个域表中的每一个,并查看每个域或子集上是否存在记录。然后将具有适用性的记录导入到主数据库中。

我想知道是否有执行这些操作的有效方法。由于每个数据库的大小以及必须多次执行此导入的要求,我需要尽可能加快该过程。

【问题讨论】:

    标签: python database performance sqlite


    【解决方案1】:

    为每个记录*域进行单独选择和更新比在内存中合并记录要慢得多。

    将 20 个表加载到内存中。在内存中制作完整的记录列表。批量插入数据库。

    合并的速度效率可能是这样的:

    将(key,value)->(域代码,暂时为空)加载到一组,分别将key->value加载到域表字典中。

    然后遍历(key,value) set,在每个域字典中查找值,在主字典中形成域代码。

    然后遍历上一步的结果并执行批量插入,每大约 1000 条记录提交一次。

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多