Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...
Wykorzystuję na codzień ( :/ )
Niestety procki mysql nie mają za wiele wspólnego z PL/SQL jak np w Oracle czy PostreSQL, nie są tak rozbudowane, ale też swój cel spełniają.
Wykorzystanie, kiedy?
1) Gdy mamy do czynienia z operacjami w większość na danych, z nieskomplikowaną logiką, ale za to dużymi ilościami - Jezyk pozwala na bardzo skomplikowane programy ale nie jest to w nim wydajne(czasowo).
2) Gdy mamy problemy wydajnościowe na styku aplikacji i dostępu do danych (warstwa middleware powinna to również rozwiązać)
3) Gdy mamy kod zastany -> dość często natrafia się na czyjąś dość mało spójną i udokumentowaną wizję
4) Gdy chcemy oddzielić bardzo wyraźnie rolę frontendu i backendu. Jedna osoba zajmuje się twrozeniem procedur przygotowujących dane (DBA) a inna je tylko wykorzystuje.
Problemy z logiką w procedurach:
- problemy z triggerami, często deweloperzy o nich zapominają i mamy efekt echa (1 akcja daje nam liczniki +2)
- wersjonowanie to duży problem, kolejne wersje mysql mają mieć coś zintegrowanego, ale to się okaże
- znacznie uboższy język, proste operacje zaczynają nam sprawiać problemy, brak narzędzi
- droższy cykl produkcyjny - pisanie w czymś trudniejszym i posiadającym mniej dobrych narzędzi (choćby debugować jest kłopot) jest bardziej czasochłonne, a przez to droższe
- problem z deploy'em na wiele baz - w sytuacji, gdy mamy wiele baz i musimy updatować często procedury, pojawiąją się problemu z potrzebą pisania dodatkowego softu. Facebook, który miał ten problem rozwiązał go procedurami NON STORED - dla znawców tematu ciekawostka
http://highscalability.com/blog/2010/11/9/facebook-use...
Osobiście nie jestem fanem procedur, są trudniejsze w pisaniu, testowaniu, utrzymaniu, a zysk z wydajności jakie dają (czyli jakies 10 minut procesora w skali miesiąca) w przypadku większości problemów nie wyrównuje nakładu pracy na to jaki trzeba na nie poświęcić. Oczywiście wszystko jest kwestią wydajność danego programisty w danym języku.
Pozdrawiam
Piotr