局域网
里,别人使用C#写的程序,开了4个线程,往我接口里插入4张不同表的数据,问题如下:1.发现我的表里有很多重复数据,和对方确认后,发现对方用C#程序调用我的接口时,很多情况是因为tomcat没有及时返回response,导致对方的程序以为没有插入成功,又重新插入一遍。
但是我自己用java程序来模拟了100个请求,没有发现这种现象。
2.我觉得那个人写的程序可能超时时间设置的太短,因为我感觉在局域网的情况下,才开了4个线程,没有达到tomcat的瓶颈吧?(不知道这么想对不对)
3.要排除对方调用我的接口插入数据时,插入重复数据,我想了两种办法,不知道哪一个效率更好,或者大家有什么更好的去重方法
在数据库里设置主键,或者联合主键,让数据库帮我去判断数据是否重复
每次在插入数据的时候,我用程序去查询数据库里是否有重复数据,但是我觉得一旦数据量大的话,查询起来比较慢
Terima kasih, Pengerusi, atas jemputan
Dua kaedah yang dinyatakan oleh Pengerusi adalah sama. Kedua-duanya adalah kaedah untuk mencegah pertindihan masalah sisipan berulang Dalam program Semak pendua dan kemudian masukkan Memandangkan kedua-dua operasi ini bukan atom, ia masih tidak dapat menghalang permintaan daripada dimasukkan antara pertanyaan dan sisipan anda, jadi masih terdapat risiko pendua.
Selagi pangkalan data boleh mengendalikan jumlah permintaan, anda boleh menggunakan indeks unik pangkalan data. Anda juga boleh menggunakan redis untuk membuat pertimbangan keunikan pada lapisan aplikasi.
Saya rasa fokus soalan ini bukan pada penyahduplikasian data, tetapi mengapa pelajar itu memulakan percubaan semula apabila dia tidak menerima mesej bahawa operasi itu gagal.
Adalah disyorkan untuk menggunakan pemintas untuk log untuk melihat masa pemprosesan setiap permintaan.
Pihak yang memanggil hendaklah menunggu respons permintaan sebelum melakukan operasi seterusnya Contohnya, tamat masa permintaan boleh ditetapkan lebih pendek.
Kaedah yang paling mudah dan berkesan ialah membina indeks yang unik, tanpa mengambil kira isu prestasi buat masa ini.
Sekiranya kami benar-benar menghadapi kesesakan pangkalan data, dianggarkan seni binanya tidak seperti sekarang.