我的Python应用程序当前使用python-memcached API在memcached中设置和获取对象。该API使用Python本地的pickle模块来序列化和反序列化Python对象。
这个API使得在memcached中存储嵌套的Python列表、字典和元组变得简单快捷,并且将这些对象读回应用程序时完全透明——它只是正常工作。
但我不想仅限于使用Python,如果所有的memcached对象都使用pickle进行序列化,那么使用其他语言编写的客户端就无法工作了。
以下是我考虑过的跨平台序列化选项:
- XML-主要优点是它易于阅读,但在这个应用程序中并不重要。而且XML占用很多空间,解析起来也很昂贵。
- JSON-看起来是一个很好的跨平台标准,但我不确定它在从memcached读回时是否保留了对象类型的特征。例如,根据这篇文章,当使用simplejson时,元组会被转换为列表;而且似乎向JSON结构添加元素可能会破坏写入旧结构的代码。
- Google Protocol Buffers-我对这个非常感兴趣,因为它似乎非常快速、紧凑——至少比XML小10倍,而且似乎设计用于支持扩展结构而不破坏旧代码。
考虑到这个应用程序的优先级,什么是memcached的理想对象序列化方法?
- 跨平台支持(Python、Java、C#、C++、Ruby、Perl)
- 处理嵌套数据结构