Soap optimalisatie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb op het moment een soap server draaien die productinformatie uit een microsoft sql database haalt en deze output.

Ik werk op het moment met batches van 100 producten per keer, dus in mijn script heb ik een while loop die een offset meegeeft:
code:
1
2
3
4
5
6
7
8
9
10
11
<?php
while {
try {
// in filter geef ik de offset mee
$products   = $soap_client->get_products($login_information, $filter);
}
catch {
// error handling
}
}
?>


Ik heb op dit moment het idee dat er voor elke call weer een connectie gemaakt wordt(geen idee hoe ik dit moet checken). Ik denk dat het met een openstaande connectie een stuk sneller kan gaan.
Nu heb ik heb ik op google al gezocht naar een persistant connection maar weet niet zeker of dat de enige manier is.

Dus mijn vraag: Is dit mogelijk en hoe kan ik dit implementeren?

extra info: PHP Version 5.2.6

Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10-09 20:32
Google is your friend

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik neem aan dat 'ie de HTTP connectie bedoelt voor de SOAP call ;) En dan zou je moeten gaan kijken naar <keyword_hint>KeepAlive</keyword_hint>.

[ Voor 14% gewijzigd door RobIII op 15-01-2010 14:48 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

Je wilt gebruik maken van prepared statements als je die producten wil inserten. Voor je SOAP call wordt inderdaad wel elke keer een nieuwe connectie gemaakt, want SOAP is geen permanente connectie, het is een pull protocol net als wanneer je een website of tekstbestand ophaalt/

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op vrijdag 15 januari 2010 @ 14:46:
Je wilt gebruik maken van prepared statements als je die producten wil inserten. Voor je SOAP call wordt inderdaad wel elke keer een nieuwe connectie gemaakt, want SOAP is geen permanente connectie, het is een pull protocol net als wanneer je een website of tekstbestand ophaalt/
Die prepared statements doe ik op dit moment nog niet, zal ik implementeren tnx.

Ok dan moet ik op een andere manier wat snelheid erin krijgen. De database is nmlk van een andere partij en kan geen velden toevoegen, anders had ik namelijk een date_updated veld toegevoegd aan de tabel zodat ik alleen de ge-update producten ophaal.

Zou het efficiënt zijn om een hash te maken van de producten die ik binnenkrijg en deze meesturen wanneer ik een volgende request doe, zodat er eerst wordt gekeken of de hash gelijk is en op basis daarvan de producten teruggeeft of niet teruggeeft?

Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10-09 20:32
RobIII schreef op vrijdag 15 januari 2010 @ 14:45:
[...]

Ik neem aan dat 'ie de HTTP connectie bedoelt voor de SOAP call ;) En dan zou je moeten gaan kijken naar <keyword_hint>KeepAlive</keyword_hint>.
Ah, mjah nu ik t opnieuw lees zie ik t ook idd :)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:30
MueR schreef op vrijdag 15 januari 2010 @ 14:46:
Voor je SOAP call wordt inderdaad wel elke keer een nieuwe connectie gemaakt, want SOAP is geen permanente connectie, het is een pull protocol net als wanneer je een website of tekstbestand ophaalt.
SOAP werkt (onder andere) over HTTP dus net zoals wanneer je "een website of tekstbestand ophaalt", kan de client de connectie openhouden, en zo meerdere requests over dezelfde connectie sturen. Dat kan iets schelen in latency, hoewel de winst op snelle verbindingen vrij klein is.

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
MueR schreef op vrijdag 15 januari 2010 @ 14:46:
Je wilt gebruik maken van prepared statements als je die producten wil inserten. Voor je SOAP call wordt inderdaad wel elke keer een nieuwe connectie gemaakt, want SOAP is geen permanente connectie, het is een pull protocol net als wanneer je een website of tekstbestand ophaalt/
MySQL functies (MySQLi) gaan uiteraard niet werken op een SQL Server (Microsoft). Gebruik dan PDO in PHP, daarmee kun je SQL Server aanspreken en prepared statements gebruiken.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

cariolive23 schreef op vrijdag 15 januari 2010 @ 15:48:
[...]

MySQL functies (MySQLi) gaan uiteraard niet werken op een SQL Server (Microsoft). Gebruik dan PDO in PHP, daarmee kun je SQL Server aanspreken en prepared statements gebruiken.
Alleen zegt TS dat de server waar hij productinfo uit haalt mssql gebruikt. Hij zegt verder niks over de server waar zijn code op draait ;) Voor het gemak ga ik uit van php/mysql, aangezien LAMP veruit de meest voorkomende configuratie is ;) Uiteindelijk maakt het ook niet veel uit, zolang TS maar op de hoogte is van prepared statements en hun nut.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
MueR schreef op vrijdag 15 januari 2010 @ 15:55:
[...]

Alleen zegt TS dat de server waar hij productinfo uit haalt mssql gebruikt.
Ik lees dit als dat het zijn server is die de data uit de database trekt en dat hij een probleem heeft met het iedere keer opnieuw aanmaken van de database connectie.

De resultaten van de queries worden vervolgens via SOAP beschikbaar gesteld.

Maar goed, zo lees ik het en ik kan het heel goed mishebben :? Laten we de reactie even afwachten, dan weten we het zeker. Kunnen we de TS ook verder helpen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sorry voor de onduidelijkheid dan :)

Ik trek informatie uit een mssql database m.b.v. een soapserver, deze output de informatie en deze interpreteer ik weer met php en stop ze in een mysql db.

@MueR: Ik heb op dit moment de prepared statements in gebruik, nu nog testen hoeveel tijdwinst dit opleverd. Ik execute ongeveer: 150000 statements in 4 querys.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 15 januari 2010 @ 16:36:
sorry voor de onduidelijkheid dan :)
Die is er nog steeds. Je hebt nu namelijk nog steeds niet verteld over welke connectie je het hebt in je TS.
Feitelijk heb je drie connecties:

code:
1
MySQL <---1---> PHP/SOAP <---2---> SOAPServer <---3---> MSSQL

Je hebt het over "elke call weer een connectie", maar dat kan dus elk van de 3 zijn. En elk van de drie is te "persisten" wanneer nodig. Verder heb je het over "calls" maar heb je het dan over het uitvoeren van een SOAP methode (van PHP naar SoapServer)? Of het executen van een MySQL/MSSQL query?

[ Voor 23% gewijzigd door RobIII op 15-01-2010 16:48 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

RobIII schreef op vrijdag 15 januari 2010 @ 16:44:
[...]

Die is er nog steeds. Je hebt nu namelijk nog steeds niet verteld over welke connectie je het hebt in je TS.
Feitelijk heb je drie connecties:

code:
1
MySQL <---1---> PHP/SOAP <---2---> SOAPServer <---3---> MSSQL

Je hebt het over "elke call weer een connectie", maar dat kan dus elk van de 3 zijn. En elk van de drie is te "persisten" wanneer nodig. Verder heb je het over "calls" maar heb je het dan over een SOAP Call (van PHP naar SoapServer)? Of het executen van een MySQL/MSSQL query?
QFT.

Plus voor mij de vraag wat er precies het traagste werkt: het connecten, het lezen, het verwerken, het inserten? Al die dingen zijn meetbaar namelijk. :)

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op vrijdag 15 januari 2010 @ 16:44:
[...]

Die is er nog steeds. Je hebt nu namelijk nog steeds niet verteld over welke connectie je het hebt in je TS.
Feitelijk heb je drie connecties:

code:
1
MySQL <---1---> PHP/SOAP <---2---> SOAPServer <---3---> MSSQL

Je hebt het over "elke call weer een connectie", maar dat kan dus elk van de 3 zijn. En elk van de drie is te "persisten" wanneer nodig. Verder heb je het over "calls" maar heb je het dan over het uitvoeren van een SOAP methode (van PHP naar SoapServer)? Of het executen van een MySQL/MSSQL query?
Het gaat om de 2e connectie, dus de connectie tussen soap_client en soap_server.
De mssql querys(3) gaan snel en voor connectie 1 heb ik net de prepared statements gebruikt.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 15 januari 2010 @ 16:54:
[...]


Het gaat om de 2e connectie, dus de connectie tussen soap_client en soap_server.
Waarom ben je dan bezig (gegaan) met prepared statements :? Zou het niet slimmer geweest zijn om iedereen er even op te wijzen dat 't om 2 ging voordat je je ging verdiepen in prepared statements?
Verwijderd schreef op vrijdag 15 januari 2010 @ 16:54:
De mssql querys(3) gaan snel en voor connectie 1 heb ik net de prepared statements gebruikt.
Ik neem aan dat je wist/weet waar de bottleneck zat (2 dus); ik zie dan even niet waarom je met de tips die je daar op kreeg niets deed :? Je zult vast wel wat gewonnen hebben met die prepared statements maar ik denk dat je hele bottleneck gewoon uberhaupt de enorme crapload aan data die je over de lijn sleurt is. Dan zullen die paar millisecondes die je wint weinig uithalen lijkt me? Even uitgaande van een
code:
1
Wan-->ADSL/Cable/whatever-->Cloud-->Server
situatie zul je met wat andere slimme optimalisaties veel en véél meer tijd kunnen winnen. Dat is o.a. http-keepalive gebruiken, maar bijvoorbeeld ook compressie e.d.

[ Voor 24% gewijzigd door RobIII op 15-01-2010 16:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op vrijdag 15 januari 2010 @ 16:56:
[...]

Waarom ben je dan bezig (gegaan) met prepared statements :? Zou het niet slimmer geweest zijn om iedereen er even op te wijzen dat 't om 2 ging voordat je je ging verdiepen in prepared statements?


[...]

Ik neem aan dat je wist/weet waar de bottleneck zat (2 dus); ik zie dan even niet waarom je met de tips die je daar op kreeg niets deed :? Je zult vast wel wat gewonnen hebben met die prepared statements maar ik denk dat je hele bottleneck gewoon uberhaupt de enorme crapload aan data die je over de lijn sleurt is. Dan zullen die paar millisecondes die je wint weinig uithalen lijkt me?
Omdat ik hier ook wat tijdwinst kon krijgen.

Verder: Er wordt gezegd dat de soap_call werkt als een pull methode en hij niet open kan blijven staan. Zie er veder geen tips tussen staan.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 15 januari 2010 @ 16:58:
Verder: Er wordt gezegd dat de soap_call werkt als een pull methode en hij niet open kan blijven staan. Zie er veder geen tips tussen staan.
O nee? RobIII in "Soap optimalisatie"
(En check mijn edit nog even, mocht je die gemist hebben)

[ Voor 17% gewijzigd door RobIII op 15-01-2010 17:00 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op vrijdag 15 januari 2010 @ 16:59:
[...]

O nee? RobIII in "Soap optimalisatie"
(En check mijn edit nog even, mocht je die gemist hebben)
Ja maar daaronder wordt in 2 berichten gezegd dat dat niet werkt... (dus dat hij voor elke call een nieuwe connectie maakt, vandaar dat ik daar niet naar gekeken heb.. , ga er nu even voor inlezen)

compressie ga ik ook naar kijken.

[ Voor 3% gewijzigd door Verwijderd op 15-01-2010 17:04 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 15 januari 2010 @ 17:02:
[...]

Ja maar daaronder wordt in 2 berichten gezegd dat dat niet werkt... (dus dat hij voor elke call een nieuwe connectie maakt, vandaar dat ik daar niet naar gekeken heb.. , ga er nu even voor inlezen)

compressie ga ik ook naar kijken.
Begin eens met te meten (en ons te vertellen) hoeveel HTTP requests er worden gedaan en hoeveel data er (per keer en/of in totaal) over de lijn gaat etc. En met "hoeveel data" doel ik op kb's/mb's maar ook aantallen items/producten etc. Meten = weten. Afhankelijk van die zaken/gegevens kunnen we dan ook weer zinnige input geven.

[ Voor 7% gewijzigd door RobIII op 15-01-2010 17:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Comp_Lex
  • Registratie: Juni 2005
  • Laatst online: 11-09 17:48
Mijn excuses.

[ Voor 86% gewijzigd door Comp_Lex op 15-01-2010 20:06 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Comp_Lex schreef op vrijdag 15 januari 2010 @ 17:29:
Als het allemaal toch zeer snel moet, waarom draait er dan een SOAP server?
Misschien omdat de externe partij alleen maar een SOAP interface aan biedt :?
Verwijderd schreef op vrijdag 15 januari 2010 @ 14:53:
De database is nmlk van een andere partij en kan geen velden toevoegen, anders had ik namelijk een date_updated veld toegevoegd aan de tabel zodat ik alleen de ge-update producten ophaal.
Ik ga er tenminste wel even van uit dat als TS niet bij de DB kan hij ook niet bij de interface die de partij aanbiedt kan. (Wat overigens het aantal mogelijke oplossingen ook drastisch beperkt; hoewel een aantal daarvan misschien met het lief aankijken van die partij nog wel te doen zijn voor beide partijen en niet een compleet nieuwe interface vereisen).

[ Voor 57% gewijzigd door RobIII op 15-01-2010 18:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1