0

我在 MySQL 中有一个大数据集(用户、公司、联系人)?大约 100 万条记录。

现在我需要从大约 100000 条记录的导入文件 (csv) 中导入新用户、公司、联系人。我从文件中记录了所有三个要素(用户、公司、联系人)的所有信息。此外,在生产中我不能使用加载数据(只是没有那么多权利:()。

因此,应该将三个步骤应用于该数据集。- 与现有的数据库数据进行比较 - 更新它(如果我们会在上一步找到一些东西) - 并插入新的记录

我在服务器上使用 php 来做到这一点。我可以看到两种方法:

  • 一次从文件中读取所有数据,然后使用这个 BIG 数组并应用这些步骤。
  • 或从文件中逐行读取并通过步骤传递每一行

哪种方法更有效?按 CPU、内存或时间使用

我可以使用交易吗?或者它会减慢整个生产系统?

谢谢。

4

3 回答 3

2

尽管读取整个文件会稍微快一些,但CPU 时间/时间不会太多。但是,对于这么大的数据集,将所有记录读入内存所需的额外内存将大大超过时间优势——我肯定会一次处理一行。

于 2012-05-14T08:41:33.967 回答
0

您是否知道 phpMyAdmin 具有用于大型 SQL 文件的“可恢复导入”的漂亮功能?

只需在部分导入部分选中“允许中断导入”即可。瞧,PhpMyAdmin 将停止并循环,直到所有请求都被执行。

仅“使用工具”而不是“重新发明轮子”可能更有效

于 2012-05-14T08:41:16.113 回答
0

我认为,第二种方法更容易接受:

  1. 创建更改列表(它将是一个单独的表)
  2. 逐行更新(例如,使用“updflag”字段将每一行标记为已更新)
  3. 使用事务在后台执行此过程。
于 2012-05-14T08:57:49.747 回答