2017-05-26 21 views
0

我有一個文件,在那裏我保存了一個序列化的perl散列。在我目前的劇本,我加載值是這樣的:加載perl中的序列化變量

my $arrayref = retrieve("mySerializedFile"); 
my $a = $arrayref->[0]; 
my $b = $arrayref->[1]; 
my $c = $arrayref->[2]; 

我的問題是,該文件是關於1GB所以它需要大約10秒加載,然後第二更來執行某些操作。我想減少retrieve時間。

有沒有任何方法讓腳本執行之前加載此信息?我的意思是,mySerialiedFile不會被改變很長時間,所以如果我可以讓它始終加載在系統上會很好,並且會將我的執行時間從11secs提高到1.

+0

你有沒有考慮過打開文件並將其存儲在數據庫中? –

+0

確保您可以將其保存在內存中......不要退出該過程!當一個進程退出時,它的內存隨着它消失,所以這是將它保存在內存中的唯一方法。 ///但這意味着您必須爲程序提供一個可以進行查詢的接口,以便在需要時從轉儲中獲取所需的信息。我們在這裏談論很多地方。 ///但是你知道嗎?您可以通過將數據置於可首先查詢的格式來避免所有這些情況!將數據放入數據庫是您可以做到的一種方式。 – ikegami

+1

並且使用「基於文件的關係數據庫引擎」[SQLite](https://www.sqlite.org/),您不需要受管理的客戶端 - 服務器系統。 Perl的接口是[DBD :: SQLite](http://search.cpan.org/dist/DBD-SQLite/lib/DBD/SQLite.pm),並附帶了所需的全部內容。 – zdim

回答

0

按照評論,我使用了一個數據庫引擎,它提高了A LOT的執行時間,現在大約是5秒。