F3llony Posted August 14, 2013 Report Share Posted August 14, 2013 Neko viņš nav atklājis, tas, ka dati ir invalidi tiklīdz tie ir nolasīti un ar tiem strādā vairāk kā viens klients jau sen ir visai populārs fakts. Viņam tikai labpatīkas domāt, ka visi apkārt ir idiņi. Komplicētā biznesa loģika blogā... Stulbenis... Quote Link to comment Share on other sites More sharing options...
codez Posted August 14, 2013 Report Share Posted August 14, 2013 (edited) Komplicētā biznesa loģika blogā... Stulbenis... Var redzēt, ka tu ikdienā nodarbojies ar vizītkaršu veidošanu, ja tev no tevis nāk šādi izteicieni. Piemēram, bloga platformā var ieviest sistēmu, kas automātiski flago nepiedienīgus komentārus, balstoties uz lietotāja atstāto balsu statistiskajiem datiem un tas viss var notikt reālā laikā - requestā, kurš apstrādā lietotāja balsojumu par komentāru. Un šeit var tikt izmantotas dažādas stratēģijas, tai skaitā eksponenciāla komentāra reitinga normalizēšana laikā vai citas stratēģijas, kuras ļauj iegūt jaunos statistiskos datus, balstoties tikai uz iepriekšējo datu starprezultātiem, nevis visiem balsojumiem. P.S. Bet izskatās, ka tev nav nekāda matemātikas backgrounda un tavi griezti nevēlāmu komentāru automātiskā moderēšanā butu: if ($negative_votes>5) $comment->flag_invisible(); P.P.S. Pie tam vēl izskatās, ka tu esi viens no tiem jefiņiem, kurš atbalsta biznesa loģikas rakstīšanu SQL-ā. Novēlu izturību tiem, kam būs jāuztur tavas rakstītās aplikācijas. Edited August 14, 2013 by codez Quote Link to comment Share on other sites More sharing options...
codez Posted August 14, 2013 Report Share Posted August 14, 2013 (edited) http://stackoverflow.com/questions/1030270/race-conditions-in-djangoYep, izskatās, ka django QuerySet-ā šis ir iekšā. Bet esmu redzējis pietiekami daudzus ORM un dinamiskos kveriju ģenerātorus, kuros tas nav. Edited August 14, 2013 by codez Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 14, 2013 Report Share Posted August 14, 2013 Žēl, ka man darbā 99% visu datubāžu (neskaitot manis no nulles rakstīto projektu) ir MyISAM (arī pasūtījumu/grāmatvedības sistēmas datubāze). Pārkonvertēju vienā projektā 4 tabulas uz InnoDB (produktu bilžu galerija un saistītās tabulas) un jau bija būtiskas problēmas. Quote Link to comment Share on other sites More sharing options...
codez Posted August 14, 2013 Report Share Posted August 14, 2013 MyISAM diemžēl neizslēdz šī tipa kļūdas, bet ir viena problēma, ar MyISAM viņas pat nav iespējams saprātīgi atrisināt, jo MyISAMam nav new row lock mehānisma, un pat ne transakcijas. Vispār dīvaini, ka kāds vēl reālās produkcijas sistēmās izmanto MyISAM. Vienīgā cerība ir tāda, ka tādai lokālai uzskaites sistēmai paralēli būs ļoti maz lietotāju un kolīziju iespējamība minimāla. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted August 14, 2013 Report Share Posted August 14, 2013 Pirmā ideja, kas prātā: Uztaisam tabulu ar nosaukumu "locks" un kolonām: id, table_name, column. Tad pielabojam datubāzes abstrakciju, lai, ja tabulas kolona ir aizslēgta, notiek sleep uz 10ms un tad retry. Craziest thing I said today. :D Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 14, 2013 Report Share Posted August 14, 2013 (edited) sleep uz 10ms yep, you're crazy. Edited August 14, 2013 by jurchiks Quote Link to comment Share on other sites More sharing options...
Леший Posted August 14, 2013 Report Share Posted August 14, 2013 (edited) Nu kas tie par variantiem? Jāizmanto tas rīks, kas ir vajadzīgs. Ja tev ir paredzētas tranzakcijas, tad jāizvēlās DB dzinējs, kuram ir tranzakcijas, tas nozīmē, ka par MyISAM nevar būt ne runas. Edited August 14, 2013 by Леший Quote Link to comment Share on other sites More sharing options...
daGrevis Posted August 14, 2013 Report Share Posted August 14, 2013 (edited) Diemžēl pastāv arī sistēmas, kur ir izvēlēts nepareizais rīks under-the-hood (PHP, MyISAM). Edited August 14, 2013 by daGrevis Quote Link to comment Share on other sites More sharing options...
Blitz Posted August 16, 2013 Report Share Posted August 16, 2013 Runājot par CI AR. Kā SQL abstrakcijas slānis manuprāt pilda ok savas funkcijas lielākoties (neliek bakstīt lieku kodu). Kur nu baigi vajag, tur var rakstīt plain SQL. 95% vienkāršam webam arī sastāv no šadiem kverijiem. $order['column1']='data1'; $order['column2']='data2'; $order['column3']='data3'; $this->db->insert('order',$order); $user['column1']='data1'; $user['column2']='data2'; $this->db->where('user_id', $user_id); $this->db->update('user',$user); Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 16, 2013 Report Share Posted August 16, 2013 Slikti "kveriji" IMHO. Where pirms update? Neintuitīvi. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted August 16, 2013 Report Share Posted August 16, 2013 Koa? Tieši otrādi. Pietam šāda veida abstrakcija ļauj darīt tādas lietas kā: ~~~ <?php $qs = Post::select() $qs->where("x", "=", 1) if ($foo) { $qs->where("y", "=", 2) } $qs->execute() ~~~ Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 16, 2013 Report Share Posted August 16, 2013 (edited) Tavs piemērs ir intuitīvs, kaut ko ne tā saprati. Tradicionāls SQL UPDATE ir šāds: "UPDATE table SET x = y WHERE blabla", attiecīgi būtu loģiski, ja abstrakcijā tas izskatītos ~šādi: $this->db->update('user', $data) ->where('user_id', $user_id) ->execute(); Tavs piemērs, attiecīgi: $stmt = Post::select() // kādā sakarā "Post"? ->where('x', '=', 1); if ($foo) { $stmt->where('y', '=', 2); } $stmt->execute(); Edited August 16, 2013 by jurchiks Quote Link to comment Share on other sites More sharing options...
daGrevis Posted August 16, 2013 Report Share Posted August 16, 2013 > // kādā sakarā "Post"? Post ir datubāzes modelis, kas atbild par postus. Mana doma ir tāda, ka tu vari čeinot funckijas un to darīt random secībā, ja tas konkrētajam piemēram ir loģiskāk. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 16, 2013 Report Share Posted August 16, 2013 Es vienkārši saku, ka izsaukt "update()" pēdējo (pēc datu padošanas un where clausēm) liekas galīgi neloģiski. 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.