走过的坑-Java开发

2023-12-25 15:53:50 浏览数 (1)

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不要修改表的名字和字段,可以添加,但是不能修改和删除

∞ 持续更新

0 人点赞