Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako kontrolisati (izbjeci) duple upise?

[es] :: MySQL :: Kako kontrolisati (izbjeci) duple upise?

[ Pregleda: 2141 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Kako kontrolisati (izbjeci) duple upise?30.03.2009. u 21:16 - pre 183 meseci
Trebam svakodnevno importovati podatke u bazu. Broj dnevnih recorda je za sad mozda 20-30, vremenom ce vjerovatno rasti. Rijec je o podacim o telefonskim pozivima znaci da je struktura tipa:
Code:

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment | 
| from        | varchar(20)      | NO   |     | NULL    |                | 
| to          | varchar(20)      | NO   |     | NULL    |                | 
| starttime   | datetime         | NO   |     | NULL    |                | 
| duration    | int(5) unsigned  | NO   |     | NULL    |                | 
| inputprice  | float unsigned   | NO   |     | 0       |                | 
| outputprice | float unsigned   | YES  |     | 0       |                | 
+-------------+------------------+------+-----+---------+----------------+


Htio bih izbjeci da dupli insert vec postojeceg sloga. Neka ideja kako to uraditi je kreirati unique key na poljima FROM, STARTTIME, DURATION (mislim da je dovoljno), jer tesko da se moze desi da bas u istu sekundu krene poziv sa istog broja i da isto traje.

E sad, interesuje me, ako budem radio BULK INSERT i ako jedan od tih slogova u SQL komandi je vec unutra, da li ce insert kompletno puci i nece nista biti insertovano ili ce...?? Htio bih da uradi samo 'skip' i ubaci sve ostalo.
Da li je to izvodljivo i kako?

'fala

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

afwt
AF Web Team
Novi Sad/Chicago

Član broj: 8220
Poruke: 337
*.dsl.chcgil.sbcglobal.net.

Sajt: milos.srdjevic.net/blog


+1 Profil

icon Re: Kako kontrolisati (izbjeci) duple upise?30.03.2009. u 23:08 - pre 183 meseci
Ovako nesto? http://bogdan.org.ua/2007/10/1...sert-if-not-exists-syntax.html

P.S. Da, puci ce upit ako je bar jedan vec tu pa vrati error :(
ZelenaLutrija.com - Saznajte sve o lutriji za zelenu kartu (doživotni boravak u Sjedinjenim Američkim Državama)
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Kako kontrolisati (izbjeci) duple upise?31.03.2009. u 06:38 - pre 183 meseci
insert ignore ili replace .. on nece puci, obican insert ce da pukne - pritom, kod myisam-a ce ono sto je insertovao do greske ostati u bazi dok ce kod innodb-a transakcija biti "roll-back"-ovana (kako li se to kaze na srpskom) te nece biti insertovano nista

to sto ti imas je standardan problem kod cuvanja CDR-ova posto u sorsu nemas nikakav unique ID a u prenosu ne znas gde si poceo a gde stao posebno kad imas mnogo threadova koji citaju cdr-ove i rokaju u bazu .... ja licno nisam video nijedno zadovoljavajuce resenje do sada ... ili imas duplikate, ili je sporo ili gubis pozive ... jedino ispravno resenje je da gateway direktno roka podatke u bazu .. to sam video kod dosta resenja, i kod cisco gateway-a i kod drugih resenja .. gde rokaju podatke direkt na mysql ..

sto se tice "bas u istu sekundu" ... jedna bivsa firma, mali promet .. oko 200 miliona minuta mesecno - ~3% poziva pocinje "iste sekunde" :) oni su imali sistem koji roka direkt u bazu tako da nisu imali taj problem ali su vadili neke statistike (oko pikova u cuda) i oko 3% poziva (ne mogu da se setim cifre tacne ... dal 2.8 ili 3.5 .. nije ni bitno) ima isti starttime i duration :D ... objasnjavao mi je voip ing. tamo zasto ... al ima tome mnogo godina a memorija mi odavno nije kao sto je bila :)

sa unique kljucem na from, to, starttime, duration ... definitivno si ga zabo ... ako je isti start i to .. "to jeste duplikat" :)

Ono sto je cudno je da ti imas taj problem na 20-30 CDR-ova dnevno ... dakle cuvas log svog voip telefona na primer .. kakav god da mu je log mozes da ga "povuces pa obrises" tako da ne znam sto tu imas problem sa duplikatima?
 
Odgovor na temu

tarla

Član broj: 15527
Poruke: 1648



+42 Profil

icon Re: Kako kontrolisati (izbjeci) duple upise?31.03.2009. u 09:08 - pre 183 meseci
Citat:

sto se tice "bas u istu sekundu" ... jedna bivsa firma, mali promet .. oko 200 miliona minuta mesecno - ~3% poziva pocinje "iste sekunde" :) oni su imali sistem koji roka direkt u bazu tako da nisu imali taj problem ali su vadili neke statistike (oko pikova u cuda) i oko 3% poziva (ne mogu da se setim cifre tacne ... dal 2.8 ili 3.5 .. nije ni bitno) ima isti starttime i duration :D ... objasnjavao mi je voip ing. tamo zasto ... al ima tome mnogo godina a memorija mi odavno nije kao sto je bila :)



^^^ Radius server ili šta već koriste ne razmišlja puno nego samo upisuje u bazu a NAS se nekada zbuni pa pošalje duple podatke jer misli da ih ovaj nije primio, ima interni BUG ili ko zna zbog čega... ...

Što bi rekli ljudi "NAS is broken" :)

Imao sam sličan problem ali je postavljanje UNIQUE-a riješilo isti...




 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Kako kontrolisati (izbjeci) duple upise?31.03.2009. u 09:23 - pre 183 meseci
Oki, INSERT IGNORE radi posao. Ono sto je duplo u BULKu ignorishe, ostalo pa ubaci.

Nemam ja problema, ali u fazi sam razvoja aplikacije koja uvozi CDR-ove sa VoIP provajdera i razdvaja ih na korisnike na osnovu 'from' polja. Ako bi mi u nekom momentu puko import zelim da mogu da ga odradim ponovo ali da ne brinem hoce li biti duplih unosa ili ne.

I dok ja dodjem do tog 'malog prometa' procice ... tehnologija :)

Hvala svima.
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

stsung
NS

Član broj: 12899
Poruke: 432
*.ptt.rs.



+2 Profil

icon Re: Kako kontrolisati (izbjeci) duple upise?31.03.2009. u 10:04 - pre 183 meseci
U zavisnosti od switcha koji se koristi, u vecini sluchajeva bi trebalo da postoji mogucnost da u cdr udju i josh poneki podaci, sequence number, inbound trunk group i member, outbound trunk group i member ... to su sve podaci koji koriste u takvim sluchajevima. Naravno, zavisi od konfiguracije konkretnog sistema sa kojim radish.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Kako kontrolisati (izbjeci) duple upise?31.03.2009. u 10:06 - pre 183 meseci
yup, odredi da li oces replace ili insert ignore .. zavisno od toga sta hoces da postignes .. insert ignore je brzi (posto ne radi nista :D ) od replace-a

sto se "malog prometa" tice .. to je bas bas malo za "trgovce" .. za one koji rade originaciju i terminaciju je to verovatno velika brojka .. ali za ove koj samo rade rutiranje i skidaju kajmak je to sica :) ... fora je sto je "ruterima/trgovcima" bitno da imaju sve zive statistike posto u zavisnosti od slr placaju ili ne placaju terminaciju, odredjuju rute i slicno ... ako se ja dobro secam (ali sad je moguce da izmisljam posto je bilo daaaaaaavno), ruteri su to pucali kroz neki interface u mysql tabelu koja nije imala indexe uopste, to je alex citao nekim php-om i presipao na drugi server u tabelu sa indexima (i to ogromnim secam se da smo imali probleme sa performansama inserta) i onda je opet neki peti php to citao i generisao neka cuda na nasem lokalnom mysql serveru ... sve u svemu bio je neki dobar razlog za celu tu komplikaciju a dok je to namestano alex (lik koji je sve to radio / ludi ukrainac koji je pre toga radio za cisco kao sef nekog dev tima) je non stop bio na telefonu sa likovima iz cisca posto im je nasao cudo i karate bagova u sistemu ...
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Kako kontrolisati (izbjeci) duple upise?31.03.2009. u 11:37 - pre 183 meseci
Nemam vishe polja od ovog sto sam gore prikazao tako da je to to. U sustini meni zavrsava posao, ja trebam samo da znam kojem klijentu koliko fakturishem i to razlikujem po 'from' polju.

hvala
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

[es] :: MySQL :: Kako kontrolisati (izbjeci) duple upise?

[ Pregleda: 2141 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.