F3llony Posted August 14, 2013 Report 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
codez Posted August 14, 2013 Report 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
codez Posted August 14, 2013 Report 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
jurchiks Posted August 14, 2013 Report 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
codez Posted August 14, 2013 Report 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
daGrevis Posted August 14, 2013 Report 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
jurchiks Posted August 14, 2013 Report Posted August 14, 2013 (edited) sleep uz 10ms yep, you're crazy. Edited August 14, 2013 by jurchiks Quote
Леший Posted August 14, 2013 Report 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
daGrevis Posted August 14, 2013 Report 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
Blitz Posted August 16, 2013 Report 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
jurchiks Posted August 16, 2013 Report Posted August 16, 2013 Slikti "kveriji" IMHO. Where pirms update? Neintuitīvi. Quote
daGrevis Posted August 16, 2013 Report 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
jurchiks Posted August 16, 2013 Report 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
daGrevis Posted August 16, 2013 Report 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
jurchiks Posted August 16, 2013 Report 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
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.