【发布时间】:2021-09-28 07:38:04
【问题描述】:
我需要比较两个大的 csv 文件并找出差异。
第一个 CSV 文件如下:
c71f55b6c18248b8915d8a26
64b7d2d4eab74d7999a967c0
ceb792ad21054fe0a27ec410
95319566f9424c57ba2145f9
682a4fe26c154050b8f5c6f1
88e0209e2af74049ad9bf2bd
5c462b42763d41d7bb67029f
0ee74c227fc84e39a9ecc1da
66f7ab6f56374ba08d2fb92d
3ed793e35f9441b58562c9ba
baad81ac8ba54188afe63fb8
...
每一行只有一个 id,总行数约为 5 百万。 第二个 CSV 文件将类似于第一个,总行数为 3 百万。
我需要从第一个 csv 中删除第二个 csv 的 id 并将它们放入 MongoDb。当我将所有行放入内存然后比较两个 CSV 文件时,出现内存不足错误。我有 512Mb 的内存空间,每天至少会收到 30 个请求。 CSV 的行数正在变化 100 万至 1000 万。我可以同时收到两个请求,同时做同样的事情。
还有其他办法吗?
谢谢。
【问题讨论】:
-
不能直接在数据库中完成工作吗?
-
csv 文件中的数据是否已排序?那将是非常有益的。
-
我没有看到任何逗号,你为什么称它为 CSV 文件?
-
基本上,您需要为 ID 建立索引以便快速搜索,并且只在内存中保留可管理的子集。数据库已经在这样做了。 10M 正确索引的行不是那么多。许多数据库甚至提供原生 CSV 导入(甚至是 MongoDB)。