合并数据库:最有效的识别公共记录的方法

2024-10-17 06:16:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组20个sqlite数据库(每个表50个,每DB大约有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. 将第一个数据库导入主数据库。导入下一个数据库时,检查是否存在完整的记录。如果是,则对“适用性”列运行SQL更新查询。如果没有,请使用INSERT创建新记录

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

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


Tags: 数据库applesqlite记录blueredcolorbanana
1条回答
网友
1楼 · 发布于 2024-10-17 06:16:58

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

将20个表加载到内存中。把内存中的记录列成完整的清单。批量插入数据库

可能合并的快速有效方法如下:

加载(键、值)—>(域代码,现在为空)设置为一组,并单独设置键->;将值放入域表字典

然后遍历(键,值)集合,在每个域字典中查找值,并在主字典中形成域代码

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

相关问题 更多 >