Django 线上项目 项目启动时使用了大量外键,一对一,一对多,多对多的关联, 现在需要去除外键依赖,该怎么去除?

2022-03-02 17:28:49 +08:00
 bigpigB
也是接手的 Django 线上项目 ,外键确实限制后续太多的发展,如何慢慢摘掉外键的依赖?
2597 次点击
所在节点    Python
5 条回复
cominghome
2022-03-02 17:35:32 +08:00
如果你说的是 db_constraint=False 这样的改动,一个个 model 改就完事了,如果是想从设计上杜绝外键,我劝你三思。。。
IurNusRay
2022-03-02 17:36:41 +08:00
在模型字段中设置属性 db_constraint=False,然后迁移?
youngce
2022-03-02 17:45:53 +08:00
@IurNusRay #2
@cominghome #1

借问一句 sqlalchemy 有没有 db_constraint=False 这种设置,接了个 flask 的项目。。。
allisone
2022-03-03 10:16:44 +08:00
如果能在程序端做好数据约束,可以设置 db_constraint=False
akaHenry
2022-03-03 16:09:30 +08:00
> 正经解决:

1. 接手项目, 老代码不要改设计. 可以重构, 但没必要. 先做隔离.
2. 新增代码, 拆分微服务. 跟老代码切分开. 新 /旧服务通信走 HTTP rest API or gRPC. 不要产生内部模块代码依赖.
3. db 新表设计, 禁止使用物理外键. Django 这种东西. 不适合做伤筋动骨的改造. 徒劳.
4. 关于性能上, Python+Django+Celery+RabbitMQ+Gunicorn 全套打完, 如果还不行. 就老老实实切 Go. 哈哈.

> 不正经解决:

换 Go 吧. 2333
老代码不动, 新业务用 Go 写, 再 HTTP / gRPC / WS 对接.
Python + Django 就不适合做大型业务. 只适合 CMS 这种快 /糙 /猛的东西.
如果弃用自带 ORM 的便利性(比如外键), 还用 Django 做啥. 哈哈.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/837499

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX