sqlalchemy和sqlalchemy-migrate在openstack的應用介紹

sqlalchemy:


1.  簡介:
(1)提供ORM(對象關係映射)能力的python庫,類似hibernate技術
(2)支持postgresql、mysql等主流關係數據庫
(3)用戶只需定義DB對應的類,通過操作類實例,即可通過sqlalchemy引擎轉換成標準sql語句,對DB進行操作
2. Openstack中的應用
(1)openstack各項目涉及關係數據庫的DB driver,基本都是使用sqlalchemy庫
(2)以nova爲例,數據庫table對應class定義在\nova\db\sqlalchemy\models.py中,例如class Instance(BASE, NovaBase) 。DB操作API定義在\nova\db\sqlalchemy\api.py中,通過調用sqlalchemy相關庫函數操作DB

sqlalchemy-migrate:

1.  簡介:
基於sqlalchemy庫,提供數據庫版本管控能力的python庫
2. Openstack中的應用
(1)通過引入了sqlalchemy-migrate框架,openstack各項目對各版本DB的變化能做到精細化控制,一定程度簡化了DB的跨版本升級。例如H版本較G版本新增了一張table,某個table新加了一個column,變更可以以兩個python文件(提供upgrade方法和degrade方法)形式管理起來。在G版本通過執行這兩個文件的upgrade方式實現添加table,在某table增加column,將DB升級到H的目的
約束及疑問:(1)此架構可處理table結構變更,但如果升級涉及業務數據變更或轉換(例如從G版本到H版本,某字段從字符串變更爲timestamp類型),是否也適用此架構來實現,有待商榷?(2)如果DB版本升級涉及“移除table,移除某column”,由於涉及數據損失,則如果升級回退,無法恢復數據
(2) sqlalchemy-migrate在2011年發佈了0.7.2版本後,就已經停止更新了,也不接受bugfix。因此openstack考慮引入Alembic(同樣由sqlalchemy-migrate的開發者負責開發和維護)替代sqlalchemy-migrate。在I版本Ceilometer會切換到Alembic,其他項目尚未看到計劃
(3) sqlalchemy-migrate提供豐富的API,例如upgrade(升級)、downgrade(降級)、db_version(查看最新版本)等

應用舉例

以在H版本的upgrade方式實現增加一張usb_devices表爲例:
1.在/nova/db/sqlalchemy/migrate_repo/versions增加一個217_add_usb_devices.py(H版本version號到216,故新增文件命令以217開頭),並實現upgrade(添加一張表)、degrade方法(刪除添加的表)
2. 執行nova-manage db sync命令,對nova DB進行升級。結果是在數據庫中即可見到產生的usb_devices表
3. 執行nova-manage db sync 216命令,對nova DB進行降級到216 Version的操作。結果是usb_devices表被刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章