Python對象持久化學習整理

隨着項目的深刻,python對象持久化問題也隨之而來。而在這以前,對於python對象持久化還停留在pickle時代,而這已沒法知足當前項目發展的須要了,因而只好藉助google瘋狂的學習了一把,同時也對學習的內容做個小小的記錄。html

通過學習整理,目前已知有以下的方式來實現python對象持久化:java

python庫已提供的python對象持久化方法python

一、使用dbhash/bsddb(bsddb在python3.x已經廢棄), gdbm, dbm, dumbdbm通用型anydbm接口(anydbm經過whichdb模塊自動適配當前系統環境支持的dbm模塊),提供python字符串存儲到個相似dictionary文件對象介質功能;linux

二、marshal和pickle以及cPickle(pickle的c編譯版本),都具有存儲到介質上的功能;但marshal僅支持基本數據類型(dictionary、list、tuple、numbers、string),且不保證python不一樣版本之間的兼容性;pickle除了能夠處理基本數據類型外還能夠處理循環、遞歸引用對象、用戶定義的類和實例以及可移植性(pickle文件結構獨立於機器的體系結構)等;程序員

三、爲解決pickle命名、查找以及併發訪問持久性對象問題,python庫在cPickle基礎上提供了shelve模塊,shelve模塊使用anydbm模塊適配系統支持的dbm模塊,後使用cPickle完成對象存儲,同時shelve模塊支持對dbm文件併發讀;數據庫

第三方提供的python對象持久化方法python3.x

一、ZODB:ZODB是一個健壯的、多用戶和麪向對象的數據庫系統,它可以存儲和管理任意複雜的python對象,並提供事務操做和併發控制支持;併發

二、Durus:Quixote團隊的做品,能夠看做是輕量級版本的ZODB實現,純開源的Python實現,並提供一個可選的C語言插件類;less

三、Missile BD: 是一種Python的、簡潔高效的DBMS,適用於Stackless Python環境。同時須要說明的是它是併發性能極高的Eurasia3項目的一個子項目;性能

四、ODB(spugdb):一個輕量級的純Python實現的Python對象數據庫系統,支持嵌套事務、對象模型、遊標和一個簡單的相似X-Path的查詢語言,它的前身只是圍繞Berkeley DB作的Python包裝,如今已逐步淘汰對Berkeley DB的支持;

五、PyPerSyst:它是由用java實現的Provayler到Python的移植實現,PyPerSyst將整個對象系統保存在內存中,經過將系統快照pickle到磁盤以及維護一個命令日誌(經過日誌能夠從新應用最新的快照)來提供災難恢復。所以PyPerSyst應用程序會受到可用內存的限制,但好處是本機對象系統能夠徹底裝入到內存中,於是速度極快;

六、PyDbLite:Python實現的快速的、無類型的內存數據庫引擎,使用Python語法代替SQL語法,支持Python2.3以及以上版本,同時提供對SQLite和MySQL支持;

七、buzhug:Python實現的快速的數據庫引擎,使用Python程序員以爲直觀的語法,數據存儲在磁盤上;

八、Gadfly:它是一個簡單的關係數據庫系統,使用Python基於SQL結構化查詢語言實現。

針對以上Python對象持久化方法,大部分都是基於pickle爲基礎來實現的;固然文中並無提到Python對象使用MSSQL、MySQL、Oracle、DB二、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

相關文章
相關標籤/搜索