并发购票系统开发(第一天)
一.创建数据库
这个没什么难点,不过有几个坑,就是表面上没错,实际上会导致最终结果很烂的点
最重要的一点:创建数据库的时候禁止使用物理外键!!!!!只是因为当之后数据过多的时候要分库,如果使用物理外键,在不同设备上根本无法使用原有的外键,最后会有很多问题
就这么多
二.搭建python异步后端项目骨架
主要分为四个步骤:
步骤一:环境依赖和配置文件
生成requirements.txt和app/config.py
(注意!!!这里会牵扯到数据库的密码,不要明文显示!!!建议配合使用.env文件自动读取,这样以后分享代码也不会暴露)
框架采用 FastAPI:python专用,主打接口开发的高性能现代web框架
异步引擎使用 uvicorn:专用来跑FastAPI这类异步接口框架,承载FastAPI的运行引擎
校验使用pydantic:自动化实现数据校验,类型转换,生成错误信息等多功能
这是几个主要的,还有一些根据ai生成的就能用了
步骤二:创建核心异步数据库连接池
创建app/database.py文件
采用create_async_engine搭配AsyncSession,专门用于异步数据库连接
这样做:async_engine专门用于建立连接,整体共用,每次前端请求时取一条连接创建asyncsession连接,用完即归还
可以防止单线程的时候大量数据并发,性能差,可以最大程度发挥FastAPI的异步接口
步骤三:将SQL转化为python异步ORM模型
创建app/models.py文件,将数据库中的表转化为SQLAlchemy 2.0 ORM模型
这样可以保证:不用手写原生SQL,只用python类/对象操作数据库表,这样的话就将数据库负责的内容减少到很少的一部分连接,可以很大程度减少数据库的压力
这里的压力指的是“多并发”带来的压力,不是数据量多少带来的压力,如果数据量很多,多并发也救不了
(注意!!!数据类型使用decimal,防止精度丢失!!!)
步骤四:创建脚本文件测试一下
创建一个init_data.py文件,初始化车次,用户和一百个初始空闲座位
这里注意!!!由于SQLAlchemy在1.4之前没有异步版本,只有同步,所以可能在运行一些语句的时候会直接卡死,可以使用conn.run_sync()包裹同步反射逻辑,将同步代码丢进独立线程执行,不阻塞主循环
浙公网安备 33010602011771号