[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]
Volgens mij aan het einde van de query tenzij alle queries in een transactie/rollback staan. dan aan het einde van de treansactie/rollback, welke dan weer vaak aan het eind van de php liggen.
edit:
Locken en transactie/rollback kan je voor multiple user systemen gebruiken
Locken en transactie/rollback kan je voor multiple user systemen gebruiken
A real man fears not mortality for it's death, he fears mortality for it's lack of life!
RatPack #814
Een php script is vaak genoeg in minder dan een seconde klaar. Maar als er alweer queries gedaan kunnen worden door andere gebruikers terwijl het ene script nog niet klaar is, dan krijg je database corruptie. Hoe werkt dit in de praktijk?? Moet ik me hier druk over maken als (redelijk ervaren) php-programmeur? Of moet dat alleen als mysql-developper?Roeligan schreef op 15 oktober 2002 @ 17:57:
Volgens mij aan het einde van de query tenzij alle queries in een transactie/rollback staan. dan aan het einde van de treansactie/rollback, welke dan weer vaak aan het eind van de php liggen.
edit:
Locken en transactie/rollback kan je voor multiple user systemen gebruiken
[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]
Ik neem aan dat PHP een soort ingebouwde connection pool heeft met een eigen broker... of een dergelijk systeem? Aangezien PHP over het algemeen al bijna alles voor je doet, zal het dat ook wel doen
irondog schreef op 15 oktober 2002 @ 18:08:
[...]
Een php script is vaak genoeg in minder dan een seconde klaar. Maar als er alweer queries gedaan kunnen worden door andere gebruikers terwijl het ene script nog niet klaar is, dan krijg je database corruptie. Hoe werkt dit in de praktijk?? Moet ik me hier druk over maken als (redelijk ervaren) php-programmeur? Of moet dat alleen als mysql-developper?
Waarom zou je dan database-corruptie krijgen? Daar is nu juist de DB voor
Dat bedoel ik met transactie/rollback.
Laten we zeggen je hebt een online winkeltje.
Klant doet 2 dimms in mandje,
Klant doet 1 case in mandje
Klant wil afrekenen.
Acties:
1. Log klant (adres etc.)
2. Haal producten uit de voorraad tabel.
3. Zet producten in order tabel (voor history etc.)
4. Laat klant betaalmethode kiezen.
5. finalize order.
Werkelijkheid:
1. Log klant Succes
2. Haal producten uit voorraad tabel Succes
3.Zet product in order tabel Succes
4.Laat klant betaalmethode kiezen FAILED!!!!
5. ERROR
Wat gebeurt klant winkelt ziet leuke dingen en wil bestellen. Aangekomen bij de checkout is geen rembours optie mogelijk. Klant wil afzien van de order.
In dit geval staan er in je tabellen corrupte data die niet / of nauwelijks te traceren zijn(als je een druk winkeltje hebt).
Doe je dit in een transactie (zoals ik altijd doe in CF)
[transactie]
query 1
query 2
query 3
nog wat code etc.
[/transactie]
Bij succes wordt alles gecommit. Bij failure wordt alles ongedaan gemaakt. Et voila geen corrupte data!
Laten we zeggen je hebt een online winkeltje.
Klant doet 2 dimms in mandje,
Klant doet 1 case in mandje
Klant wil afrekenen.
Acties:
1. Log klant (adres etc.)
2. Haal producten uit de voorraad tabel.
3. Zet producten in order tabel (voor history etc.)
4. Laat klant betaalmethode kiezen.
5. finalize order.
Werkelijkheid:
1. Log klant Succes
2. Haal producten uit voorraad tabel Succes
3.Zet product in order tabel Succes
4.Laat klant betaalmethode kiezen FAILED!!!!
5. ERROR
Wat gebeurt klant winkelt ziet leuke dingen en wil bestellen. Aangekomen bij de checkout is geen rembours optie mogelijk. Klant wil afzien van de order.
In dit geval staan er in je tabellen corrupte data die niet / of nauwelijks te traceren zijn(als je een druk winkeltje hebt).
Doe je dit in een transactie (zoals ik altijd doe in CF)
[transactie]
query 1
query 2
query 3
nog wat code etc.
[/transactie]
Bij succes wordt alles gecommit. Bij failure wordt alles ongedaan gemaakt. Et voila geen corrupte data!
A real man fears not mortality for it's death, he fears mortality for it's lack of life!
RatPack #814
Inderdaad MySQL niet. Hier moet je ook de laag erboven op aanspreken (in dit geval php). In CF kan het iig. Dus php zal het ook ongetwijfeld kunnen.Bosmonster schreef op 15 oktober 2002 @ 18:13:
[...]
Waarom zou je dan database-corruptie krijgen? Daar is nu juist de DB voorEn mocht het zo zijn dat de query's achter elkaar, zonder interventie uitgevoerd moeten worden zijn daar nu juist transactions voor (al ondersteunt MySQL die geloof ik niet).
A real man fears not mortality for it's death, he fears mortality for it's lack of life!
RatPack #814
Ik wil het niet over transacties hebben.
Stel nou: twee scripts worden op nagenoeg hetzelfde moment aangeroepen:
script 1 en script 2
Script 2 is later, maar wordt al aangeroepen voordat script 1 klaar is.
ja! en wat nou
[user 1]
query1: insert into tabelnaam values ('blablabla1');
query2: insert into tabelnaam values ('blablabla2');
query3: insert into tabelnaam values ('blablabla3');
[/user 1]
[user 2]
query1: select from tabelnaam where kolomnaam='blablabla1';
query2: select from tabelnaam where kolomnaam='blablabla2';
query3: select from tabelnaam where kolomnaam='blablabla3';
[/user 2]
User 2 is dus later, maar hij zou in mijn ogen de informatie van user 1 moeten zien.
De vraag is, Ziet hij het ook???
Als mysql alle queries serieel uitvoert dan is het antwoord ja!!! Want user 1 connecte eerder naar de database.
Stel nou: twee scripts worden op nagenoeg hetzelfde moment aangeroepen:
script 1 en script 2
Script 2 is later, maar wordt al aangeroepen voordat script 1 klaar is.
ja! en wat nou
[user 1]
query1: insert into tabelnaam values ('blablabla1');
query2: insert into tabelnaam values ('blablabla2');
query3: insert into tabelnaam values ('blablabla3');
[/user 1]
[user 2]
query1: select from tabelnaam where kolomnaam='blablabla1';
query2: select from tabelnaam where kolomnaam='blablabla2';
query3: select from tabelnaam where kolomnaam='blablabla3';
[/user 2]
User 2 is dus later, maar hij zou in mijn ogen de informatie van user 1 moeten zien.
De vraag is, Ziet hij het ook???
Als mysql alle queries serieel uitvoert dan is het antwoord ja!!! Want user 1 connecte eerder naar de database.
[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]
Verwijderd
pas een order invoeren nadat de klant heeft bevestigd...Roeligan schreef op 15 oktober 2002 @ 18:18:
Dat bedoel ik met transactie/rollback.
Laten we zeggen je hebt een online winkeltje.
Klant doet 2 dimms in mandje,
Klant doet 1 case in mandje
Klant wil afrekenen.
Acties:
1. Log klant (adres etc.)
2. Haal producten uit de voorraad tabel.
3. Zet producten in order tabel (voor history etc.)
4. Laat klant betaalmethode kiezen.
5. finalize order.
Werkelijkheid:
1. Log klant Succes
2. Haal producten uit voorraad tabel Succes
3.Zet product in order tabel Succes
4.Laat klant betaalmethode kiezen FAILED!!!!
5. ERROR
Wat gebeurt klant winkelt ziet leuke dingen en wil bestellen. Aangekomen bij de checkout is geen rembours optie mogelijk. Klant wil afzien van de order.
In dit geval staan er in je tabellen corrupte data die niet / of nauwelijks te traceren zijn(als je een druk winkeltje hebt).
Doe je dit in een transactie (zoals ik altijd doe in CF)
[transactie]
query 1
query 2
query 3
nog wat code etc.
[/transactie]
Bij succes wordt alles gecommit. Bij failure wordt alles ongedaan gemaakt. Et voila geen corrupte data!
maak gebruik van tussen-tabellen of sessie-variabelen waar je de info van een klant in opslaat wat die wilt....
irondog schreef op 15 oktober 2002 @ 18:39:
Ik wil het niet over transacties hebben.
Stel nou: twee scripts worden op nagenoeg hetzelfde moment aangeroepen:
script 1 en script 2
Script 2 is later, maar wordt al aangeroepen voordat script 1 klaar is.
ja! en wat nou
[user 1]
query1: insert into tabelnaam values ('blablabla1');
query2: insert into tabelnaam values ('blablabla2');
query3: insert into tabelnaam values ('blablabla3');
[/user 1]
[user 2]
query1: select from tabelnaam where kolomnaam='blablabla1';
query2: select from tabelnaam where kolomnaam='blablabla2';
query3: select from tabelnaam where kolomnaam='blablabla3';
[/user 2]
User 2 is dus later, maar hij zou in mijn ogen de informatie van user 1 moeten zien.
De vraag is, Ziet hij het ook???
Als mysql alle queries serieel uitvoert dan is het antwoord ja!!! Want user 1 connecte eerder naar de database.
De functies die je uitvoert in je script worden DIRECT uitgevoerd. Dus als jij insert doet, vervolgens een andere gebruiker select en jij daarna weer insert, dan mist de andere gebruikers uiteraard de laatste insert.. Dat is het hele dynamische van een Database.
En dan kun je het niet over transacties willen hebben, maar dat is de oplossing om meerdere queries als 1 te behandelen. Of je kunt tabellen tijdelijk locken, maar dat komt in principe op hetzelfde neer. MySQl ondersteunt ook dit niet geloof ik, maar dat is als het echt nodig is ook redelijk eenvoudig softwarematig op te lossen.
Over het algemeen hoef je je over bovenstaande ABSOLUUT niet druk te maken..
Het uitvoeren van queries heeft bovendien niks te maken met de connectie naar de database. Dit staat los van elkaar.
natuurlijk wil ik gebruik maken van tussentabellen, maar daar ligt o.a. het probleem:Verwijderd schreef op 15 oktober 2002 @ 18:42:
[...]
pas een order invoeren nadat de klant heeft bevestigd...
maak gebruik van tussen-tabellen of sessie-variabelen waar je de info van een klant in opslaat wat die wilt....
een record invoegen doe je eigenlijk met meerdere queries...
Meerdere queries in een, daar doel ik dus op:Bosmonster schreef op 15 oktober 2002 @ 19:05:
[...]
En dan kun je het niet over transacties willen hebben, maar dat is de oplossing om meerdere queries als 1 te behandelen. Of je kunt tabellen tijdelijk locken, maar dat komt in principe op hetzelfde neer. MySQl ondersteunt ook dit niet geloof ik, maar dat is als het echt nodig is ook redelijk eenvoudig softwarematig op te lossen.
Dit gaat niet in mysql maar wel in postgresql!!
Mijn conclusies:
* php scrips worden paralell uitgevoerd en mysql inserts daarin zijn DIRECT bereikbaar voor andere scripts / processen.
* ik moet me er niet druk om maken
Wie kan deze conclusies weerleggen??
[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]
Pagina: 1