假设我要从关系数据库中提取大数据集。但是,我不想填充超过100MB的内存(这是一个任意限制)。另外,我想对此数据集执行某些操作。
通常,在像python这样的语言中,我只是将所有获取的数据放入内存中。但我想避免这种情况。所以,我可能需要介绍一个中间步骤,我在磁盘上写入查询数据然后按块处理它们。
处理这种情况的最佳方法是什么?
答案 0 :(得分:0)
最近这件事发生在我身上。没有唯一索引的数据库表(现在有一个)正在重复插入相同的数据多达30次。该表约为55 M行。
我编写了一个Python程序来查找一行,并删除所有重复项。即使在fetchone调用之前,mysqldb在尝试创建查询时崩溃了。
但是,我能够将数据提取到电子表格中,使用Python的CSV库进行过滤,并替换表格中的数据。这是一团糟。
了解有问题的数据库品牌/类型以及您正在使用的平台会很有帮助,但平台不太重要。
作为一项规则,我发现有时创建要批量加载的数据会快得多 而不是一次更新一行表。我今天通过削减计算和打印税单的一些变化来证明这一点。该程序不是更新事务块中的表(一次一行),而是打印分隔的“报告”(要加载到MySQL中的数据),并在计算和打印账单后批量加载它。速度的提升非常明显。