java是从4GB文件创建trie(JSON)的最快方法,只需1GB的ram?
也许我做得不对:
我有一个4GB(3300万行文本)文件,其中每行都有一个字符串
我正在尝试创建一个trie->;该算法有效。 问题是这个节点。js的进程内存限制为1.4GB,所以当我处理550万行时,它就崩溃了
为了解决这个问题,我尝试了以下方法:
我创建了许多尝试,每个尝试都有一个字母表范围,而不是一个Trie。 例如: 阿特里--->;所有以a开头的单词 bTrie--->;所有以b开头的单词。。。 等等
但问题是,在读取文件时,我仍然无法将所有对象保留在内存中,因此每次读取一行时,我都会从磁盘加载/卸载一个trie。当发生更改时,我删除旧文件,并将更新后的trie从内存写入磁盘
这太慢了!甚至在我的带SSD的macbook pro上
我已经考虑用java编写这个,但是然后把java对象转换成JSON的问题出现了(使用C++等的问题)。p>
有什么建议吗
# 1 楼答案
您可以使用哈希函数创建任意数量的子尝试,而不是使用26次尝试。这样,您必须从磁盘读取的数据量就受限于您确定的子Trie的大小。此外,如果IO仍然存在问题,您可以将最近使用的子尝试缓存在内存中,然后在后台异步将更改持久化到磁盘
# 2 楼答案
通过指定以下选项,可以扩展节点进程使用的内存大小限制
ps:大小以mb为单位
有关更多选项,请参见: https://github.com/thlorenz/v8-flags/blob/master/flags-0.11.md