Jump to content
php.lv forumi

Izvade no MySQL


ArnisR

Recommended Posts

@F3llony

Tev nu gan ir verbālā caureja, vai tad viena vīna pudele atstāj tādas sekas jebšu tev tā vienmēr? ;)

Un nevajag lietas uztvert tik dziļi personīgi, es jau tevi nevaru atlaist :D

 

OK tagad pie lietas. Precizēju, kas ir ļoti ļoti slikti.

Un tas ir, ja tā vietā, lai atlasītu datus no 2 tabulām, izmantojot visparastāko savienojumu, vispirms ciklā atlasa ierakstus no vienas tabulas un tad katram ierakstam no pirmās iekšējā ciklā atlasa no otras. Patiesību sakot viss pārējais jau vairs nav būtiski. Ja persona par savienojumiem nav informēta, tad vēl ir cerība, jo, protams, neviens nav piedzimis ar SQL zināšanām jau šūpulī. Taču, ja persona to zina, bet nelieto ar tekstu "datu bāze ir paredzēta datu glabāšanai, ne apstrādei", tad man tikai atliek izstāstīt analoģiju no ikdienas dzīves.

 

Pieņemsim, ka no veikala ir jāpārnes 3 kg cukura, 2 piena pudeles un 10 sērkociņu kastītes. Kā rīkojas vairums cilvēku, kuriem nemaz nav nepieciešams būt ar aizstāvētu doktora grādu raķešzinātnēs? Aiziet uz veikalu, izstaigā to, sameklē vajadzīgo, samaksā kasē, samet maisiņā un dodas mājās.

 

Kā rīkojas cilvēki, kas neatzīst šādu pieeju?

Viņi iet uz veikalu, aiziet pie cukura plauktiņa, atrod paciņu, ieliek groziņā, samaksā kasē un nes mājās. Tad iet vēlreiz, dara visas tās pašas darbības un atnes nākošo. Tad vēl 1 reizi. Tad iet un atnes vienu piena pudeli. Tad nākošo utt līdz viss vajadzīgais mājās.

 

Iespējams, ka veikalā (aka MySQL) šo savādnieku jau pazīst un, lai viņa dzīve nepārvērstos ellē, tomēr samet visas cukura paciņas kulītē uzreiz (aka atlasa visus ierakstus buferī, kā te minēja) kā izskatās pēc mysql_query un mysql_unbuffered_query, tad viņš tā dara, jā. Dikti loģiski jau tas īsti nemaz nav, jo mazliet gudrākām DB parasti no programmēšanas vides var uzstādīt parametru cik ierakstus ar vienu fetchu atlasīt, jo pie lielākiem ierakstu daudzumiem visu vienā piegājienā iekopēt atmiņā ir diezgan killerisks pasākums, kā izskatās par to pat kāds ir pamanījies MySQL bugu iesniegt.

 

Šeit diemžēl ir tas pats. Protams, ka kaut kādā lapiņā, ko kāds atvērs pāris reizes dienā, tas it kā ir nebūtiski. Bet problēma ir tā, ka šāds izstrādātājs ar šādām zināšanām nekad nevarēs izdarīt neko vairāk, vai arī izdarīs to ļoti slikti. Un darot slikti un nepareizi mazas lietas, darīs slikti un nepareizi arī lielas.

 

Gints Plivna

http://datubazes.wordpress.com

Edited by Gints Plivna
Link to comment
Share on other sites

Un tas ir, ja tā vietā, lai atlasītu datus no 2 tabulām...

Nebūtu vēl efektīvāk glabāt visu vienā tabulā?

id(INT), name(VARCHAR 30), parent_id(INT)

Augstākā līmeņa kategorijām parent_id = 0

Var no tādas ar vienu query dabūt ārā hierarhiski sakārtotas neierobežota dziļuma kategorijas? Vai kaut vai 3 līmeņus?

Link to comment
Share on other sites

Nebūtu vēl efektīvāk glabāt visu vienā tabulā?

 

Es teiktu, ka tas noteikti būtu elastīgāk, jo neierobežo maksimālo kategoriju dziļumu. Tiesa gan praksē var rasties zināmas problēmas anyway, jo MySQLam tādu īstu rekursīvo vaicājumu nav, ir jāizlīdzas vai nu ar vaicājumu fiksētā dziļumā vai arī jāizmanto speciālas DB konstrukcijas. Praksē tādām kategorijām jau nu gan parasti arī dziļums ir ierobežots uz kādām 4-5 max, vairāk šķiet normāli neesmu redzējis. No otras puses, ja šeit oriģinālā jautājuma autoram ar 2 līmeņiem pilnībā pietiek un viss jau uzkodēts atbilstoši tam, tad droši vien nav vērts šaut ar lielgabalu pa zvirbuļiem un sarežģīt lieki sev dzīvi :)

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

Ja jau runājama par veikaliem, pieņemu, ka SQL guru veikalā arī ēst gatavo :) Tas taču ir optimālāk, kā stiept visu paiku uz mājām un gatavot tur. Šādā gadījumā taču var vispār nekur neiet. Sēdēt savā veikalā un gatavot ēst. Un tur pat arī dzīvot. Un tieši šī iemesla dēļ DBtardi uzskata, ka SQL ir spēcīga datu apstrādes valoda? Bwaraahaahahahaha. Izrādās, SQL guru tā pat kā jebkurš guru no 10 gadus vecas pagātnes uzskata, ka tas, kas pirms 10 gadiem bija loģiski, arī tagad ir loģiski :>

 

Dikti loģiski jau tas īsti nemaz nav, jo mazliet gudrākām DB parasti no programmēšanas vides var uzstādīt parametru cik ierakstus ar vienu fetchu atlasīt, jo pie lielākiem ierakstu daudzumiem visu vienā piegājienā iekopēt atmiņā ir diezgan killerisks pasākums

HAHA no shit dude, its called limit :>

 

Šeit diemžēl ir tas pats. Protams, ka kaut kādā lapiņā, ko kāds atvērs pāris reizes dienā, tas it kā ir nebūtiski. Bet problēma ir tā, ka šāds izstrādātājs ar šādām zināšanām nekad nevarēs izdarīt neko vairāk, vai arī izdarīs to ļoti slikti. Un darot slikti un nepareizi mazas lietas, darīs slikti un nepareizi arī lielas.

Atkal jau spriežam par lietām, pār kurām cienītajam nav lemšanas?

 

Deru 100%, ka Plivnas kungs ir kāda Eiropas vadošā dev/it uzņēmuma SQL ģenerālinženieris. Bonusā visam, Plivnas kungs pārvalda padsmit programmēšanas valodas, lai zinātu kur kādā gadījumā kas ir un kas nav pareizi. :> Zini ko, gtfo pie savām datu bāzēm. Programmētājs no tevis draņķīgs, da i pie DB darba tā pat daudz. Sākt tu varētu ar to, ka optimizētu db dziņus daudz lieliem pieprasījumiem. Lai mums vairs nebūtu jānonāk pie šīs sarunas un man nenāktos precašot db, kurās ir +/- vairāk par 50 milj. ierakstu.

 

Pieņemu, ka augstāk minētie argumenti tika atspēkoti vēl pirms to definēšanas, šeit- http://php.lv/f/topic/18352-izvade-no-mysql/page__view__findpost__p__143554

 

 

Es teiktu, ka tas noteikti būtu elastīgāk, jo neierobežo maksimālo kategoriju dziļumu. Tiesa gan praksē var rasties zināmas problēmas anyway, jo MySQLam tādu īstu rekursīvo vaicājumu nav, ir jāizlīdzas vai nu ar vaicājumu fiksētā dziļumā vai arī jāizmanto speciālas DB konstrukcijas. Praksē tādām kategorijām jau nu gan parasti arī dziļums ir ierobežots uz kādām 4-5 max, vairāk šķiet normāli neesmu redzējis. No otras puses, ja šeit oriģinālā jautājuma autoram ar 2 līmeņiem pilnībā pietiek un viss jau uzkodēts atbilstoši tam, tad droši vien nav vērts šaut ar lielgabalu pa zvirbuļiem un sarežģīt lieki sev dzīvi :)

 

Ģēnij, arī nestošanas ierobežojumu es faktiski atcēlu postā, kurš norādīts augstāk datu bāzes līmenī. Vienkārši PHP būtu mazliet jāpalabo lai atbalstītu rekursiju, piemēram multifunkcionāla rekursīva klase varētu derēt?

Edited by F3llony
Link to comment
Share on other sites

No visa tā sviesta, ko tu sacerēji, par dažām lietām, kas attiecas vairāk vai mazāk par tēmu:

Izrādās, SQL guru tā pat kā jebkurš guru no 10 gadus vecas pagātnes uzskata, ka tas, kas pirms 10 gadiem bija loģiski, arī tagad ir loģiski :>

 

Tu neticēsi, bet piemēram matemātikā ir loģiskas lietas, ko cilvēki ir atklājuši pirms n tūkstošiem gadu un tās vēl joprojām ir loģiskas. Arī datorzinātnēs pamatlietas nav mainījušās neatkarīgi no tā, ka katra nākošā krutā programmēšanas vide sola visu apgriezt kājām gaisā un sākt dzīvo no jauna. Tev acīmredzot vēl mazliet jāpaug un jāiegūst mazliet pieredze, lai saprastu, ka ar tevi nav sākusies civilizācija uz zemes, vai vismaz jauna ēra :)

Runājot par datubāzēm ļoooti daudzas pamatlietas, kas bija pirms 10 un 20 gadiem nav mainījušās. Un visdrīzāk, ka nemainīsies arī tuvākajā nākotnē.

HAHA no shit dude, its called limit :>

Yeahhh nu pēc tā jau vien var spriest par tavām zināšanām par DB ;) LIMITs, kas BTW ir MySQL specifiska konstrukcija, loģiski ierobežo atgriežamo datu kopu. Fetch ir pavisam cita lieta, tā ir fiziskā operācija, kas vispārīgā gadījumā nolasa N ierakstus no kursora. Pie tam šo N parasti var konfigurēt, jo optimālā vērtība varētu būt atkarīga no konkrētās programmatūras un pielietojuma. Kā redzams no tā buga, ko minēju augstāk, tad MySQL ar to ir problēmas, jo izskatās, ka noklusēti nolasa visu reizē un nav īpašu iespēju to konfigurēt.

 

Labi, trolli, nu jau būšu pietiekami daudz veltījis tev savu uzmanību. Kad izaugsi, pieņemsies prātā, sapratīsi, ka civilizācija nav sākusies līdz ar tevi, tad arī parunāsim ;)

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

"Tavus source". Es arī... patika? )) Tu liecies patiešām stulbs! Ko Tu kam centies pierādīt? To, ka māku tukšu gvelzt? To, ka nespēj ieklausīties citos? Tikai mēģināt nolikt citus? Tas nekam neder... Saņemies, vecīt!

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...