Kom ihåg mig?

Prestandaproblem med komplicerad SQL och 400.000 rader

 
Ämnesverktyg Visningsalternativ
Gammal 2011-12-01, 13:07 #1
Westmans avatar
Westman Westman är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jun 2004
Inlägg: 4 021
Westman Westman är inte uppkopplad
Klarade millennium-buggen
Westmans avatar
 
Reg.datum: Jun 2004
Inlägg: 4 021
andreasp har svarat samma sak kom jag på

Senast redigerad av Westman den 2011-12-01 klockan 13:09
Westman är inte uppkopplad   Svara med citatSvara med citat
Gammal 2011-12-01, 22:53 #2
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
Tack alla för feedback!

Jag har kommit fram till att trimma min befintliga lösning. Ändrade datatypen till float och gjorde en avgränsning av koordinaterna i sql-frågan (med hjälp av BETWEEN och +- en viss marginal på utgångskoordinaten) för att sen finjustera med php.

Resultatet blev att laddningstiden sjönk nästan med hälften. En laddningstid på drygt en sekund på de tunga sidorna känns som att jag får acceptera. De flesta sidorna har en laddningstid på 0,1 sekunder numera (mot ca 0,4 innan).

Laddningstid = tid för att generera färdig html.
gregoff är inte uppkopplad   Svara med citatSvara med citat
Gammal 2011-12-02, 00:41 #3
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Citat:
Ursprungligen postat av gregoff Visa inlägg
Tack alla för feedback!

Jag har kommit fram till att trimma min befintliga lösning. Ändrade datatypen till float och gjorde en avgränsning av koordinaterna i sql-frågan (med hjälp av BETWEEN och +- en viss marginal på utgångskoordinaten) för att sen finjustera med php.

Resultatet blev att laddningstiden sjönk nästan med hälften. En laddningstid på drygt en sekund på de tunga sidorna känns som att jag får acceptera. De flesta sidorna har en laddningstid på 0,1 sekunder numera (mot ca 0,4 innan).

Laddningstid = tid för att generera färdig html.
Hej gregoff,

Vore intressant om ville dela med dig av följande:
* hur skapar du den rektangeln som du selekterar SQL-en med - utifrån från centrumpunkten och utvidgar den till en fyrkant med (cirkelradien * 2) som sidlängd?
* hur arbetar du med finjusteringen i PHP

Jag har gjort liknande saker, och en något som snabbade upp för mig var att bryta ut long + lat + "POI-id" till en egen tabell och lägga på index på long och lat. Men det beror ju lite på databasdesign & mängd data om det lönar sig. Vissa värden i sql-cirkelformeln går även att förkalkylera utanför databaslagret.

Mvh Robert
coredev är inte uppkopplad   Svara med citatSvara med citat
Gammal 2011-12-02, 09:09 #4
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
Absolut!

I grova drag handlar problemet om att jag vill ha ut närliggande koordinater utifrån en fast punkt.

Jag började med att räkna ut hur stor en kvadrat blir som precis omger cirkeln med samma radie som jag är ute efter (ex 20 miles). En av sidorna på kvadraten är därmed 40 miles. Det längsta avståndet inom kvadraten mätt ifrån mittpunkten är till ett av hörnen och blir i detta fallet ca 28,3 miles (pythagoras sats).

Andra delen i lösningen är att hitta rätt felmarginal i koordinaterna som motsvarar max 28,3 miles (jag landade på ca 29 miles enl. nedanstående exempel).

Exempel (koordinaten är tagen ur luften):
$lat: 30.1234
$long: -63.5552
$p: 0.35 (kom jag fram till via trial & error)

($p är "felmarginalskoordinat")

Så jag körde en SELECT med dom data jag ville ha ut och körde med villkoren

$sql = "SELECT LAT,LONG FROM tabellen
WHERE (LAT BETWEEN ".($lat-$p)." AND ".($lat+$p).")
AND (LONG BETWEEN ".($long-$p)." AND ".($long+$p).")";

Därefter kör jag en avståndsberäkning mellan svaren och min fasta punkt och sorterar med PHP enl. tex:
http://www.web-max.ca/PHP/misc_2.php

Efter sorteringen kan jag enkelt sortera bort dom som ligger utanför cirkelradien.

Ungefär så...

Citat:
Ursprungligen postat av coredev Visa inlägg
Hej gregoff,

Vore intressant om ville dela med dig av följande:
* hur skapar du den rektangeln som du selekterar SQL-en med - utifrån från centrumpunkten och utvidgar den till en fyrkant med (cirkelradien * 2) som sidlängd?
* hur arbetar du med finjusteringen i PHP

Jag har gjort liknande saker, och en något som snabbade upp för mig var att bryta ut long + lat + "POI-id" till en egen tabell och lägga på index på long och lat. Men det beror ju lite på databasdesign & mängd data om det lönar sig. Vissa värden i sql-cirkelformeln går även att förkalkylera utanför databaslagret.

Mvh Robert

Senast redigerad av gregoff den 2011-12-02 klockan 09:16
gregoff är inte uppkopplad   Svara med citatSvara med citat
Gammal 2011-12-02, 09:06 #5
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
Citat:
Ursprungligen postat av gregoff Visa inlägg
Tack alla för feedback!

Jag har kommit fram till att trimma min befintliga lösning. Ändrade datatypen till float och gjorde en avgränsning av koordinaterna i sql-frågan (med hjälp av BETWEEN och +- en viss marginal på utgångskoordinaten) för att sen finjustera med php.

Resultatet blev att laddningstiden sjönk nästan med hälften. En laddningstid på drygt en sekund på de tunga sidorna känns som att jag får acceptera. De flesta sidorna har en laddningstid på 0,1 sekunder numera (mot ca 0,4 innan).

Laddningstid = tid för att generera färdig html.
Smart lösning!
Jag skulle också tycka att det skulle vara väldigt intressant att höra lite mer om hur du gjort eller till och med få se lite kod.
Gör du beräkningen och avståndet och sorteringen i (My)SQL eller PHP?

Det där fungerar nog bra så länge du inte har allt för många besökare, men det är ju en sån sak som kan sänka servern vid mycket trafik.
pelmered är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 15:58.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017