2011-09-19 88 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