Python 数据库技术第三讲

Preview:

DESCRIPTION

Python 技术内训,数据库部分的第三讲 从SQLAlchemy谈面向存储层和数据库的开发

Citation preview

. . . . . .

Python 与数据库

刘鑫 <liuxin2@kingsoft.com>

第三讲:从 SQLAlchemy 谈存储层架构

September 1, 2010

. . . . . .

前情回顾

. . . . . .

Python 访问关系数据库有多种方法

. . . . . .

基础技能

标准接口 DBAPI

. . . . . .

有争议但值得关注

ORM

. . . . . .

推荐的 ORM

SQLAlchemy

. . . . . .

常见的与数据库有关的问题

. . . . . .

开发效率和代码质量

. . . . . .

运行效率

. . . . . .

其实这个不太常见

可移植性

. . . . . .

可重用性

. . . . . .

资源管理

. . . . . .

解决之道?

. . . . . .

良好的抽象

. . . . . .

适当组件化

. . . . . .

ORM and DAL

. . . . . .

Python 数据库访问工具的典范

. . . . . .

SQLAlchemy

. . . . . .

SQLAlchemy

Figure: SQLAlchemy 组成

. . . . . .

模型层

. . . . . .

模型层

Mapping 映射−−−→

{业务模型, 用户自定义的业务类Model, 数据模型

. . . . . .

模型层

数据模型 −→

Table, 数据表映射Field, 字段及复合列Query, 允许映射查询Relation, 各种关系

. . . . . .

映射工具

Mapping 将业务规则映射到模型

. . . . . .

映射工具

MetaData 将模型与操作映射到 Engine

. . . . . .

映射工具

MetaData 反射元信息

. . . . . .

会话层

. . . . . .

会话层

Session 是 SQLALchemy 体系中的架构核心

. . . . . .

可以管理多个 Engine

. . . . . .

分布式事务

. . . . . .

两阶段提交

. . . . . .

分布式事务

eng ine1 = c r e a t e e n g i n e ( ’ p o s t g r e s q l : // db1 ’ )eng ine2 = c r e a t e e n g i n e ( ’ p o s t g r e s q l : // db2 ’ )S e s s i o n = se s s i onmake r ( twophase=True )S e s s i o n . c o n f i g u r e ( b i nd s={User : eng ine1 , Account : eng ine2 })s e s s i o n = S e s s i o n ( )

. . . . . .

SQL Expression

. . . . . .

智能数据对象

. . . . . .

连接层

. . . . . .

Engine 可以作为会话引擎

. . . . . .

Engine

也可以独立使用

. . . . . .

Engine

连接池

. . . . . .

Engine

Connection 管理

. . . . . .

Engine

数据库元信息

. . . . . .

Connection

. . . . . .

Connection

强化的 DBAPI Connection+cursor

. . . . . .

Connection

参数安全

. . . . . .

Connection

更友好的结果集

. . . . . .

Connection

完整的事务控制

. . . . . .

Connection

可理解模型操作

. . . . . .

经典示范

. . . . . .

Pylons

. . . . . .

turbogears

. . . . . .

怪 · 力 · 乱 · 神

. . . . . .

Socrateshttp://bitbucket.org/March/socrates

. . . . . .

doctest

. . . . . .

Storage. init

运行时建模

. . . . . .

Storage.registeType

动态建模

. . . . . .

Subject

自定义容器

. . . . . .

Segment/Subject

业务规则封装

. . . . . .

一家之言

面向数据库的架构设计

. . . . . .

有效管理资源

. . . . . .

合理建模,防止过度设计

. . . . . .

保持敏捷,不过度优化

. . . . . .

基于运行时环境设计

. . . . . .

框架?

. . . . . .

操作系统?

. . . . . .

HTTP 服务和加载模式?

. . . . . .

多线程 vs 多进程?

. . . . . .

多进程

尽快完成

. . . . . .

多进程

保持和控制资源

. . . . . .

多进程

干净回收

. . . . . .

多线程

资源池

. . . . . .

多线程

警惕争用与死锁

. . . . . .

多线程

防止并发过度

. . . . . .

如何管好数据,是一门艺术

. . . . . .

谢谢大家!

再见!

Recommended