在内存中存储哈希

时间:2010-07-23 08:50:11

标签: performance perl serialization hash persistence

我有1 GB的表格文件,数据按列分隔。我已解析它并存储在哈希中。 后来我使用这个哈希来进行进一步的工作。但是在每次编译测试时开发我的代码时,执行“解析和存储到哈希”会导致我的程序变慢。

有什么办法可以存储它,所以我不需要一次又一次地编译它。

2 个答案:

答案 0 :(得分:2)

不是真的。必须以某种方式将该信息加载到内存中。然而,将散列对象序列化到磁盘可能会有所帮助,因为反序列化可能比您的代码更快。

您可以查看freezecheck wikipedia on Serialization以获取进一步的提示。

结帐perl documentation for FreezeThaw

use FreezeThaw qw(freeze thaw cmpStr safeFreeze cmpStrHard);
$string = freeze $data1, $data2, $data3;
...
($olddata1, $olddata2, $olddata3) = thaw $string;
if (cmpStr($olddata2,$data2) == 0) {print "OK!"}

现在您需要做的就是将$string存储在一个文件中,一旦解析,阅读它并thaw它!

答案 1 :(得分:0)

Perl中的数据不是以非常有效的方式存储的。在最坏的情况下,可能需要多达几十(20-80)倍的内存。请注意,只有在最坏的情况下才会发生。如果您的1GB数据集会发生这种情况,您应该注意到。所以我认为不是你的情况。 Perl数据结构非常快,它们通常以内存的速度进行交换。如果你的案件中的记忆金额是合理的,你可以处理它并使用recommendedDaren ThomasStorable推荐的daxim的直接方法。

如果您测量的情况下内存消耗太大,您可以使用一些嵌入式键/值存储。如果您在加载后不会修改数据,则可以使用比CDB_File快一点的BerkeleyDB,但后者允许您在运行时修改数据。您也可以稍后选择,因为它是更常见和灵活的解决方案。

相关问题