Nova-DB分析

原文:http://wenku.baidu.com/view/5a221920915f804d2b16c1ec.html

Nova-DB分析

1. 文件组织关系图

 

 

代码分析
1.1 nova.db. base   (compute,network等服务的manager调用)

不同的nova.service在初始化的时候会调用自己的manager_class进行初始化,以nova-computer为例来说,它调用的nova.compute.manager.ComputeManager进行初始化,而该最终会调用nova.db.base.Base()类初始化。初始化时会利用utils.import_object(db_driver)函数将nova.db.api模块载入进来赋值给self.db。即可通过self.db调用nova.db.api中的数据库操作接口。

1.2 nova.db.api  (载入接口模块,该模块提供数据库对外接口)

该文件为对数据库操作的的API接口,该文件中每一项API操作都会调用IMPL相应的的函数去执行。例如“service_get_all”API函数会调用IMPL. service_get_all()去执行。而IMPL为载入的nova.dp.sqlalchemy.api模块。调用IMPL. service_get_all()即调用nova.dp.sqlalchemy.api模块中service_get_all()去执行数据库操作。

1.3 nova.dp.sqlalchemy.api   (数据库对外接口的实现)

该文件为数库操作API的实现。get_session()调用nova.dp.salalchemy.session建立同数据库的会话“session”,通过调用nova.dp.salalchemy.moduls中相应类的构造函创建表,相关类,并将映射到类。然后调用SQLALChemy的相应操作实现对数据库的操作。

1.4 nova.db.sqlalchemy.session  (依据SQLALchemy用法,实现创建数据库的“engine”和“session”)创建。)

该文件主要获取同数据库的session,首先通过函数get_engine()获取engine,然后调用get_maker(engine)获取Session类,最后实例化Session获得session。

1.5 nova.db.sqlalchemy.models    (依据SQLALchemy用法,实现数据库中的表的创建和映射操作”)

该文件中定义了nova项目中所有用到的表的结构,利用SQLALChemy的declarative_base实现表,类的创建,以及表和类的映射。以类 ComputeNode为例,该类继承NovaBase和BASE类。其中BASE类为declarative_base创建的基类,而NovaBase类定义了所有表都具有的属性。其关系图为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值