2011-09-19 69 views
4

我正在寫一個運行在相當慢的手機(以及其他平臺)上的python程序。使用pickle在手機上讀取數據大約需要2秒,simplejson速度要慢得多。電話運行python 2.5.4python:快速輕量級持久性

數據位於一組類中的各種列表和字典中。我可以相對快速地將json格式轉換爲json格式。大部分時間似乎在pickle或json處理中,因爲只是讀取或寫入json或pickle文件比使用pickle或json快得多。

該程序必須讀取整個數據集並定期寫入。

我想我可以創建一些方法將數據轉換爲文本,看看是否更快,但重新發明輪子很少是一個值得的努力。

還有什麼其他的存儲替代方案可能有意義?

+0

我們在這裏談論的字節數據有多少? – cheeken

+0

你正在使用什麼'json'模塊? – lunaryorn

+0

@cheeken:可能在100kb - 200kb範圍內 – foosion

回答

4

那麼marshal模塊呢?根據these benchmarks它比鹹菜快得多。 ,使非常確定閱讀和理解文檔頂部的警告。

此外,只是爲了確保:您是否使用cPickle?如果沒有,請嘗試 - 它比pickle快得多。

此外,由於您的數據非常簡單,您可以使用pyrex編寫自己的數據。如果你想走這條路,MsgPack serializer將是一個很好的起點。

+3

請不要使用'marshal'。格式沒有記錄,可能會發生變化,受支持的類型有限,以及與損壞的數據有關的不安全。 – lunaryorn

+0

如果OP正在處理受控環境,似乎並不是一個問題(也就是說,因爲他們可以對數據進行平凡的校驗並確保Python的版本不會改變)。儘管如此,我已經更新了我的答案並提出了警告。 –

+0

來自我自己的x86桌面上的python 2.7的任意測試:編組真的非常快(比cpickle快14倍),並且cpickle比json快大約30%。 – lunixbochs