我有一个ETL管道,它从多个源提取数据并将其存储在数据库表(具有固定模式)中。
我还有一个单独的FASTAPI服务,它允许我通过REST端点查询数据库,调用该端点是为了在前端(ReactTS)显示数据。
现在的问题是,我的ETL管道、FASTAPI服务和前端都有一个单独的模式版本,在需要更改数据模式的情况下,必须对所有3个服务上的模式规范进行更改。
我曾考虑过创建一个包含该模式的python包,但这只能在使用Python的服务之间共享,并且我的前端仍然必须保留自己的模式版本。
是否存在某种我应该拥有的"模式服务"?我可以做些什么来减少这种耦合?
2条答案
按热度按时间jgwigjjp1#
我喜欢这个模式:
也就是说,磁盘上的数据库模式是事实的来源,并且代码总是动态地内省它以了解模式细节。例如,这很好地适应了新添加的列。
有了这样一个表对象,您可以轻松地迭代它的列:
这应该足以让您创建一个适合react类型脚本使用的JSON dict。
vqlkdk9b2#
对于fastAPI + frontend =〉,使用swagger,其中基于pydantic模型自动为frontend生成模式(为了更好的一致性,您可以向每个API端点添加版本,并在该端点的模式更改时更改版本)
对于fastAPI + database + elt =〉,我们使用'mono repository'.一个git repo和ORM数据库架构在libs文件夹+fastAPI微服务文件夹(带有FastAPI应用程序的Dockerfile)+etl服务文件夹(带有enother Dockerfile)中,并且在一次提交中,您可以一致地更改elt脚本+ fastAPI应用程序+添加您的数据库迁移。