java - 别人调用我接口,往我数据库里插数据问题,谢谢
PHP中文网
PHP中文网 2017-04-18 09:07:15
0
5
524

局域网里,别人使用C#写的程序,开了4个线程,往我接口里插入4张不同表的数据,问题如下:

  • 1.发现我的表里有很多重复数据,和对方确认后,发现对方用C#程序调用我的接口时,很多情况是因为tomcat没有及时返回response,导致对方的程序以为没有插入成功,又重新插入一遍。

    • 但是我自己用java程序来模拟了100个请求,没有发现这种现象。

  • 2.我觉得那个人写的程序可能超时时间设置的太短,因为我感觉在局域网的情况下,才开了4个线程,没有达到tomcat的瓶颈吧?(不知道这么想对不对)

  • 3.要排除对方调用我的接口插入数据时,插入重复数据,我想了两种办法,不知道哪一个效率更好,或者大家有什么更好的去重方法

    • 在数据库里设置主键,或者联合主键,让数据库帮我去判断数据是否重复

    • 每次在插入数据的时候,我用程序去查询数据库里是否有重复数据,但是我觉得一旦数据量大的话,查询起来比较慢

谢谢

PHP中文网
PHP中文网

认证0级讲师

Antworte allen(5)
PHPzhong

谢谢主席邀请,
主席说的两种方法都是一样的,都是为了防止重复的方法,主要差别在于主键或者唯一索引去重才能有效解决重复插入的问题,而在程序中去查重再插入,由于这两个操作不是原子性的,依然不能防止有请求能在你查询到插入之间进行插入,所以依然会有重复的风险。

Ty80

只要请求量数据库可以扛得住,可以用数据库的唯一索引。也可以利用redis在应用层做唯一性判断。

小葫芦

感觉这个问题的重点不是数据去重,而是那位同学为什么在没有接到操作失败的消息时要发起重试。
建议用拦截器打日志看看每次请求的处理时间.

Ty80

调用的那边应该要等待请求响应后再去做下一个操作,例如可以把请求超时时间设置短一点。

巴扎黑

最简单有效的方法就是建唯一索引,暂时不用考虑性能问题。
如果真遇到数据库瓶颈,估计架构早就不是现在这样的了。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage