Gints Plivna Posted February 26, 2011 Report Share Posted February 26, 2011 (edited) @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 February 26, 2011 by Gints Plivna Quote Link to comment Share on other sites More sharing options...
Rincewind Posted February 26, 2011 Report Share Posted February 26, 2011 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? Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted February 26, 2011 Report Share Posted February 26, 2011 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 Quote Link to comment Share on other sites More sharing options...
codez Posted February 27, 2011 Report Share Posted February 27, 2011 heh, patika salīdzinājums ar veikalu. Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 27, 2011 Report Share Posted February 27, 2011 (edited) 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 February 27, 2011 by F3llony Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted February 27, 2011 Report Share Posted February 27, 2011 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 Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 27, 2011 Report Share Posted February 27, 2011 Nē, Viņš nav trollis, Viņš Sevi sauc par programmēšanas ekspertu... xDD Quote Link to comment Share on other sites More sharing options...
Rincewind Posted February 27, 2011 Report Share Posted February 27, 2011 LIMITs, kas BTW ir MySQL specifiska konstrukcija Man liekas ka SQLite arī ir LIMITs. Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 27, 2011 Report Share Posted February 27, 2011 (edited) The Game. P.S arī MSSQL ir Limit iespēja, tikai keywords cits :} :* @daGrāvi, ar tevi salīdzinot arī mopsis ir eksperts. Edited February 27, 2011 by F3llony Quote Link to comment Share on other sites More sharing options...
codez Posted February 27, 2011 Report Share Posted February 27, 2011 Nē, Viņš nav trollis, Viņš Sevi sauc par programmēšanas ekspertu... xDD Es redzu, ka pie viņa vārda rakstīts: "skriptu bērns" Quote Link to comment Share on other sites More sharing options...
F3llony Posted February 27, 2011 Report Share Posted February 27, 2011 Ja jau reiz par ekspertiem runa, daGrāvis varētu iecitēt/ieskrīnot, kur tieši esmu sevi saucis par ekspertu? Tīri principa pēc. Second, daGrāvi, atšķirībā no citiem šīs sarunas dalībniekiem es esmu redzējis tavus source. Redzējis daudz tavus source. :> Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 27, 2011 Report Share Posted February 27, 2011 "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! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.