跳至主要內容

G4Atlas从Flask迁移到Fastapi

Haopeng Yu大约 4 分钟

G4Atlas是我2022年写的Flask+postgres的生物学数据库项目。当时写的时候也是各种不熟悉,因为此前有Flask的经验,因此写起来还算顺利。之后这个服务器商各种BUG,但是迁移是个大问题,再加上太忙,以至于每次都放弃。今天借助AI,终于完成了全部的重写,感叹生成式AI对于开发帮助实在是太大了。

  • 一大堆IDEA等于放弃
  • AI好厉害
  • 一个个解决

1. 迷失在代码堆

之前的梦想就是自己做的数据库可以发表在NAR上,这个也是大多数生信人的梦想吧。

非常幸运,2022年我的数据库G4Atlas被发表了。这个是我做的第二个数据库,第一个是RSVdb,现在已经年久失修同时我没权限,无能为力。这次我用的还是Flask技术栈,因为此前有经验;数据库选择了Postgres,前端用Vue3写的。虽然可能数据库文章对于生信人找工作不太有帮助,但是我真的非常开心。

之后总想不断的更新数据库,加入新的数据。又一次有很的文章出来了,我做了全部处理,但是在写入数据库的时候发现我当时设计的怎么这么不合理,非常不利于扩展。所以我觉得我需要重新设计数据库。

数据库重新设计了一遍,具有很强的扩展性了,还没放数据,觉得flask这种架构太慢了,于是想换成fastapi。那么这样后端就需要重新写。

当时后端有大概30个左右api的endpoint,虽然都是python,但是格式迁移起来也是个麻烦事。

之后我发现我第一次写的数据库是单线程的,为什么不用异步的技术栈呢?于是可以在重新的时候改成异步,这样更好一些。

之后是前端,最初我网站路由设计的很初级,于是我需要重新设计前端路由。

之后UI也可以好好弄一下,于是我需要重新设计UI。

于是我列了一下我的TODO LIST,包括:

  • 后端改成fastapi
    • 重新路由
    • 重写API
    • 改成异步数据库和对应的技术栈
  • 数据库迁移
    • 数据库重新设计
    • 数据迁移
  • 前端
    • 重新设计路由
    • 重新设计UI

这些模块都是相连的,比如前端换成表单,后端接收就要换,数据库model也和后端所有代码相关。因为我很难有大块的时间,比如几周,因此我需要每天挤出时间来写,甚至熬夜写。但是我最后还是感慨于工作量巨大,我估计抽空写几年都写不完,因此我放弃了。

2. AI好厉害

时间刷的一下就过去了,2024了,距离第一次发布已经过去了快3年。这段时间我还做了N多项目,其中一个最大的转变就是我走上了AI的路。

其实在我读博的时候,如果你做机器学习或者深度学习,大家比较自豪自己用ML/DL的模型,绝不会说我用AI,显得很非常傻。

然而现在在AI大语言模型和各种模型的加持下,再加上最近诺贝尔物理、化学奖都给了AI,AI这个词变成了新潮的代言。我也在用AI解析RNA功能,当然,用AI写代码已经是日常。

最初类似我说需求,AI可以给出代码。最近有一个新的技术栈,Cursor,类似于可以把代码库进行适量化,对话的时候可以从代码库中检索,之后再回答。于是我又想起了我的G4Atlas数据库。

所以我建立新的文件夹,把之前一个flask api的快速搜索放进去,然后我让Cursor读取这个文件,同时改写为fastapi,结果真成功了。

我这到这一轮我肯定可以搞定。

3. 一个个解决

之前我TODO list一大堆,如果让AI全部搞定这个是不可能的,所以我只能选择最重要的。所以我保证前端和数据库不变的情况下,我先改后端的API,不去管路由和异构数据库。终于,折腾了一天,全部搞定了。

其实用过Cursor的都知道,他强大归强大,首先你需要回提问,知道怎么知道他做事情,此外他也不能100%完成,需要你修改。不过相比之前我一行行写代码,没有任何帮助,之前真的才是叫手撸轮子。

我感觉这波类似之前的工业革命,有了生成式AI,让每个人能做的事情比值钱多了,但是这并不意味了人被淘汰了,反而让人更忙了。所以在这种情况,真的需要想清楚到底需要做什么。

希望之后的更新一切顺利