Jump to content
php.lv forumi

X Y koordināsu plakne , php + mysql


astere

Recommended Posts

Sveicināti!

Aiz gara laika izdomāju izveidot koordināšu plakni datubāzē, X no -1000 līdz + 1000 , Y no - 1000 līdz +1000 , tāpat diognāles (x=1;y=1 un uz augšu...) , vienā reizē uz ekrāna tiek parādītas 45 kvadranti ar 45 kverijem (katrai koordinātei) + katram kverijam ir dažādi nosacījumi, piem. x='$x+1' and y='$y-8', tajā pašā laikā , 9 kvadranti, skaitās kā pogas, kuras submitojot tiek mainīts atskaites punkts. Problēma rodas tajā, ka pēc sākuma atskaites punkta updteitošanas "neregulāri" parādās rezultāts - pa vienai koordinātei pēc kārtas, velētos panākt, ka pēc updeita - parādās uzreiz visas koordinātes.

 

1. Vai nebūtu labāk izmantot iframe plaknei, lai nerefrešotos pārējie mājas lapas dati? Citi ieteikumi?

2. Cik liela iespēja, ka mape daudz ātrāk ielādēsies ja 45 kveriju vietā tiks izmantos viens kverijs ar lielu skaitu JOINIEM ?

3. Vai iespējams iztikt ar vienu "mazu" kveriju, tajā pašā laikā visus aprēķinus veic php ? (dotajā momentā php aprēķina koordinātes pēc kurām tiek atlasīti dati no mysql)

4. varbūt labāk izmantot ajax datu izvadei/updeitošanai? - tiesa tur man nāksies ļoti daudz googlēt :/

5. Citi varianti/ieteikumi?

 

 

Karte

id |x |y | bilde |adrese |

 

Atskaites punkts

|id|liet_id| x | y | untt. | un tt.

Link to comment
Share on other sites

1. Vai nebūtu labāk izmantot iframe plaknei, lai nerefrešotos pārējie mājas lapas dati? Citi ieteikumi?

Vislabāk ir izmantot ajax.

 

2. Cik liela iespēja, ka mape daudz ātrāk ielādēsies ja 45 kveriju vietā tiks izmantos viens kverijs ar lielu skaitu JOINIEM ?

Necik! Labāk izmantot:

1) vienu kveriju ar nosacījumu x>$x1 and x<$x1+8 and y>$y1 and y<$y+8

2) izmantot Spatial mysql paplašinājumu un indeksu, kas ievērojami palielinās ātrdarbību.

Šijā gadīumā kverijs izskatīsies aptuveni šādi:

SELECT * FROM tabula WHERE MBRContains(GeomFromText('Polygon(($x1 $y1,$x1 $y2,$x2 $y2,$x2 $y1,$x1 $y1))'),latlng)

kur latlng būs TPoint tipa lauks. Un attiecīgi x1,y1- viens tainsstūra stūris, x2,y2-otrs taisnstūra stūris pa diognāli.

 

3. Vai iespējams iztikt ar vienu "mazu" kveriju, tajā pašā laikā visus aprēķinus veic php ? (dotajā momentā php aprēķina koordinātes pēc kurām tiek atlasīti dati no mysql)

atbilde 2.

 

4. varbūt labāk izmantot ajax datu izvadei/updeitošanai? - tiesa tur man nāksies ļoti daudz googlēt :/

Link to comment
Share on other sites

2. Cik liela iespēja, ka mape daudz ātrāk ielādēsies ja 45 kveriju vietā tiks izmantos viens kverijs ar lielu skaitu JOINIEM ?

45 kveriji VIENMER izpildiisie lenak nekaa Liels JOIN kverijs ...

JO:

PHP pusee jaizpilda tikai 1 konekcija/pieprasijums/ datu savaksana no DB nevis 45

Shis ir samera lens proces, var pat teikt ka ' pudeles kakls' , jo dati tiek dznati caur tiklu (nevajag aizmirst, ka arii uz localhost tiek izmantoti tiikla protakoli )

DB: pusee, javeic tikai 1 lietotaju atljaujas parbaude. 1 japarbauda ' kesh atminja' , utt.

---

Par to papildu modulju izmantosanu. ja tas tiek dariits trenninjiem, vai savam personigajam projektam uz sava hosta, tad ir OK. savadak labak neizmantot,

jo nekad jau nevar zinat kur naksies hosteet ....

Link to comment
Share on other sites

Par to papildu modulju izmantosanu. ja tas tiek dariits trenninjiem, vai savam personigajam projektam uz sava hosta, tad ir OK. savadak labak neizmantot,

jo nekad jau nevar zinat kur naksies hosteet ....

Šis paplašinājums ir iekļauts kopš 5.0.16 versijas un ir vienīgais veids kā mysql indeksēt tabulu pēc 2 parametriem vienlaicīgi, šijā gadījumā x un y koordinātes, vai latitude, longitude, vai vienlagas kādi citi 2 parametri.

Ja tev būs karte ar 1000000 objetkiem (piemēram, 1000x1000 kartes gabaliņi), kuri glabājas mysql datu bāzē, tad pat nav citas racionālas iespējas, kā lietot šo mysql paplašinājumu.

Link to comment
Share on other sites

nevajag aizmirst, ka arii uz localhost tiek izmantoti tiikla protakoli )

Tas nav tiesa. MySQL'am, piemēram, ir skip-networking servera parametrs, kas neklausās klientu konekcijas caur tīklu. Tas ļauj piekonektēties tikai lokāli ar lokālām metodēm (named pipes vai shared memory), kuras ir performancīgākas nekā tīkla protokoli.

Pie tam - nezinu kā citās OS'ēs, bet Windows'ā konekcija uz localhostu neizmanto īsto networking kodu. Tas tiek emulēts ar named pipe's palīdzību (lasīt - tas ir daudz ātrāk nekā tcp/ip vai citas konekcijas).

Link to comment
Share on other sites

Tas tiek emulēts ar named pipe's palīdzību (lasīt - tas ir daudz ātrāk nekā tcp/ip vai citas konekcijas).

Bet tomer tiek emulets Kas arii aiznjem laiku ...

Sajaa gadijumaa protams nav tik butiski vai izmanto tcp/ip vai citu varijantu , bet savienojums starp SQL un PHP vienalga ir sameera lena lieta ( ' pudeles kakls' )...

Link to comment
Share on other sites

Es nepareizi izteicos. Nevis emulēts, bet tā (tīkla send/recv/utt) vietā tiek lietotas named pipe send/recv/utt funkciju analogi. Tur overheads ir praktiski nekāds. Atšķirās tikai API interfeiss, funkciju izskats.

Link to comment
Share on other sites

Kuras nianses tieši? To, ka mysql var nezimantot tīkla protokolu? To izlasīju mysql dokumentācijā (par to skip-networking argumentu).

A par to named pipe izmantošanu localhost konekcijām windows'ā, ja pareizi atceros, tad to izlasīju vienā blogā, kuru raksta developeris no microsofta. Visdrīzāk kautur šajā vietā http://blogs.msdn.com/ (iespējams arī, ka maldos - es nevaru atcerēties to, kur visu uzzinu :)

Link to comment
Share on other sites

Ieejot MySQL Administrator GUI toolī pie Startup Variables => General Parametrs, var ielikt ķeksi pie Enable named pipes. Katram parametram ir arī neliels apraksts, ko šis parametrs dara.

To pašu protams var mainīt arī caur mysql.ini failu.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...