现在我有一个记录查找表条目的文件。如果条目数量很少,我可以简单地将此文件加载到STL映射中并在我的代码中执行搜索。但如果有很多条目怎么办?如果我以上述方式执行此操作,可能会导致内存不足等错误。我在这里听你的意见......
P.S。我只是想在不将所有条目加载到内存中的情况下执行搜索。
Key-value数据库可以解决这个问题吗?
答案 0 :(得分:0)
您最终必须从硬盘驱动器加载数据,但如果表格很大,则无法通过它进行线性搜索,因此无法放入内存中,因此:
对于典型的数据库管理系统来说,这是一个非常简化的方案,因此您可能希望使用MySQL,PostgreSQL,MsSQL,Oracle或其中任何一个系统。 如果这是一个研究项目,那么在完成搜索问题之后,请考虑优化线性操作(通过切换到二分搜索等)和表(真实数据库使用平衡树结构,哈希表等)。
答案 1 :(得分:0)
一种方法是将文件中的数据重组为组。
例如,让我们考虑一个完整的语言词典。通常,字典太大而无法完全读入内存。所以一个想法就是用第一个字母对单词进行分组。
在此示例中,您将首先根据字母阅读相应的组。因此,如果您要搜索的单词以" m"开头,您将加载" m"分组到记忆中。
还有其他分组方法,如word(key)长度。也可以有子组。在这个例子中,你可以划分" m"按字长或第二个字母分组。
分组后,您可能希望将数据写回另一个文件,这样您就不必再修改数据了。
有很多方法可以在文件上存储组,例如使用"部分"标记。这些将是另一个问题。
这里的想法,包括@ 047,是为了最有效的搜索来构建数据,给你的内存限制。