我们每天以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文件可能包含新位置,更新价格或不再存在的位置。在所有这些情况下,我们都需要UPDATE
,INSERT
和DELETE
。
解决该问题...我们正在努力解决当我们收到已更改的新CSV文件时如何快速更新数据库的问题。
不幸的是,我们仅提出了两个对我们不起作用的选项:
从数据库中获取数据,并对照CSV文件(逐行)进行检查。提取大量数据非常慢,然后再将其与CSV比较也非常慢。
删除所有数据库数据并重新导入。不幸的是,这是不可能的(我们需要保留对数据所做的更改的历史记录。在删除并插入整个数据集时,我们将丢失该历史记录)。
关于我们如何设法加快速度的任何建议?