原文: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类定义了所有表都具有的属性。其关系图为: