Python对象持久化学习整理

随着项目的深入,python对象持久化问题也随之而来。而在这之前,对于python对象持久化还停留在pickle时代,而这已无法满足当前项目发展的需要了,于是只好借助google疯狂的学习了一把,同时也对学习的内容作个小小的记录。

经过学习整理,目前已知有如下的方式来实现python对象持久化:

python库已提供的python对象持久化方法

1、使用dbhash/bsddb(bsddb在python3.x已经废弃), gdbm, dbm, dumbdbm通用型anydbm接口(anydbm通过whichdb模块自动适配当前系统环境支持的dbm模块),提供python字符串存储到个类似dictionary文件对象介质功能;

2、marshal和pickle以及cPickle(pickle的c编译版本),都具备存储到介质上的功能;但marshal仅支持基本数据类型(dictionary、list、tuple、numbers、string),且不保证python不同版本之间的兼容性;pickle除了可以处理基本数据类型外还可以处理循环、递归引用对象、用户定义的类和实例以及可移植性(pickle文件结构独立于机器的体系结构)等;

3、为解决pickle命名、查找以及并发访问持久性对象问题,python库在cPickle基础上提供了shelve模块,shelve模块使用anydbm模块适配系统支持的dbm模块,后使用cPickle完成对象存储,同时shelve模块支持对dbm文件并发读;

第三方提供的python对象持久化方法

1、ZODB:ZODB是一个健壮的、多用户和面向对象的数据库系统,它能够存储和管理任意复杂的python对象,并提供事务操作和并发控制支持;

2、Durus:Quixote团队的作品,可以看作是轻量级版本的ZODB实现,纯开源的Python实现,并提供一个可选的C语言插件类;

3、Missile BD: 是一种Python的、简洁高效的DBMS,适用于Stackless Python环境。同时需要说明的是它是并发性能极高的Eurasia3项目的一个子项目;

4、ODB(spugdb):一个轻量级的纯Python实现的Python对象数据库系统,支持嵌套事务、对象模型、游标和一个简单的类似X-Path的查询语言,它的前身只是围绕Berkeley DB做的Python包装,现在已逐步淘汰对Berkeley DB的支持;

5、PyPerSyst:它是由用java实现的Provayler到Python的移植实现,PyPerSyst将整个对象系统保存在内存中,通过将系统快照pickle到磁盘以及维护一个命令日志(通过日志可以重新应用最新的快照)来提供灾难恢复。因此PyPerSyst应用程序会受到可用内存的限制,但好处是本机对象系统可以完全装入到内存中,因而速度极快;

6、PyDbLite:Python实现的快速的、无类型的内存数据库引擎,使用Python语法代替SQL语法,支持Python2.3以及以上版本,同时提供对SQLite和MySQL支持;

7、buzhug:Python实现的快速的数据库引擎,使用Python程序员觉得直观的语法,数据存储在磁盘上;

8、Gadfly:它是一个简单的关系数据库系统,使用Python基于SQL结构化查询语言实现。

针对以上Python对象持久化方法,大部分都是基于pickle为基础来实现的;当然文中并没有提到Python对象使用MSSQL、MySQL、Oracle、DB2、SQLite等数据库来实现的方法,这是由于Python已经提供了对目前已知数据库(基本全覆盖)的完整的支持,因此本文并未对Python对象数据库持久化部分进行描述。

本文仅对Python对象持久化的方法进行整理,后面根据需要会对各种序列化的方法予以简要介绍,如果你有兴趣也可以联系我。

由于本文是通过阅读官方文档以及相应中文资料整理而成,因此难免会出现疏漏,有心的童鞋如果发现文中描述有误,请留言;也欢迎各位和我一起探讨Python。

最后也欢迎各位进行转载,不过转载请注明出处,谢谢。

参考资料:


Python 持久性管理:http://www.ibm.com/developerworks/cn/linux/l-pypers/ 


ZODB入门:http://www.ibm.com/developerworks/cn/aix/library/au-zodb/


python对象序列化或持久化的方法http://hi.baidu.com/jasonlyy/blog/item/927efbde1f9155a8cd116684.html

你可能感兴趣的:(Python对象持久化学习整理)