2012-07-16 56 views
4

Erlang中是否有文本壓縮庫?當處理很長的字符串時,壓縮字符數據可能是有利的。有沒有人壓縮過的文字或想法在Erlang中做到這一點?Erlang中的文本壓縮

我想用zip模塊的,但不是對文件進行操作,我在內存中的工作是這樣的:

compress(LargeText)-> 
    Binary = list_to_binary(LargeText), 
    {ok,{_,Zipped}} = zip:zip("ZipName",[{"Name",Binary}],[memory]), 
    Zipped. 

然後我會unzip文本回內存,當我需要它。就像這樣:

{ok,[{"Name",Binary}]} = zip:unzip(Zipped,[memory]). 

我二郎應用程序應該是在大的文本可能必須通過到,進出存儲系統的中間層的一部分。存儲系統旨在存儲大量文本。爲了優化存儲,在發送之前需要對其進行壓縮。假設文本值類似於Oracle數據庫中的CLOB數據類型。我在想,如果我把壓縮和erlang:garbage_collect/0結合起來,我可以把它拉下來。

或者如果在Erlang中不可能,或許可以使用system call通過os:cmd({Some UNIX script}),然後我會在Erlang中獲取輸出?如果有更好的方法,請顯示它。

回答

8

有一個zlib module for Erlang,它支持內存中的壓縮和解壓縮。

+0

謝謝@馬克+阿德勒 – 2012-07-17 05:55:29

+0

我已經看到了這一點。但可能認爲它可能與'zip'模塊 – 2012-07-17 05:57:01

+0

差別不大。它有很大不同。請閱讀文檔。這是你正在尋找的機器人。它壓縮和解壓縮不使用zip格式的緊湊流,也不攜帶有關文件名等信息。您還可以閱讀zlib手冊(http://zlib.net/manual.html)以及使用示例zlib(http://zlib.net/zlib_how.html)。 – 2012-07-17 16:35:55

3

你可以考慮使用snappy壓縮比zip更快,特​​別是對於解壓縮。

編輯: 現在我使用LZ4了很多,我很高興。它有一個很好的和可讀的代碼,簡單的格式,維護得很好,甚至比Snappy還要快。

+0

謝謝@ Hynek-Pichi-Vychodil – 2012-07-17 05:56:04