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




                .   .   .   .   .   .
分布式事务




        .   .   .   .   .   .
两阶段提交




        .   .   .   .   .   .
分布式事务




 e n g i n e 1 = c r e a t e e n g i n e ( ’ p o s t g r e s q l : / / db1 ’ )
 e n g i n e 2 = 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 = s e s s i o n m a k e r ( t w o p h a s e=True )
 S e s s i o n . c o n f i g u r e ( b i n d s ={U s e r : e n g i n e 1 , Account : e n g i n
 session = Session ()




                                                         .    .     .     .     .     .
SQL Expression




                 .   .   .   .   .   .
智能数据对象




         .   .   .   .   .   .
连接层




      .   .   .   .   .   .
Engine 可以作为会话引擎




             .    .   .   .   .   .
Engine




         也可以独立使用




                   .   .   .   .   .   .
Engine




         连接池




               .   .   .   .   .   .
Engine




         Connection 管理




                         .   .   .   .   .   .
Engine




         数据库元信息




                  .   .   .   .   .   .
Connection




             .   .   .   .   .   .
Connection




             强化的 DBAPI Connection+cursor




                                   .   .   .   .   .   .
Connection




             参数安全




                    .   .   .   .   .   .
Connection




             更友好的结果集




                       .   .   .   .   .   .
Connection




             完整的事务控制




                       .   .   .   .   .   .
Connection




             可理解模型操作




                       .   .   .   .   .   .
经典示范




       .   .   .   .   .   .
Pylons




         .   .   .   .   .   .
turbogears




             .   .   .   .   .   .
怪·力·乱·神




          .   .   .   .   .   .
Socrates
http://bitbucket.org/March/socrates




                          .   .   .   .   .   .
doctest




          .   .   .   .   .   .
Storage. init




                运行时建模




                        .   .   .   .   .   .
Storage.registeType




                      动态建模




                             .   .   .   .   .   .
Subject




          自定义容器




                  .   .   .   .   .   .
Segment/Subject




                  业务规则封装




                           .   .   .   .   .   .
一家之言




       面向数据库的架构设计




                .   .   .   .   .   .
有效管理资源




         .   .   .   .   .   .
合理建模,防止过度设计




          .   .   .   .   .   .
保持敏捷,不过度优化




         .   .   .   .   .   .
基于运行时环境设计




            .   .   .   .   .   .
框架?




      .   .   .   .   .   .
操作系统?




        .   .   .   .   .   .
HTTP 服务和加载模式?




            .   .   .   .   .   .
多线程 vs 多进程?




              .   .   .   .   .   .
多进程




      尽快完成




             .   .   .   .   .   .
多进程




      保持和控制资源




                .   .   .   .   .   .
多进程




      干净回收




             .   .   .   .   .   .
多线程




      资源池




            .   .   .   .   .   .
多线程




      警惕争用与死锁




                .   .   .   .   .   .
多线程




      防止并发过度




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




          .    .   .   .   .   .
谢谢大家!




        再见!




              .   .   .   .   .   .

Python 数据库技术第三讲