python - 高效地创建数据库以分析信息之间的关系

标签 python database-design postgresql psycopg2

所以我正在尝试获取大量 xml 文件(没有特别大的文件,我可以根据需要将它们拆分。)总共有大约 70GB 的数据。为了便于引用,加载脚本是用 python 编写的,并使用 psycopg2 与 postgres 表进行交互。

无论如何,我正在尝试做的是处理像这样工作的数据。关系计数是两个标签一起被看到的次数,标签计数是标签被看到的次数。我已经有了所有的标签,它只是获取它们出现的时间以及它们一起出现的 xml 的时间,这已经成为一个问题。

         Tag Table                |              Relations Table              
 TagID      TagName   TagCount    |         tag1       tag2    relationCount  
   1         Dogs        20       |          1           2            5  
   2         Beagles     10       |          1           3            2  
   3         Birds       11       |          2           3            7  

我遇到的问题是让数据在合理的时间内加载。我一直在迭代更新方法,因为我计算了标记在 xml 文件中出现的频率。

我想我是在问是否有人有任何想法。我是否应该创建某种缓冲区来保存更新信息并尝试定期使用 cur.executeall() 和/或我是否应该以某种方式重组数据库。无论如何,对这个问题的任何和所有想法表示赞赏。

最佳答案

如果我理解这个“......我一直在迭代更新方法”,这听起来像是你正在更新数据库行?如果是这样,请考虑编写一些代码来传递 XML,累积您正在跟踪的总数,将它们输出到一个文件,然后使用 COPY 加载该文件。

如果您要更新现有数据,请尝试这样的操作:

1) 传递 XML 文件以从新数据生成所有新总计

2) 将其复制到工作表中 - 一个您在每批处理之前和之后清除的表

3) 为所有找不到的行从工作表向真实表发出 INSERT,为所有值插入零

4) 从工作表向实际表发出更新以增加计数器。

5) 截断工作表。

关于python - 高效地创建数据库以分析信息之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5066569/

相关文章:

database - BCNF分解?

Postgresql 函数卡在 for 循环中

php - SQL 和负 float

python - Scapy 等待多个数据包

python - 无法在 python 2.7 中导入 boto3

database - 如何使用多个原则对 'has a' 数据库关系进行建模?

mysql - 我应该为双角色用户维护一两个唯一 ID 吗?

python - 在 Pandas 聚合函数中创建多列

python - Dataframe Apply方法返回多个元素(系列)

postgresql - jsonb 转换为文本是确定性的吗?