我有以下问题。
我正在使用和API连接到某个地方,并将数据作为输入流。
目的是在删除重复的行后保存数据。
由第10、15、22列定义的重复项。

我正在使用多个线程获取数据。
目前,我先将数据保存到一个csv文件中,然后删除重复项。
我要在读取数据时执行此操作。
数据量约为1000万条记录。
我可以使用的内存有限。
该机器具有32gb的内存,但是我受到限制,因为还有其他应用程序正在使用它。

我在这里阅读了有关使用哈希映射的信息。
但是我不确定我是否有足够的内存来使用它。

有没有人建议如何解决这个问题?

最佳答案

哈希图将至少消耗与原始数据一样多的内存。因此,对于数据集的大小来说,这可能是不可行的(但是,应该检查一下,因为如果是这样,这是最简单的选择)。

我要做的是将数据写入文件或数据库,为要进行重复数据删除的字段计算哈希值,然后将哈希值存储在内存中,并带有对该文件的适当引用(例如,原始值所在的字节索引)在书面文件中)。引用当然应该尽可能小。

当您击中散列匹配项时,请查找原始值并检查其是否相同(因为不同值的散列值可能会合在一起)。

现在的问题是,您期望有多少重复。如果您期望匹配很少,那么我会选择一种便宜的写入和昂贵的读取解决方案,即将所有内容线性地转储到一个平面文件中并从该文件中进行读取。

如果您期望有许多匹配项,则可能是相反的方式,即拥有一个索引文件或一组文件甚至一个数据库(确保它是一个数据库,其中写操作不太昂贵)。

09-26 17:56
查看更多