春节之前写了一个接口,记录app首次打开后,发送的imei数据;接口所要操作就是先检查数据库是否有这条imei,有直接返回true,并提示已经存在,不存在则存入表中,并提示添加成功。

写这个接口的时候,基于一些接口,因为之前一直都是先去数据库里面查找是否存在这条记录,我认为这是没有必要的,如果要保持记录的唯一,我只需要把唯一的字段在mysql设置为唯一,这样就不会有重复的记录产生了。所以我就这么做了,因为我觉得imei重复的概率很小,虽然有可能会有重复的记录回去尝试插入数据库,数据库也会去查,但是如果我设置字段是unique,那查的是b树,速度肯定快,比起每次添加imei,都要去手动查是否存在该条记录,我认为我的做法更高效。

今天突然想到,我采用的方案,与mysql耦合太重,因为我把不能重复这个操作放在数据库中了,逻辑代码并没有体现出来,这对于以后的维护,甚至是切换不同的数据库都是一个很大的隐患,很有可能我们就忘记了原来这里还有一个不允许重复的操作在这里。如果我在逻辑处理当中采用先检查是否有重复记录,再决定是否插入数据库,对后面的维护和拓展可能会更好一点,其实就是把逻辑处理和mysql分开了,没有重叠的部分,但是会降低效率。

这两种方法都有各自的优点,主要看我们着重于系统以后的某个方面,如果是性能,当然采用第一种,让mysql处理重复问题;如果是可维护性和拓展性,在逻辑里面处理重复是更好的选择。