Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
raido357
HV veteran
liitunud: 26.09.2002
|
08.12.2009 02:17:02
PHP mysql insert, osa ridu kadunud |
|
|
Tere
Mure nimelt selles, et ei saa hakkama andmete sisestamisega.
Hetkel siis midagi stiilis
foreach($key => $value) {
$insert->query("Insert into tabel vaartused");
}
Üritan lisada 25 000 rida sedasi, mis muidugi feilib, lisatakse ainult 24990 rida. Ideaalne oleks, kui saaks 100 000 rida korraga insertida, algselt oli lahenduseks LOAD DATA LOCAL INFILE aga teises serveris see keelatud ja ei lubata ka suht kindlalt.
100 000 korral läheb juba mõned tuhanded kohati kaduma. LOAD DATA variandiga ei läinud midagi kaduma.
Olen ka grupide kaupa inserte teinud, ala 100 INSERTI korraga - tulemus on suht sama.
Kuidas sellist asja lahendada ?
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
08.12.2009 17:28:33
|
|
|
Sain oma 25000 rida sisse lastud, siis kui võtsin UNIQUE väärtuse maha, kaks tulpa oli UNIQUE lükatud.
Mis on mõistatud muidugi, kuna kuidas saab kaks ühesugust väärtust tekkida, kui mõlema tulbal on väärtused erinevad
UNQIUE(number, group_id);
number väärtused 0-24999 ja grupp näiteks 50, või 51 jne.
Põhimõtteliselt võib asi ka ilma UNQUE'ta jääda, kuna PHP sorteerib ise ka UNIQUE väärtused välja.
Edit: oleks vaja tegelt mysql unique tööle saada, sest uuesti insertides, oleks vaja siiski vältida korduvaid andmeid ja php'ga seda nüüd kontrollima hakata, on tulemuseks execute time exceeded.
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
11.12.2009 16:33:37
|
|
|
Kahe välja peale pandud unique key tööpõhimõte on teine kui sa arvad. See ei tähenda et andmebaas vaatab et kas väli1 == väli2 ja kui on samad siis annab errorit.
Töötab asi nii, et andmebaas vaatab kas väli1 ning väli2 kombinatsioon on unikaalne, ehk kas on olemas mõni rida kus väli1 väärtus on sama mis praegu sisestada proovitaval real ning kas ka väli2 on sama.
Kui sul on tabelis rida kus number=123, group=123 siis see on korrektne rida.
Kui sa sinna üritad sisestada uut rida kus ka number=123 ja group=123 siis saad errorit.
Sama errorit saad ka siis kui vastavad numbrid oleks 123456 ja 3543.
Analüüsi neid üleliigseid ridasid et mis read need on ja miks nad seal on, ja siis koonda need kokku teistega või kustuta ära.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
11.12.2009 17:05:28
|
|
|
Ühesõnaga ma peaksin veel ühe välja lisama ja näiteks siis sisestavast numbrist ja gruppi numbrist tegema md5 hashi näiteks + mingine time salt, et ja unique sellele väljale määrata, et asi töötaks.
Hetkel tabel selline, mis feilib.
CREATE TABLE IF NOT EXISTS `mingi tabel` (
`id` int(11) NOT NULL auto_increment,
`number` varchar(255) NOT NULL,
`group_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `number_grupp` (`number`,`group_id`),
KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
Edit: hashi väljaga sain asja lahendatud, olgu ilus või kole. Vähemalt töötab nagu vaja.
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
11.12.2009 17:12:22
|
|
|
Eee, kui sa teed numbrist ja grupi numbrist hashi siis sinna time salt veel otsa, siis kusotsast on sul unique sinna veel vaja ? See number peakski tulema suht unique.
Mul on tunne et sa oled millesti valesti aru saanud kui üritad sellise lähenemisega unique key'd peale pressida peaasi et oleks peal.
Kas tohiks küsida mis on selle unique asja lõppeesmärk ? peaks võimaldama kiiremini leida tabelist ridasig kus number on x ja grupi id on y ? Selle jaoks sa ei pea kasutama unique key vaid sobib tavaline key.
Selline lahendust et kui asi pole unique siis niikaua mudid kuni on, on suht mõttetu värk ju ja vaadates eelnevaid postitusi siin teemas kaldun arvama et sa oled millesti jälle väga valesti aru saanud lihtsalt....
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
11.12.2009 17:16:54
|
|
|
Seda on vaja selleks, et kümmenete sadade tuhandete telefoninumbrite seast duplikaadid kätte saada. Tegu ei ole mingise rakendusega kuhugi avalikku veebi.
Lisatakse failist, need mõned kümned, sajad tuhanded read korraga.
PHP'ga neid filtreerida on suht piin.
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
11.12.2009 17:52:30
|
|
|
No sellisel juhul oleks pigem võibolla etem teha niipidi, et enne sisse lugemist unique key maha võtta. Siis välja sorteerida duplikaadid:
select group_id,number,count(*) n from tabel group by group_id,number having n>1 order by n desc
Ja siis saadud tulemuse järgi teha spets loogikat: delete from tabel where group_id=x and number=y limit z kus siis z on vastava numbri duplikaatide arv-1
Ja kui duplikaadid kustutatud, paned unique key peale tagasi.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|