局域网
里,别人使用C#写的程序,开了4个线程,往我接口里插入4张不同表的数据,问题如下:1.发现我的表里有很多重复数据,和对方确认后,发现对方用C#程序调用我的接口时,很多情况是因为tomcat没有及时返回response,导致对方的程序以为没有插入成功,又重新插入一遍。
但是我自己用java程序来模拟了100个请求,没有发现这种现象。
2.我觉得那个人写的程序可能超时时间设置的太短,因为我感觉在局域网的情况下,才开了4个线程,没有达到tomcat的瓶颈吧?(不知道这么想对不对)
3.要排除对方调用我的接口插入数据时,插入重复数据,我想了两种办法,不知道哪一个效率更好,或者大家有什么更好的去重方法
在数据库里设置主键,或者联合主键,让数据库帮我去判断数据是否重复
每次在插入数据的时候,我用程序去查询数据库里是否有重复数据,但是我觉得一旦数据量大的话,查询起来比较慢
Merci, Président, pour l'invitation.
Les deux méthodes mentionnées par le Président sont les mêmes. Ce sont toutes deux des méthodes pour éviter la duplication. La principale différence est que la déduplication des clés primaires ou des index uniques peut résoudre efficacement le problème. problème d'insertions répétées. Dans le programme Vérifiez les doublons puis insérez. Comme ces deux opérations ne sont pas atomiques, cela ne peut toujours pas empêcher l'insertion de requêtes entre votre requête et l'insertion, il existe donc toujours un risque de duplication.
Tant que la base de données peut gérer le nombre de requêtes, vous pouvez utiliser l'index unique de la base de données. Vous pouvez également utiliser Redis pour porter des jugements d'unicité au niveau de la couche application.
Je pense que cette question ne se concentre pas sur la déduplication des données, mais sur la raison pour laquelle l'étudiant a lancé une nouvelle tentative alors qu'il n'a pas reçu de message indiquant l'échec de l'opération.
Il est recommandé d'utiliser un intercepteur pour se connecter afin de voir le temps de traitement de chaque demande.
L'appelant doit attendre la réponse à la demande avant d'effectuer l'opération suivante. Par exemple, le délai d'expiration de la demande peut être raccourci.
La méthode la plus simple et la plus efficace consiste à créer un index unique, sans tenir compte des problèmes de performances pour le moment.
Si nous rencontrions réellement un goulot d'étranglement dans la base de données, on estime que l'architecture ne serait pas ce qu'elle est actuellement.