从4GB文件创建trie(JSON)的最快方法,只使用1GB内存?

时间:2014-12-10 16:40:42

标签: java node.js

也许我这样做的方式不对:

我有一个4GB(3300万行文本)文件,其中每行都有一个字符串。

我正在尝试创建一个trie - >算法有效。 问题是Node.js的进程内存限制为1.4GB,所以当我处理550万行时,它会崩溃。

为了解决这个问题,我尝试了以下方法:

而不是1 Trie,我创建了许多Tries,每个Tries都有一个字母范围。 例如: aTrie --->以a开头的所有单词 bTrie --->以b开头的所有单词 等...

但问题是,我仍然无法在读取文件时将所有对象保留在内存中,所以每次读取一行时,我都会从磁盘加载/卸载一个trie。当有更改时,我删除旧文件,并将更新后的trie从内存写入磁盘。

这是超级慢!甚至在我的带有SSD的macbook pro上。

我考虑用Java编写这个,但是后来出现了将JAVA对象转换为json的问题(使用C ++等问题)。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您可以使用哈希函数创建任意数量的子查询,而不是使用26个尝试。这样,您必须从磁盘读取的数据量限制为您确定的子Trie的大小。此外,您可以将最近使用的子Tries缓存到内存中,然后在IO仍然存在问题的情况下在后台异步保留更改到磁盘。

答案 1 :(得分:0)

您可以通过指定以下选项来扩展节点进程使用的内存大小限制;

ps:大小以mb为单位。

node --max_old_space_size=4096

有关更多选项,请参阅: https://github.com/thlorenz/v8-flags/blob/master/flags-0.11.md