我想编写一个节点应用程序,从纯文本文件中查找一堆黑名单。基本上都在代表不同类别的目录下,每个目录中都有一个名为的文件域其中有一堆用换行符分隔的域名。
因此,我的应用程序将查看这些文件,当我对特定域进行 API 调用时,它应该查看该目录下,找到域文件,然后确定该域是否在该域文件中列出。
我希望能够高效地完成这项工作,无论是内存方面还是计算方面。我一直在考虑几种方法。
- 首先,我尝试将整个文件加载到字典中,以域为键,以类别 ID 为值。这对内存来说非常糟糕,因为其中一些域文件大到 15 MB,而由于查找表的工作方式,生成的字典大约占用 250 MB 的内存。
- 我考虑过只保留类别 ID 到域列表的映射,然后打开文件并进行搜索,并保留本地缓存以防再次使用该域。但是,从磁盘角度来看,这显然非常低效,因为您在查找时会加载整个文件并搜索它。
- 我尝试使用 redis 来完成第一件事,但是它更慢。
我想知道是否有一些库可以使用索引,其中很多列表都在磁盘上,如果需要磁盘查找,索引可以轻松跳转到文件中的正确位置,然后可能将文件的部分内容缓存在内存中,而不是整个文件。似乎一定有一些库或应用程序适合这种情况。有什么想法吗?
谢谢