1不要在docker里存数据
千万不要在docker里装mysql,因为docker容器停了以后,里面的数据就没有了,即使有一些操作可以使得docker映射到操作系统上,但是还是十分不建议用docker存数据、日志等,因为你能保证你就配置的没问题吗。
2不要在MySQL中做复杂的逻辑
不要在MySQL中做复杂的逻辑,各种group by,各种like,各种多表查询。举一个很简单的例子,有一张站点表和站点日志表,查询站点的报道率(某站点日志表中某字段不为空的数量/某时间段的总数量),其实这个逻辑在MySQL中可以做,在Java的业务层也可以做,这个时候我推荐在Java的业务层做。有两个好处,其一为如果在MySQL中运行复杂的SQL,会拖垮整个MySQL的效率;其二你的SQL语句别人看不懂啊。
3 注意端口安全问题
一般情况下MySQL的端口为3306,但是当你在部署的时候,建议改一个端口,否则当一个人拿到一个服务器的账号很自然就的就去3306端口访问一下,其实还是有安全问题的。
4 能一次查询的别多次查询
举一个例子,查询所有的成绩并且带班级信息,一般的逻辑就是查询所有的学生,然后遍历学生信息,对每一个学生的班级信息查询数据库,这样有多少个学生就查多少次班级表,其实完全可以一次把所有的班级信息查询出来,存到map里,然后用的时候直接在map里取。
案例
代码语言:javascript复制List<Student> students = studentDao.select();
for (Student student:students){
student.setClassName(classNameDao.selectBy(student.getClassId));
}
优化
代码语言:javascript复制List<ClassName> classNames = classNameDao.select();
Map<Integer, Object> classNameMap = new HashMap<>();
for (ClassName className:classNames){
classNameMap.put(className.getId(), className);
}
List<Student> students = studentDao.select();
for (Student student:students){
student.setClassName(classNameMap.get(student.getClassId));
}
6 千万不要没事格式化代码
千万不要没事格式化代码,因为也许你的代码风格和别人的不一样,所以你只需要格式化自己写的方法和类就行了,否则合并代码很难受。
7 MySQL数据备份有两种,一种是binlog主从复制,一种是查询并插入
后者的话建议查询的时候加一个limit,因为如果你的程序1号断了,现在7号了,你一重启的程序的话会查询大量的数据,增加MySQL的压力。
8一定要看文档
一顿操作猛如虎,一看文档和要求的不一样的
9打日志也是个技术活
10不要修改表的名字和字段,可以添加,但是不能修改和删除
∞ 持续更新