框架的选择和数据库选型

1、背景

目前有两个项目,一个采用springMVC、spring、mybatis的方式开发,生成war包,部署到tomcat,数据库采用mysql。但是由于需求不固定,数据库表结构频繁增加字段,每次修改xml都非常痛苦,即使使用自动生成工具,也不能减轻。
第二个项目采用springboot、mybatis plus,生成jar包,部署到docker上,数据库采用mysql为主存主要数据,mongoDB为辅存边缘数据。这次解决了数据库字段不固定频繁修改xml的痛点,但是由于还是关系数据库为主,并不是单表设计,多表查询关联查询还是需要写xml,并不省心。并且mongoDB的内存开销比起mysql要大太多了,花钱买云服务器的内存都是一笔开销。

2、可选项

以下的优缺点仅根据本人自己的实际项目经验来主观判断,不代表真实情况

2.1 数据库

mysql

优点:关系数据库,维护简单查询方便,内存占用少。
缺点:MGR集群时,当网络抖动的时候出问题的概率都很高,并且后期数据同步维护起来非常困难,云服务器的网络也并不可靠,至少目前上线的项目已经恢复到单数据库了。主从备份读写分离并未在云服务器上实际使用过,这里不发表评论和看法。还有一点需要吐槽,关系型数据库的表实在太多了。

mongoDB

优点:单表设计写API接口的时候巨爽,字段可在代码动态配置少写很多XML和sql语句巨爽。总之就是非常适合给做API接口和动态需求。
缺点:内存占用高,以腾讯云为例同样配置下,16G内存比8G内存贵了50%,有点不划算。数据运维成本高。字段长短不一,数据统计和分析都带来不便。程序员可以根据心情随机定义字段,如果没有注释,以后维护起来超级困难。

2.2 orm框架

hibernate

优点:不需要维护物理表模型,直接代码里注解建表(不推荐难以维护)。
缺点:实体间的对应关系太复杂,如果没有物理模型直接注解代码建表,容易被关系搞晕。

mybatis

优点:简单粗暴直接上SQL语句,没有复杂的关系。
缺点:在xml里写sql真是痛苦,用了mybatis plus确实可以减少xml,但是遇到多表查询时还是得手写XML。

3、结论

纯属个人观点

需求不定、主要提供API,建议选择mongoDB,可以快速响应。
需求确定、表结构间关系简单,尽量可以进行单表设计,建议mysql、mybatis。
至于hibernate,真的不建议新手使用,首先在大厂间不流行,其次复杂的关系会把人绕晕,最后对于一个复杂项目,改动的时候牵一发动全身,这种复杂的关系维护起来也非常麻烦。

推荐阅读更多精彩内容