从大型CSV文件更新,插入和删除大型MySQL

时间:2019-02-23 15:25:35

标签: java python mysql database csv

我们每天以CSV文件形式接收大约一千万行数据。该CSV文件包含大约5,000种产品的位置和价格数据。

有时CSV被更新,有时保持不变。 CSV中的数据是事实的来源(例如,我们始终希望在应用程序内部使用的数据)。

以下是CSV的摘要:

UUID,Location,Price
AAA,Melbourne,21.96
AAA,Sydney,32.43
BBB,Melbourne,23.43
BBB,Adelaide,32.43

我们需要将最新数据存储在MySQL数据库内。

以下是如何存储此数据的示例:

Location_Data:

ID,ProductID,Location,Price
1,1,Melbourne,21.96
2,1,Sydney,32.43
3,2,Melbourne,23.43
4,2,Adelaide,32.43

产品:

ID,UUID (and other fields not relevant to this question)
1,AAA
2,BBB

对于初始导入,我们使用MySQL LOAD DATA IN FILE。这是相当快的。过程如下:

  • 我们从数据库中获取所有产品
  • 我们将CSV的每一行与数据库中的产品进行匹配
  • 然后我们生成一个新的CSV文件,可以将其直接导入到location_data表中。

更新后的CSV文件可能包含新位置,更新价格或不再存在的位置。在所有这些情况下,我们都需要UPDATEINSERTDELETE

解决该问题...我们正在努力解决当我们收到已更改的新CSV文件时如何快速更新数据库的问题。

不幸的是,我们仅提出了两个对我们不起作用的选项:

  • 从数据库中获取数据,并对照CSV文件(逐行)进行检查。提取大量数据非常慢,然后再将其与CSV比较也非常慢。

  • 删除所有数据库数据并重新导入。不幸的是,这是不可能的(我们需要保留对数据所做的更改的历史记录。在删除并插入整个数据集时,我们将丢失该历史记录)。

关于我们如何设法加快速度的任何建议?

0 个答案:

没有答案