也许我这样做的方式不对:
我有一个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 ++等问题)。
有什么建议吗?
答案 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