konto usunięte

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Bartosz Ratajczyk:
Zależy od stopnia skomplikowania. Przerzucenie na bazę serii operacji INSERT/UPDATE raczej nie będzie czymś trudnym.

Sam stosowałem procedury w MySQLu do importu danych. Przez stronę ładowany był plik, jedyna operacja po stronie aplikacji WWW to wrzucenie danych do tabeli buforowej (przez uruchomienie LOAD DATA INFILE), a potem procedura przetwarzała do formatu i tabel docelowych.

a poprawili w końcu tego bobola skutecznie utrudniającego wykonanie tej operacji z poziomu sp?

http://bugs.mysql.com/bug.php?id=14977
Tomasz Zadora

Tomasz Zadora programuję

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Błąd: to nie jest bug, to po prostu brak tego "feature" w procedurach. Bug to byłby np. wtedy gdyby taka operacja była możliwa (wg. zamysłu twórców) wewnątrz procedury ale nie działała poprawnie.

Kiedyś byłem fanem procedur i przerzucania logiki na stronę bazy danych, teraz już nie bardzo.

Po stronie bazy co najwyżej logika związana z kluczami obcymi, lub wyjątkowe rzeczy takie jak przykład który przytoczył Bartosz - jakieś patche, procesy uruchamiane cyklicznie, etc.

Np. jeżeli dla każdego skasowanego rekordu w bazie ma być wysłany email, albo zrobione coś w systemie plików lub samej aplikacji (PHP) to trudno już tego typu rzeczy wykonać w procedurze, albo wykonać procedurę a później z poziomu PHP analizować zmiany.

Wyjątkiem może jest np. PostgreSQL i integracją z Javą - ale piszemy o PHP.Tomasz Zadora edytował(a) ten post dnia 21.03.11 o godzinie 14:02

konto usunięte

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Przemysław R.:
1. Czy Wykorzystaliście kiedykolwiek procedurę po stronie MySQl-a we własnym projekcie. Jeżeli tak to do czego

Tak.

Obliczenia, przekształcenia.
2. Które elementy logiki można przenieść do procedury po stronie MySQL-a

Obliczenia, przekształcenia.
3. Haki związane z wydajnością takich rozwiązań

?

//

strasznie ogólne pytanie ...
Marcin Ślęzak

Marcin Ślęzak software development
manager, Webanywhere

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Największą potrzebę przerzucenia części logiki do procedur i funkcji po stronie DB czuję w momencie dostępu dwóch aplikacji napisanych w różnych technologiach do jednej bazy (przykładowo LAMP + niezależne terminale C# ). Pozwala to uniknąć powtarzania ważnych fragmentów kodu. Ewentualnie kluczowe działania na DB.

Aplikacje webowe z uwagi na strukturę cienkiego klienta przy odpowiednio zaprojektowanej bazie nie mają wielkiego problemu z spójnością danych (aktualny kod logiki jest de facto przechowywany na serwerze). W wypadku systemów w których terminale/klienci łączą się bezpośrednio z bazą danych, przechowywanie aktualnej logiki po stronie bazy danych jest przyjemną perspektywą pozwalającą utrzymać porządek w bazie.

Generalnie takie rozwiązanie jest niewygodne w pracy z większym zespołem, przy dużych projektach robi się niezły cyrk. Jeśli nie ma wyraźnych przesłanek to odpowiednio zaimplementowany model po stronie php spełnia swoją role.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Marcin Ślęzak:
Największą potrzebę przerzucenia części logiki do procedur i funkcji po stronie DB czuję w momencie dostępu dwóch aplikacji napisanych w różnych technologiach do jednej bazy (przykładowo LAMP + niezależne terminale C# ). Pozwala to uniknąć powtarzania ważnych fragmentów kodu. Ewentualnie kluczowe działania na DB.

Aplikacje webowe z uwagi na strukturę cienkiego klienta przy odpowiednio zaprojektowanej bazie nie mają wielkiego problemu z spójnością danych (aktualny kod logiki jest de facto przechowywany na serwerze). W wypadku systemów w których terminale/klienci łączą się bezpośrednio z bazą danych, przechowywanie aktualnej logiki po stronie bazy danych jest przyjemną perspektywą pozwalającą utrzymać porządek w bazie.

Generalnie takie rozwiązanie jest niewygodne w pracy z większym zespołem, przy dużych projektach robi się niezły cyrk. Jeśli nie ma wyraźnych przesłanek to odpowiednio zaimplementowany model po stronie php spełnia swoją role.

Nie lepiej zrobić webservice, z którego korzystają obie aplikacje (SOAP/JSON-RPC/XML-RPC/ etc)?
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

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
Marcin Ślęzak

Marcin Ślęzak software development
manager, Webanywhere

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Wojciech Soczyński:
Nie lepiej zrobić webservice, z którego korzystają obie aplikacje (SOAP/JSON-RPC/XML-RPC/ etc)?

Jeżeli z bazy danych w 95% korzysta LAMP i w 5% terminale to implementacja webservice do komunikacji php z bazą danych uważam za nieekonomiczne i prawdopodobnie mało wydajne.

Oczywiście w pewnych rozwiązaniach podejście z wykorzystaniem usług sieciowych jest właściwe i jak najbardziej stosowane. Temat jest o wykorzystaniu procedur i funkcji... to jest jedno z ich zastosowań, szczególnie w bazach zawierających większe możliwości (Oracle/PostgreSQL).Marcin Ślęzak edytował(a) ten post dnia 25.03.11 o godzinie 22:19
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Marcin Ślęzak:
Wojciech Soczyński:
Nie lepiej zrobić webservice, z którego korzystają obie aplikacje (SOAP/JSON-RPC/XML-RPC/ etc)?

Jeżeli z bazy danych w 95% korzysta LAMP i w 5% terminale to implementacja webservice do komunikacji php z bazą danych uważam za nieekonomiczne i prawdopodobnie mało wydajne.

Oczywiście w pewnych rozwiązaniach podejście z wykorzystaniem usług sieciowych jest właściwe i jak najbardziej stosowane. Temat jest o wykorzystaniu procedur i funkcji... to jest jedno z ich zastosowań, szczególnie w bazach zawierających większe możliwości (Oracle/PostgreSQL).Marcin Ślęzak edytował(a) ten post dnia 25.03.11 o godzinie 22:19

Zawsze można zrobić tak, że po stronie PHP, korzystać z klasy usługowej bezpośrednio. Natomiast dodatkowo wystawić ją dla zewnętrznych systemów. W takiej sytuacji otrzymujemy spójny interfejs do korzystania z modelu przy pomocy PHP, oraz ten sam interfejs dla zewnętrznych aplikacji przy pomocy minimalnego nakładu pracy.

konto usunięte

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

To mam teraz pytanie praktyczne:

po której stronie zrobilibyście raport Pivot z dużej ilości danych

No i oczywiście dlaczego tak a nie inaczej?Przemysław R. edytował(a) ten post dnia 26.03.11 o godzinie 10:34
Marcin Ślęzak

Marcin Ślęzak software development
manager, Webanywhere

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Wojciech Soczyński:
Zawsze można zrobić tak, że po stronie PHP, korzystać z klasy usługowej bezpośrednio. Natomiast dodatkowo wystawić ją dla zewnętrznych systemów. W takiej sytuacji otrzymujemy spójny interfejs do korzystania z modelu przy pomocy PHP, oraz ten sam interfejs dla zewnętrznych aplikacji przy pomocy minimalnego nakładu pracy.

Można, oczywiście lecz nie zawsze :)

konto usunięte

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Przemysław R.:
1. Czy Wykorzystaliście kiedykolwiek procedurę po stronie MySQl-a we własnym projekcie. Jeżeli tak to do czego

Do odnalezienia adresów w promieniu x kilometrów od punktu.

Kto się za to nie zabierał pewno nie wyobraża sobie, że wykonanie tego w PHP byłoby praktycznie niemożliwe, szczególnie, że baza zawiera dziś około 14 tysięcy rekordów a dane są zapisane w postaci lat, lng.

Dzięki zastosowaniu procedury w mysql nawet słaby serwer przetwarza dane w ułamku sekundy.Robert B. edytował(a) ten post dnia 26.03.11 o godzinie 18:17
Jakub L.

Jakub L. Programista

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Robert B.:
Przemysław R.:
1. Czy Wykorzystaliście kiedykolwiek procedurę po stronie MySQl-a we własnym projekcie. Jeżeli tak to do czego

Do odnalezienia adresów w promieniu x kilometrów od punktu.

Kto się za to nie zabierał pewno nie wyobraża sobie, że wykonanie tego w PHP byłoby praktycznie niemożliwe,

Przypuszczam że wątpię, zarówno PHP jak i plmysql (czy jak to się tam zwie) to języki programowania, są równoważne.
Idea wywleczenia 14 rekordów na stronę PHP i ich obrobienia tamże jest głupia i ktokolwiek by tak próbował nie zasługuje na zasiłek po takie próbie.

Sam problem wygląda na wpisanie odpowiedniego wzoru w query, próbowałbym podwójnie zagnieżdżonego - pierwsze biorące gołe lat i long i dające przybliżony obszar, i drugie, robiące szczegółowe przekształcenia lat i long na odległość od zadanych, ze względu na kształt planety (jeżeli ma sens).

Procedury (w Postgresie) znalazłem użytecznymi do wstawiania powiązanych danych do kilku tabel za jednym wywołaniem z PHP - jak na przykład pisałem agregator mapy do Traviana to miałem osobne tabele dla graczy, wiosek i sojuszy, dane wejściowe zawierają wszystko zmiksowane, szło jedno wywołanie i wewnątrz dane były obrabiane.

konto usunięte

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Tworzyłem kiedyś aplikację regularnie "karmioną" dużymi ilościami danych z prehistorycznego systemu. Jako że system był prehistoryczny (DOS-owy w ogóle) to dane wymagały "dostosowania" do normalnego użycia - rozbijania na tabele, znajdowania części wspólnych i tworzenia osobnych wierszy, parsowania konkretnych kolumn itp. Napisaliśmy z kolegą większą część tego po stronie PostgreSQL i do takich "migracyjnych" zastosowań nie wyobrażam sobie lepszego rozwiązania. To był mój pierwszy projekt z taką ilością kodu po stronie bazy danych i wydajność, choć byłem przygotowany teoretycznie, zwyczajnie mnie oszołomiła.

Mimo to nie widzi mi się pisanie większej logiki biznesowej po stronie bazy. Dla większości zastosowań minęły już czasy kiedy wydajność była priorytetem. W większości rozwiązań którymi się zajmowałem priorytetem był deadline i łatwość późniejszego rozszerzania/integracji systemu. Powrót do programowania strukturalnego i rozbijanie projektu na "dwa różne kody" nie bardzo w tej materii pomagają.
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

MySQL do stworzony został operacji OLTP, raportowanie i tabele przestawne to część funkcjonalości Hurtowni danych (OLAP), często, jak kolega wyżej wspomniał "karmiona" danymi z heterogenicznych systemów.

konto usunięte

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Piotr Jasiulewicz:
MySQL do stworzony został operacji OLTP, raportowanie i tabele przestawne to część funkcjonalości Hurtowni danych (OLAP), często, jak kolega wyżej wspomniał "karmiona" danymi z heterogenicznych systemów.

to po co funkcje PIVOT i UNPIVOT w Oracle i MSSQL?
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Często producenci dają podstawowe funkcje do swojego oprogramowania spoza domeny aplikacji. Windows ma kalkulator, jednak matlabowi nie dorównuje:)

konto usunięte

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

to może inaczej

masz ponad 300 tyś rekordów, zrób zestawienie sprzedarzy na dni (w poziomie) na produkty (w pionie) i zaprezentuj to na stronie WWW bez zbędnych gadżetów -> drilowanie danych

Jaka metoda będzie najszybsza i najwydajniejsza?
Tomasz Zadora

Tomasz Zadora programuję

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Zamiast "drillować" po 300 tys. danych można do tego typu zadań podejść całkowicie inaczej, oprzeć je o zdarzenia.

Przygotowujesz sobie tabelę na raport i *w momencie* wykonania pojedynczej sprzedaży aktualizujesz raport, np: w tabeli zawierającej id produktu, dzień sprzedaży (bez czasu), ilość sprzedanych szt./wykonanych usług (jeżeli to usługa), plus jakiekolwiek inne dane.

W tym momencie raport to odczytanie danych z tej tabeli a jakiekolwiek dodatkowe analizy trwają dziesiątki tysięcy razy szybciej niż jazda po 300 tys rekordów.

Ma to szczególnie duże znaczenie jeżeli taki raport miałby być wykonywany i odczytywany często.

konto usunięte

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

a kto powiedział że sprzedaż jest realizowana w miejscu prezentowania?
Tomasz Zadora

Tomasz Zadora programuję

Temat: Wykorzystanie procedur i funkcji po stronie MySQL w...

Ty tego nie powiedziałeś ani nie na pisałeś - to na pewno.

Po za tym, co ma jedno do drugiego, czy analiza musi być w miejscu prezentowania ?Tomasz Zadora edytował(a) ten post dnia 27.03.11 o godzinie 15:18



Wyślij zaproszenie do