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

višekorisnički pristup jednom fajlu iz PHP skripte

[es] :: PHP :: višekorisnički pristup jednom fajlu iz PHP skripte

[ Pregleda: 1791 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

urukhai
Sreten Antić

Član broj: 155017
Poruke: 16
*.dynamic.sbb.rs.



+1 Profil

icon višekorisnički pristup jednom fajlu iz PHP skripte03.10.2009. u 15:20 - pre 177 meseci
E ovako, pravim aplikaciju koja treba da omogući korisnicima da rade nad istim fajlom (csv format).
Mislim, problem bi mogao da se resi veoma jednostavno ukoliko bih usisao ceo fajl u bazu. Tako bih vec imao obezbedjen integritet i mogucnost da korisnici rade nad istim podacima.
Problem je u tome sto fajl može biti jako veliki (nekoliko stotina mega do par giga) i nema se vremena za prebacivanje iz jednog u drugo i nazad.

Prvo što sam uradio je da sam po određenom kriterijumu našao željene linije, a zatim sam u drugom fajlu zabeležio pointere ka njima.
Mene zapravo interesuje sta se dešava ukoliko dva ili više procesa u isto vreme trebaju da izvrše izmene u fajlu?
Znam da samo jedan može da piše dok drugi mogu da čitaju ili da čekaju pravo za pisanje.
Ili će doći do totalnog haosa ili ja to mogu nekako da kontrolišem ili ne moram uopšte?

 
Odgovor na temu

Nemke_BG

Član broj: 163822
Poruke: 341
91.148.86.*

Jabber: Nemke_BG@elitesecurity.org
Sajt: https://www.nmdesign.rs


+45 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte03.10.2009. u 18:31 - pre 177 meseci
moze da nastane totalni haos tj. da se desi da se izgubi ono na cemu dva usera istovremeno rade....

mozes da probas sa exclusive lock-ovima na tom csv fajlu ili sa lock fajlom, pa u slucaju da je tako
da zabranis svakom da cita/menja taj csv fajl....
...
 
Odgovor na temu

agvozden
Aleksandar Gvozden
founder
Info-G
Beograd

Član broj: 37813
Poruke: 1123
93.86.59.*

Sajt: www.gvozden.info


+68 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte03.10.2009. u 19:06 - pre 177 meseci
Nisam siguran da je PHP najbolje rešenje za ovako nešto... Može ti se desiti da prilikom upisa izgubiš celu datoteku i da dobiješ novu veličine nula.
Ja bih išao na zaključavanje datoteke i baferisanje promena.
Možda bi trebalo savladati iskustva koje ima google docs.
 
Odgovor na temu

urukhai
Sreten Antić

Član broj: 155017
Poruke: 16
*.dynamic.sbb.rs.



+1 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte04.10.2009. u 11:37 - pre 177 meseci
Jedino što mi ide u korist je to da svaki korisnik neće moći da radi na istoj liniji u fajlu jer ću unapred definisati kome idu koje linije.
Čitao sam dokumentaciju za flock i koliko sam shvatio sve vrste lokova važe samo za trenutni proces koji pristupa fajlu. Bilo koji drugi proces
može isto da vrši izmene u fajlu. Što mi govori da možda ne bi trebalo da dodje do problema oko konflikta barem na nivou linije. E sada,
nisam pametan kako da izvedem neki test na nivou jedne mašine i pokretanje više zahteva koji bi eventualno doveli do konflikta ili pokazali da ga nema.
 
Odgovor na temu

zgas

Član broj: 74613
Poruke: 334
*.dialup.neobee.net.

Sajt: odbrojavanje.com


Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte08.10.2009. u 15:06 - pre 177 meseci
Hoces reci da funkcije flock zakljucava fajl samo za tekuci proces?? Pitam se da li je tako?!

Inace zakljucavanje fajlova ovom funkcijom u windows NTFS sistemu ne radi bas najbolje ako se nevaram.

Zbog toga sam zakljucavanje fajla uradio rucno:

Pristup fajlu za citanje i pisanje odredjuje "lock" fajl koji formiram uz original i koji u nazivu ima podatak da li je original zakjlucan.
Ako neko upisuje podatak u original, lock fajl zabranjuje i posanje i citanje iz fajla.
Cim se upis zavrsi "lock" se skida.

Interesuje me sta mislite za ovo resenje, koliko je sigurno?
Bilo bi dobro da neko stvarno strucan ovo dobro razmotri.
Aukcije, www.Odbrojavanje.com
Aukcija može biti osvojena jeftino - za 30 sekundi a 6 dinara!
 
Odgovor na temu

urukhai
Sreten Antić

Član broj: 155017
Poruke: 16
*.static.sbb.rs.



+1 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte08.10.2009. u 15:17 - pre 177 meseci
Hteo sam da kazem, ukoliko proces stavi excluzivni lock onda ostali procesi cekaju, ali bilo koji externi proces van aplikacije koja se koristi moze da radi sta hoce... Tako nekako sam ja razumeo...
Aplikaciju sam napravio i radi pod ntfs-om i radi pod linuxom. Sada je u test fazi
i hvala svim na sugestijama :)
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte08.10.2009. u 15:25 - pre 177 meseci
Nije sigurno ako tvoja brava nije atomična. Npr. može se dogoditi da dva procesa krenu u zaključavanje, oba provere da nema datoteke, oba naprave datoteku i teraju dalje jer imaš rupu između is_file() i touch() poziva. Isto tako u uklanjanju. Atomična je operacija fopen(..., "x+"), makar na POSIX-u (postavlja O_EXCL), unlink() takođe. Dalje pitanje je šta radiš kada naiđeš na zaključanu bravu? Odustaneš ili čekaš na otključavanje? Koliko dugo čekaš?

Što se originalnog pitanja tiče, vodi računa da pri svakoj izmeni tvoji pokazivači (koji su zapravo jednostavni brojači bajtova od početka datoteke) divljaju osim ako ne dodaješ neko popunjavanje da osiguraš maksimalnu dužinu posle svakog polja! Ako neki proces ekskluzivno zaključa datoteku, drugi procesi ne mogu da urade to isto, nebitno što pristupaju različitim slogovima u datoteci. Ne možeš da zaključaš samo deo datoteke. Ako imaš popunjavanje i hoćeš istovremeni upis u različite slogove, onda moraš da imaš bravu po svakom slogu.

Testiranje, otvoriš više terminala, pokreneš skript iz komandne linije i pratiš šta se dešava. Dodaš sleep() gde treba u kodu kako bi simulirao trajanje neke operacije.

Eksterni proces može da radi šta hoće osim ako ne koristi isti mehanizam brave.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

urukhai
Sreten Antić

Član broj: 155017
Poruke: 16
*.static.sbb.rs.



+1 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte08.10.2009. u 15:51 - pre 177 meseci
testirao sam na sledeci nacin:

kao sto si rekao stavio sam sleep u jednoj skripti, dok u drugoj identicnoj nema sleep.
pokrenuo sam nekoliko i na kraju je sve bilo uredu. Sto me je dovelo do zakljucaka da proces ceka dok ne dobije dozvolu
za pisanje. Sadrzaj file-a nije pobenavio jer ne radim edit na nivou linije nego pravim temp file (svaki proces pravi svoj temp tako da ne mogu da se sudare) i onda idem red po red iz maticnog file-a
i prepisujem. Kada naidjem na liniju koja je editovana presnimim je i nastavim dalje kopiranje iz maticnog file-a. Za svo to vreme drzim lokove
nad oba file-a. Kada se zavrsi proces onda samo presnimim sadrzaj iz temp u maticni i onda obrisem temp. Zatim pustim lokove.
Do sada je sve bilo ok.

A slogovi su dodeljni korisnicima i nikada ne mogu da imaju iste slogove.
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte08.10.2009. u 16:14 - pre 177 meseci
Kako znaš da nisi naleteo na liniju koja je u međuvremenu izmenjena? Npr.

Code:

1, foo
2, bar
3, foobar


Napraviš dve privremene kopije i dešavaju se izmene:

Code:

#1                             #2
1, updated foo                 1, foo
2, bar                         2, updated bar
3, foobar                      3, foobar


Proces #1 završava izmenu, prepisuje u originalni:
Code:

1, updated foo
2, bar
3, foobar


Proces #2 završava izmenu, prepisuje u originalni:
Code:

1, foo
2, updated bar
3, foobar


Rezultat: izmena prvog reda iz #1 se gubi! Jedino ako unapred znaš šta će ko da menja, pa kada prepisuješ #2 znaš da zanemariš redove 1 i 3, ali onda ti je dovoljno da napraviš kopiju tog reda, a ne cele datoteke. Šta više možeš da to uradiš odmah na početku i rešiš se zaključavanja. Kada je potrebno samo sastaviš datoteku koristeći deljenu bravu za čitanje iz parčića.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

urukhai
Sreten Antić

Član broj: 155017
Poruke: 16
*.static.sbb.rs.



+1 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte08.10.2009. u 16:31 - pre 177 meseci
Možda se nismo razumeli ili ja tebe nisam razumeo.
Ali process 1 drži lock na matičnoj datoteci. Dok on drži lock
process 2 čeka da se lock oslobodi.
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte08.10.2009. u 23:46 - pre 177 meseci
Aha, razumem. Ali kako onda misliš da omogućiš zajednički rad? Ako svi traže ekskluzivnu bravu i to od trenutka preuzimanja datoteke, učitavanja u formu pa sve do vraćanja, svi osim jednog su stalno na čekanju, a još ako Pera ode na kafu pre nego što klikne na „Sačuvaj“... Onda kreće nerviranje i zivkanje programera koji je sklepao aplikaciju...

E sada ako imaš tačnu podelu da Pera i Mika ne mogu da rade nad istim redom, onda možeš da zaključavaš samo tokom upisivanja, ali onda je bolje da ništa ne zaključavaš već da odmah podeliš datoteku na Perin i Mikin deo. A ako nije tako mislim da bi morao da zaključavaš na nivou jednog reda (sloga) ako želiš funkcionalnu aplikaciju.

Sa implementiranim popunjavanjem na maksimalnu širinu (recimo razmacima što je dozvoljeno u CSV formatu), u slučaju da su slogovi unapred podeljeni možeš da izbegneš bilo kakvo zaključavanje (svako piše u svoj deo, nema pomeranja indeksa, indeksi su pomeraj u bajtovima od početka datoteke i to čuvaš u posebnoj datoteci), a ako nisu opet zaključavaš samo na nivou sloga i ne treba ti kopija datoteke.

Svi ovi sistemi ne omogućavaju pouzdanu transakciju, tj. može ti se desiti delimičan upis u slučaju greške. Odsecanje datoteke ne bi trebalo da može da ti se dogodi.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

urukhai
Sreten Antić

Član broj: 155017
Poruke: 16
*.dynamic.sbb.rs.



+1 Profil

icon Re: višekorisnički pristup jednom fajlu iz PHP skripte09.10.2009. u 08:50 - pre 177 meseci
nastane haos ukoliko ne koristim exclusive lock nad fajlom. Sam lock traje koliko traje request. Svaki korisnik ce dobiti samo njegove linije. Naravno lock na nivou linije mogu samo da simuliram i da mi to samo bude predostroznost za svaki slucaj.
Prvo sto sam probao je direktno editovanje maticnog fajla ali onda nastaje problem. Ukoliko dodam karakter vise u odredjenoj liniji onda se sve ostalo poremeti od te linije pa nadalje. Tako da sam na kraju uradio sa pomocnim fajlom koji se nakon zavrsene operacije brise. Ceo proces traje jako brzo. Naravno, testirao sam
aplikaciju sa vise requestova na razlicitu liniju i nije za sada doslo do greske. Ali morace jos dugo da se testira jer ne sme da dodje do greske :). Mada svaki dan se desi neka decija bolest koja se uz dobro debagovanje otkloni. Tako da se nadam da ce na kraju biti sve ok.
 
Odgovor na temu

[es] :: PHP :: višekorisnički pristup jednom fajlu iz PHP skripte

[ Pregleda: 1791 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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