Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Witam,
Dawno dawno temu przeczytałem że na jakimś lotnisku wdrożono system (chyba na Sybase) który ... coś tam obliczał ;).
Od czasu do czasu nachodzi mnie na rozwiązywanie zagadek logicznych przy pomocy silnika bazy danych, "Kto hoduje rybki", sudoku a ostatnio prosty szyfr podstawieniowy "ala cezar". Robię to (w uproszczeniu pisząc) przez wpisanie możliwych wartości danego parametru do tabelki i zrobienie cross join wraz z regułami logicznymi po WHERE. silnik MS SQL z którym kiedyś byłem związany zawodowo radził sobie z tym znacznie lepiej nić mySQL czy pgSQL ponadto wyniki wypisywał na bieżąco w miarę "obliczeń" czego mi brakuje w mySQL. Co gorsze darmowe silniki "załamują" się wydajnościowo już przy np. 7 złączeniach...

Ktoś może poradzić jak skonfigurować silnik bazy danych lub jaki silnik sobie będzie z takim traktowaniem radził najlepiej? jak poprawić wydajność takich "obliczeń"

Pozdrawiam, Marcin
Marek Kubiś

Marek Kubiś programista c#

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Rozumiem, że poza jakimś jednym lotniskiem nie jest Panu znany prawdopodobny praktyczny przykład wykorzystania. Ale czy poza zaspokojeniem ciekawości kryje się za tym jakaś inna potrzeba? Osobiście nie znam stosownych przykładów ale patrząc na to co potrafi wielu autorów procedur składowanych cieszył bym się jakby oni cokolwiek wiedzieli co to jest 'separation of concerns', 'single responsibility' 'open/close principle' i inne temu podobne 'bzdury'.

Wiem, wiem nie byłoby postępu gdyby ktoś nie wiedział, że czegoś nie da się zrobić, zabrał się za to i zrobił to ale ja nie twierdzę, że się nie da i nie mam na myśli, że baza coś zsumuje, obliczy. Chciałbym tylko wiedzieć po co przenosić ciężar obliczeń na bazę, kiedy kod będzie po stokroć wydajniejszy.

Może reprezentuję programistyczny beton ale uważam, że wszystko co człowiek stworzył, uczynił to z myślą o czymś. Daza danych jakoś nie kojarzy mi się z tym aby powstała jako deklaratywny język do wykonywania obliczeń. W związku z tym widzę olbrzymie zagrożenie dla spójności aplikacji bo po to aby wykonywać obliczenia należy znać kontekst ich użycia, a to zawarte jest w kodzie. Kontekst jest w bazie? Naprawdę?

Czy ten pomysł to dlatego, że ci od kodu są niekumaci i z tego powodu lepiej jak zrobi to kumaty programista baz dnych?

Użycie SQL jako języka deklaratywnego do "obliczeń" pozwolę sobie więc zaliczyć do anty-wzorców programowania. Proszę mnie przekonać, że nie wypada takich działań zaliczać do zbioru najgorszych praktyk.Ten post został edytowany przez Autora dnia 16.08.17 o godzinie 10:17
Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Nikogo nie chce przekonywać, to tylko zabawa a nie praca, testy na PHP i Javie pokazały że baza jest o dobrych parę rzędów wartości mniej wydajna.
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Z tego co mi wiadomo, to sudoku "od dawna" już jest zrobione w SQL:
https://technology.amis.nl/2009/10/13/oracle-rdbms-11gr...
Cezar, to pikuś.
Z "zagadką Einstaina", czyli "kto hoduje rybki" pewnie też by się dało zrobić, gdyby to było matematycznie sformalizowane...
Tylko po co?

A z opinią, że darmowe BD źle sobie radzą z 7 złączeniami, to jakieś bujdy na resorach. Chyba że się ma na myśli pseudobazę jaką jest mySQL...
postgreSQL radzi sobie znakomicie :)

konto usunięte

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Marcin Paweł S.:
Co gorsze darmowe silniki "załamują" się wydajnościowo już przy np. 7 złączeniach...
>

Bzdura. Co to znaczy "załamują się"? Jaki jest plan zapytania? Liczba złączeń oczywiście ma o tyle znaczenie, że teoretycznie n złączeń będzie szybsze niż n+1 złączeń. Natomiast różnica potrafi być w granicach kilku milisekund.
Ktoś może poradzić jak skonfigurować silnik bazy danych lub jaki silnik sobie będzie z takim traktowaniem radził najlepiej? jak poprawić wydajność takich "obliczeń"

Jaki silnik? Jakie obliczenia? Jaki model danych? Jaki system operacyjny? Jaki procesor? Jaki dysk? Jaki system plików? Które wersje tego wszystkiego? Jaki jest plan zapytania? Jakie typy danych? Jaka jest złożoność samego algorytmu? Ile danych zwraca zapytanie?

To tak na początek. Liczba pytań rośnie wykładniczo z każdą odpowiedzią.

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Marek K.:
Osobiście nie znam stosownych przykładów ale patrząc na to co potrafi wielu autorów procedur składowanych cieszył bym się jakby oni cokolwiek wiedzieli co to jest 'separation of concerns', 'single responsibility' 'open/close principle' i inne temu podobne 'bzdury'.

Owszem, nadal tworzy się systemy oparte o procedury i bazę danych.
coś zsumuje, obliczy. Chciałbym tylko wiedzieć po co przenosić ciężar obliczeń na bazę, kiedy kod będzie po stokroć wydajniejszy.

Czasem nie ma być wydajniejszy. Czasem jest wymóg homogenicznego (z wielu różnych powodów) środowiska uruchomieniowego i zakaz wprowadzania nowej technologii, nawet języka programowania. I jest to surowo przestrzegane.

Język programowania potrzebny jest tam tylko do odpytania bazy danych i wygenerowania tabelki z wynikami. A i to niechętnie, zwłaszcza jeśli silnik bazy pozwala wystawić procedury jako webserwis, generuje pliki wymiany w XML/JSON lub pozwala wygenerować interfejs użytkownika (Oracle Forms). Ostatnio doszły także możliwości uruchamiania kodu w języku R bezpośrednio z poziomu procedury (Oracle, SQL Server, PostgreSQL), co z jednej strony narusza homogeniczność, ale pozwala nie wychodzić poza bazę danych w zakresie sterowania.

Z tej samej przyczyny (homogeniczność środowiska) tworzy się kompletne systemy produkcyjne w języku obliczeniowym R, choć większość nieobeznanych z tematem nie posiada się ze zdumienia
Daza danych jakoś nie kojarzy mi się z tym aby powstała jako deklaratywny język do wykonywania obliczeń. W związku z tym widzę olbrzymie zagrożenie dla spójności aplikacji bo po to aby wykonywać obliczenia należy znać kontekst ich użycia, a to zawarte jest w kodzie. Kontekst jest w bazie? Naprawdę?

Informatyka nie jest nauką religijną. Stosuje się takie rozwiązania, jakie są potrzebne. Oczywiście im więcej w tym dobrych praktyk, tym lepiej.
Czy ten pomysł to dlatego, że ci od kodu są niekumaci i z tego powodu lepiej jak zrobi to kumaty programista baz dnych?

Nie.
Użycie SQL jako języka deklaratywnego do "obliczeń" pozwolę sobie więc zaliczyć do anty-wzorców programowania. Proszę mnie przekonać, że nie wypada takich działań zaliczać do zbioru najgorszych praktyk.

W jakim celu? Nie ma powodu przekonywania kogokolwiek do niczego, ponieważ są to kwestie związane z konkretnym projektem i konkretnymi potrzebami. Za taki a nie inny kształt systemuodpowiadają konkretne osoby.

Osobiście implementowałem zaawansowaną bibliotekę metod numerycznych dla statystyki w T-SQL swego czasu Wykorzystywana jest do dziś.

Piszę to jako projektant oprogramowania, postulujący (i stosujący w praktyce) pełną separację warstw, traktujący bazę danych jedynie jako magazyn informacji, który jednak widział już wiele konkretnych, świetnie działających "niestandardowych" rozwiązań i rozumie jakie racje za nimi stały. I stoją nadal.Ten post został edytowany przez Autora dnia 16.08.17 o godzinie 17:36
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Użycie SQL jako języka deklaratywnego do "obliczeń" pozwolę sobie więc zaliczyć do anty-wzorców programowania. Proszę mnie przekonać, że nie wypada takich działań zaliczać do zbioru najgorszych praktyk.

Jeśli jest tak jak Pan twierdzi to po co wprowadzono inny deklaratywny język Linqu do C#, który zdobył wielką popularność i uprościł tworzenie kodu w modelu "imperatywnym" (głównie zagnieżdżonych iteracji z wieloma warunkami). To nie jest żaden anty-wzorzec, lecz jedynie Pana interpretacja, którą Pan niezbyt precyzyjnie wyjaśnia.

PozdrawiamTen post został edytowany przez Autora dnia 16.08.17 o godzinie 18:04

konto usunięte

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Marcin Paweł S.:
Nikogo nie chce przekonywać, to tylko zabawa a nie praca, testy na PHP i Javie pokazały że baza jest o dobrych parę rzędów wartości mniej wydajna.

Poproszę przykłady, procedurę testowania, powtarzalne wyniki testów itd. Inaczej śmiem twierdzić, że to kolejna bzdura, bo mogę napisać niezliczone testy, które pokażą, że jest zupełnie odwrotnie.
Marek Kubiś

Marek Kubiś programista c#

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Maciej G.:
Użycie SQL jako języka deklaratywnego do "obliczeń"
Jeśli jest tak jak Pan twierdzi to po co wprowadzono inny deklaratywny język Linqu do C#
Panie Marcinie, napisałem użycie SQL i miałem na myśli środowisko bazodanowe, a nie środowisko takiego języka jak c#.
Marek Kubiś

Marek Kubiś programista c#

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Adrian O.:
Marek K.:
Osobiście nie znam stosownych przykładów ale patrząc na to co potrafi wielu autorów procedur składowanych cieszył bym się jakby oni cokolwiek wiedzieli co to jest 'separation of concerns', 'single responsibility' 'open/close principle' i inne temu podobne 'bzdury'.
Owszem, nadal tworzy się systemy oparte o procedury i bazę danych.
Ależ oczywiście tworzono, tworzy się i będzie się tworzyć oprogramowanie oparte o procedury i bazę danych. Ja tylko pozwoliłem sobie zauważyć, że 'rozpędzający się' do 3-5 tysięcy i więcej linii kodu autorzy procedur składowanych, pisząc często albo o dobrych praktykach programowania nie mają pojęcia albo 'po nas choćby potop - miałem zrobić to zrobiłem - 'leją' na nie ekscytując się 'udziwnianiem' SQL.
Chciałbym tylko wiedzieć po co przenosić ciężar obliczeń na bazę, kiedy kod będzie po stokroć wydajniejszy.
Czasem nie ma być wydajniejszy. Czasem jest wymóg homogenicznego (z wielu różnych powodów) środowiska uruchomieniowego i zakaz wprowadzania nowej technologii, nawet języka programowania. I jest to surowo przestrzegane.
To prawda, ale nie mówimy o strategii tworzenia oprogramowania, tylko o konkretnym zadaniu: przenieś skomplikowane obliczenia do bazy danych. Jakoś nie potrafię sobie wyobrazić aby na okoliczność potrzeby wykonywania skomplikowanych obliczeń zabronić używania języka programowania, bo póki co baza sobie poradzi jedynie ze 'standardami'.
Język programowania potrzebny jest tam tylko do odpytania bazy danych i wygenerowania tabelki z wynikami. A i to niechętnie, zwłaszcza jeśli silnik bazy pozwala wystawić procedury jako webserwis, generuje pliki wymiany w XML/JSON lub pozwala wygenerować interfejs użytkownika (Oracle Forms). Ostatnio doszły także możliwości uruchamiania kodu w języku R bezpośrednio z poziomu procedury (Oracle, SQL Server, PostgreSQL), co z jednej strony narusza homogeniczność, ale pozwala nie wychodzić poza bazę danych w zakresie sterowania.
I to jest przypadek, kiedy skomplikowane obliczenia sterowane kodem bazy danych mogą mieć sens, ale to nie zmienia znaczenia tego co napisałem wcześniej: używania środowiska programistycznego zgodnie z przeznaczeniem.

To udowadnia, że technologia baz danych rozwija się ale web service, pliki xml/json, interfejs użytkownika to nie skomplikowane obliczenia, o których mowa w tym wątku. Być może rozwój baz danych będzie miał miejsce także w kierunku wykonywania obliczeń ale jak Pan sam zauważył póki co rozwój idzie w kierunku dania możliwości uruchamiania zewnętrzego kodu, np: w języku R, który będzie potrafił np: obliczyć skomplikowane funkcje statystyczne.

Póki co to nie baza zajmuje się lub ma się zajmować realizacją skomplikowanych algorytmów.
Z tej samej przyczyny (homogeniczność środowiska) tworzy się kompletne systemy produkcyjne w języku obliczeniowym R, choć większość nieobeznanych z tematem nie posiada się ze zdumienia
W języku obliczeniowym. Nie w języku baz danych sql do czego ja się odniosłem.
W związku z tym widzę olbrzymie zagrożenie dla spójności aplikacji bo po to aby wykonywać obliczenia należy znać kontekst ich użycia, a to zawarte jest w kodzie. Kontekst jest w bazie? Naprawdę?
Informatyka nie jest nauką religijną. Stosuje się takie rozwiązania, jakie są potrzebne. Oczywiście im więcej w tym dobrych praktyk, tym lepiej.
Pełna zgoda. Ja właśnie w nawiązaniu do dobych praktyk.
Użycie SQL jako języka deklaratywnego do "obliczeń" pozwolę sobie więc zaliczyć do anty-wzorców programowania. Proszę mnie przekonać, że nie wypada takich działań zaliczać do zbioru najgorszych praktyk.
W jakim celu?
Bo chiałbym się nauczyć czegoś nowego poprzez poznanie rzeczowych argumentów.
Nie ma powodu przekonywania kogokolwiek do niczego, ponieważ są to kwestie związane z konkretnym projektem i konkretnymi potrzebami.
Oczywiście ale jest to bardzo pragmatyczne podejście jeżeli zadanie do nas nie wróci. Jeżeli jednak pracuje się w zespole to efekty czyjejś pracy kiedyś do nas trafią i wtedy tę niestrawną żabę przychodzi zjeść.
Osobiście implementowałem zaawansowaną bibliotekę metod numerycznych dla statystyki w T-SQL swego czasu Wykorzystywana jest do dziś.
Piszę to jako projektant oprogramowania, postulujący (i stosujący w praktyce) pełną separację warstw, traktujący bazę danych jedynie jako magazyn informacji, który jednak widział już wiele konkretnych, świetnie działających "niestandardowych" rozwiązań i rozumie jakie racje za nimi stały. I stoją nadal.
No to szczęściarzami są ci, którzy z Panem współpracują. Gratuluję i podkreślam, że nie krytykuję odstępstw od standardów.
Marek Kubiś

Marek Kubiś programista c#

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Marcin Paweł S.:
Nikogo nie chce przekonywać, to tylko zabawa a nie praca, testy na PHP i Javie pokazały że baza jest o dobrych parę rzędów wartości mniej wydajna.
Jak dla zaspokojenia ciekawości to mogę tylko zachęcać bo to chyba najskteczniejsza metoda uczenia się. ;-)

konto usunięte

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Marcin Paweł S.:
Nikogo nie chce przekonywać, to tylko zabawa a nie praca, testy na PHP i Javie pokazały że baza jest o dobrych parę rzędów wartości mniej wydajna.

Używam PostgreSQLa - mam Javę, PHP, JavaScript, Pythona - dostępne jako procedury składowane. Jakoś nie wydaje mi się, żeby coś było wolniej...

Porównywanie wydajności różnych silników baz danych to temat rzeka. No, ale jak się siedzi na MS SQL Serwerze to można mieć inny punkt widzenia.

Co do tematu. Jakiś czas temu w którymś podcaście słyszałem, że MS ma NLTP po stronie bazy danych. Ktoś może napisze, że idioci. Dla mnie to biznes jest. Za bazę płaci się od procesora... Wiadomo, że baza, sama w sobie raczej zjada ram i dysk - no więc jakoś procesor trzeba dociążyć. :) No i liczenie sudoku to skrajność. Bazę danych i obliczenia na niej używało się dlatego, że dane były pod ręką. Wystarczy pomyśleć o policzeniu wierszy, albo przeprowadzeniu jakiejś operacji na tych danych - w bazie będzie całkiem szybko. Gdziekolwiek indziej - dochodzi narzut na sieć, zamianę formatów... Tak czy siak - jest parę powodów dla których ludzkość zarzuciła to podejście - jeżeli chodzi o main stream. I tej wersji bym się trzymał.
Marek Kubiś

Marek Kubiś programista c#

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Michał Z.:
Bazę danych i obliczenia na niej używało się dlatego, że dane były pod ręką. Wystarczy pomyśleć o policzeniu wierszy, albo przeprowadzeniu jakiejś operacji na tych danych - w bazie będzie całkiem szybko. Gdziekolwiek indziej - dochodzi narzut na sieć, zamianę formatów... Tak czy siak - jest parę powodów dla których ludzkość zarzuciła to podejście - jeżeli chodzi o main stream. I tej wersji bym się trzymał.
Myślę, że zadanie manipulowania dużą ilością danych jest wystarczająco złożonym powodem dla którego warto stosować 'separation of concerns'. Dodatkowo wykonywanie obliczeń jest na tyle samo w sobie skomplikowane, że wymaga indywidualnego potraktowania.

Na przykład 'Big Blue' obliczający algorytm gry w szachy to nie tylko bazodanowa aplikacja oparta na wiedzy o grze w szachy, ale całe zintegrowane i wcale nie jednolite środowisko sprzętowo-programowe.

Po prostu tam gdzie potrzeba liczyć potrzeba również przetwarzać duże ilości danych (z bazy danych lub ze świata rzeczywistego) w ściśle określonym czasie ponieważ jedynie w wąskim zakresie zasosowań możemy czekać dowolnie długo na wynik obliczeń. Praktycznie prędkość obliczeń zawsze ma znaczenie, czy to w meterologii, farmacji, czy też w motoryzacji, itd., itd.

Jak dostarczona zostanie nowa 'porcja danych' to te poprzednie muszą być już przetworzone bo za chwilę napłyną kolejne i delikatnie mówiąc progrnoza pogody będzie nietrafina, wynik podania leku będzie nieznany, czy też pojazd samochodowy bez kierowcy będzie w otoczeniu pojazdów, które poruszają się całkiem inaczej niż mu się wydaje. A przecież powyższe przykłady to przykłady dla których baza danych ma pierwszorzędne znaczenie.

Jakoś nie przekonaliście mnie Panowie, że SQL jako język do obliczeń nadaje się.
Adrian O.:
Osobiście implementowałem zaawansowaną bibliotekę metod numerycznych dla statystyki w T-SQL swego czasu Wykorzystywana jest do dziś.
Można zapytać o przykład najbardziej skomplikowanego wykonywanego obliczenia? Ponieważ są doświadczenia z użytkowania, to można poprosić o pros and cons?

konto usunięte

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Marek K.:
Michał Z.:
Bazę danych i obliczenia na niej używało się dlatego, że dane były pod ręką. Wystarczy pomyśleć o policzeniu wierszy, albo przeprowadzeniu jakiejś operacji na tych danych - w bazie będzie całkiem szybko. Gdziekolwiek indziej - dochodzi narzut na sieć, zamianę formatów... Tak czy siak - jest parę powodów dla których ludzkość zarzuciła to podejście - jeżeli chodzi o main stream. I tej wersji bym się trzymał.
Jakoś nie przekonaliście mnie Panowie, że SQL jako język do obliczeń nadaje się.

Ja kogoś przekonywałem? Absolutnie nie. Co najwyżej prezentowałem swoje poglądy. A one są takie:
1. Wszystko zależy - od kontekstu. Jedna firma kiedyś stwierdziła, że jednak się da zrobić coś inaczej niż inni to robią. Google się nazywa. Dlatego z góry nie zakładam, że coś się robi tak, albo inaczej. Co więcej rozwiązania stosowane w SmallTalku, z których 20 lat temu się wszyscy śmiali - dziś? święcą triumf - i nie mówię tu o MVC.
2. Baza danych, nawet relacyjna to nie tylko SQL, czy tam jego odmiany proceduralne. Nie ma problemu, żeby użyć narzędzi, które powszechnie są używane w statystyce, czy deep learning.
3. W temacie przetwarzania dużych ilości danych. Nowoczesne bazy danych pozwalają na zrównoleglenie przetwarzania. Np. dane pogodowe z każdego województwa mogą znajdować się na osobnym serwerze, czy na osobnym klastrze - tak, żeby wyliczanie pogody dla całego kraju odbywało się równolegle. Bazy relacyjne też się zmieniają - nie-relacyjne dojrzewają, a relacyjne się zmieniają. Jedni drugich podpatrują, słuchają tego, co mówią użytkownicy i się zmieniają - no, przynajmniej te, których używam...
Inna sprawa, że akurat dane pogodowe to mocno chybiony przykład, bo z miejsca zastosowałbym map-reduce - taki spark... no, albo inną hurtownię danych. W ten sposób cały narzut związany z transakcyjnością przestałby przeszkadzać, a skoro nie jest mi to potrzebne... to po co sobie głowę zawracać. No, ale tutaj podział przebiega inaczej.

Odnośnie argumentów za trzymaniem logiki biznesowej w bazie, czy tam liczeniem czegoś w bazie:
- Przetwarzanie danych na bazie powoduje, że jest to szybsze - nie ma ruchu w sieci, kod odpowiedzialny za obliczenia ma dane w ramie...

Dla mnie przemawiający kontrargument:
- Wystarczy zrobić taki system i go utrzymywać, w sytuacji, gdzie serwer obsługuje jakąś setkę zapytań na sekundę... Serwer aplikacji - green-blue deployment i problem wrzucenia czegoś "na prod" przestaje istnieć. Baza? Stawiamy locka i patrzymy jak lampki przygasają :)

Dla mnie EOT

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Marek K.:
Adrian O.:
Osobiście implementowałem zaawansowaną bibliotekę metod numerycznych dla statystyki w T-SQL swego czasu Wykorzystywana jest do dziś.
Można zapytać o przykład najbardziej skomplikowanego wykonywanego obliczenia? Ponieważ są doświadczenia z użytkowania, to można poprosić o pros and cons?

Regresja liniowa (dekompozycja QR), ANOVA, test jednorodności wariancji Levena, PCA metodą rozkładu na wartości osobliwe (SVD). Oczywiście z raportowaniem przedziałów ufności i p-value, więc oczywistym jest, że także całkowanie numeryczne oraz funkcje specjalne, jak gamma (za pomocą odpowiednich przybliżeń).
Marek K.:
Myślę, że zadanie manipulowania dużą ilością danych jest wystarczająco złożonym powodem dla którego warto stosować 'separation of concerns'. Dodatkowo wykonywanie obliczeń jest na tyle samo w sobie skomplikowane, że wymaga indywidualnego potraktowania.

Jest dokładnie przeciwnie tam, gdzie nie chcemy pchać po sieci tysięcy rekordów tylko po to, by je policzyć lub policzyć średnią czy medianę w grupach. Widziałem, jak ludzie dostawali solidny OPR za to, że aby policzyć określone statystyki w grupach pchali kilkaset tysięcy liczb po sieci, zamiast policzyć agregaty w bazie. W pełni się pod tym OPR podpisałem.

Nieco poboczny wątek, bo nie dotyczy SQL bezpośrednio: między innymi z tego powodu Oracle, PostgreSQL i od 2016 Microsoft dodali do swoich baz bezpośrednią integrację z R - właśnie po to, by jak najwięcej obliczeń wykonać po stronie silnika bazy danych.Ten post został edytowany przez Autora dnia 28.08.17 o godzinie 16:24
Marek Kubiś

Marek Kubiś programista c#

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Michał Zaborowski.:
.. Jedna firma kiedyś stwierdziła, że jednak się da zrobić coś inaczej niż inni to robią. Google się nazywa. ..
Michale wiem, wiem - zerknij do mojej wcześniejszej wypowiedzi.
Adrian Olszewski:
Marek K.:
Adrian O.:
Osobiście implementowałem zaawansowaną bibliotekę metod numerycznych dla statystyki w T-SQL swego czasu Wykorzystywana jest do dziś.
Można zapytać o przykład najbardziej skomplikowanego wykonywanego obliczenia? Ponieważ są doświadczenia z użytkowania, to można poprosić o pros and cons?
Regresja liniowa (dekompozycja QR), ANOVA, test jednorodności wariancji Levena, PCA metodą rozkładu na wartości osobliwe (SVD). Oczywiście z raportowaniem przedziałów ufności i p-value, więc oczywistym jest, że także całkowanie numeryczne oraz funkcje specjalne, jak gamma (za pomocą odpowiednich przybliżeń).
Brzmi dobrze, gratuluję - a jakie obserwacje za i przeciw? Czy dysponuje Pan jakimiś danymi, które obrazowały by jak przebiega np: liczene transformaty Fouriera, czy też przepuszczenie danych przez filtr cyfrowy z wygładzaniem?
Marek K.:
Myślę, że zadanie manipulowania dużą ilością danych jest wystarczająco złożonym powodem dla którego warto stosować 'separation of concerns'. Dodatkowo wykonywanie obliczeń jest na tyle samo w sobie skomplikowane, że wymaga indywidualnego potraktowania.
Jest dokładnie przeciwnie tam, gdzie nie chcemy pchać po sieci tysięcy rekordów tylko po to, by je policzyć lub policzyć średnią czy medianę w grupach.
Jest dokładnie przeciwnie przecież wymaganie indywidualnego potraktowania, to nie zalecenie pchania tysięcy rekordów po sieci.
Widziałem, jak ludzie dostawali solidny OPR za to, że aby policzyć określone statystyki w grupach pchali kilkaset tysięcy liczb po sieci, zamiast policzyć agregaty w bazie. W pełni się pod tym OPR podpisałem.
Chyba nie ma w tym sugestii, że ja bym się nie podpisał? Podpisał bym się bo agregacja to jedno z najważniejszych zadań do wykonania na danych. Jednakowóż nie czyni to z SQL języka do obliczeń.
Nieco poboczny wątek, bo nie dotyczy SQL bezpośrednio: między innymi z tego powodu Oracle, PostgreSQL i od 2016 Microsoft dodali do swoich baz bezpośrednią integrację z R - właśnie po to, by jak najwięcej obliczeń wykonać po stronie silnika bazy danych.
Poboczny i tak i nie, bo jeżeli już iść tropem obliczeń na danych, na dużej ilości danych to wypada stwierdzić, że w takim razie nie powinien nas interesować SQL jako język do obliczeń ale powinniśmy poszukiwać bazy, która z zadaniem obliczeń sobie poradzi.

Nie w SQL-a sedno ale w bazach danych, które obliczenia mają wbudowane w kernel, w root.

Tym samym moja odpowiedź mozę być tylko jedna. Masz problem z obliczeniami to dokładnie je zdefiniuj. Jeżeli obliczenia nie wykraczają poza standard jaki wbudowano w 'tradycyjne' bazy danych to użyj tego co masz/znasz.

Jeżeli jednak obliczenia są skomplikowane, to nie gwałć istniejącej bazy, a zainteresuj się takimi rozwiązaniami jak np: baza Vertica HP, która ma wbudowane w środku algorytmy obliczeniowe (bazujące na języku R) i nie ogranicza się do wywoływania zewnętrznych poleceń pisanych w języku obliczeniowym.

Albo zainteresuj się bazą Amazon Redshift, która 'is a fully managed, petabyte-scale data warehouse service in the cloud' - 1 Petabyte = 1000000 Gigabyte! Amazon koncentruje się na 'standardowych' poleceniach SQL i znanym bussiness inteligence ale używa 'massive parallel processing', co wbudowano w cluster, na którym baza jest postawiona.

Wymienione rozwiązania za duże, za drogie, to zrób 'po Bożemu'. Baza niech przechowuje dane a obliczeniami niech zajmie się język obliczeniowy.

I jak dla mnie, to jest właściwa droga do obliczeń na danych. :-)

Dziękuję za rozmowę.

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Marek K.:
Brzmi dobrze, gratuluję - a jakie obserwacje za i przeciw?

Przeciw - brak, dedykowane rozwiązanie, które się sprawdziło. Gdyby miało to być rozwiązanie elastyczne i otwarte na zmiany, wtedy lista potencjalnych wad zawierałaby kilka pozycji, np. ograniczona na sztywno liczba zmiennych do analizy, przybliżone wyniki całkowania i pewnych funkcji specjalnych (stablicowane), brak typu macierzy / tablicy w SQL, potrzebna ich symulacja, co jest dość wolne.. Tylko dla małych zbiorów danych.

Za - spełnione wymagania w zakresie:
- homogeniczności środowiska
- łatwy backup całego środowiska (logika, obliczenia, operacje na danych, definicje formatek) - wraz z bazą
- brak konieczności przepychania danych po sieci celem dokonania podstawowych obliczeń
- łatwe raportowanie - integracja z Reporting Services i innymi programami analitycznymi, które po prostu wywołują odpowiednią procedurę składowaną
- brak problemu z licencjami
Czy dysponuje Pan jakimiś danymi, które obrazowały by jak przebiega np: liczene transformaty Fouriera, czy też przepuszczenie danych przez filtr cyfrowy z wygładzaniem?

Niestety nie, nie zajmuję się analizą sygnałów. Ale czysty SQL by się tutaj raczej nie nadał, zbytni stopień skomplikowania.
Marek K.:
np: baza Vertica HP, która ma wbudowane w środku algorytmy obliczeniowe (bazujące na języku R) i nie ogranicza się do

Jeśli bazują na R, to nie jest to homogeniczne środowisko, więc mnie by nie pasowało w tamtym przypadku.

A gdyby mi pasowało, użyłbym SQL Servera wspierającego natywnie R (albo Oracle Enterprise). Ale wtedy nie było takiego wsparcia.
managed, petabyte-scale data warehouse service in the cloud' - 1 Petabyte = 1000000 Gigabyte! Amazon koncentruje się na

Pracowałem wtedy (i pracuję) na small data, nie potrzeba mi aż takich rozwiązań.
Wymienione rozwiązania za duże, za drogie, to zrób 'po Bożemu'. Baza niech przechowuje dane a obliczeniami niech zajmie się język obliczeniowy.

Jeśli założenia na to zezwalają, to jak najbardziej.
I jak dla mnie, to jest właściwa droga do obliczeń na danych. :-)

W porządku.Ten post został edytowany przez Autora dnia 30.08.17 o godzinie 18:07
Marek Kubiś

Marek Kubiś programista c#

Temat: użycie SQL jako języka deklaratywnego do "obliczeń"

Adrian O.:
Marek K.:
Brzmi dobrze, gratuluję - a jakie obserwacje za i przeciw?
Przeciw - brak, ..brak typu macierzy / tablicy w SQL, potrzebna ich symulacja, co jest dość wolne.. Tylko dla małych zbiorów danych.
No niestety, tak jak przypuszczałem. To nie jest przykad za. Dla bardzo wielu obliczeń będzie to argument przeciw. Na szczęście dla wielu powinno być wystarczające więc wierzę, że bibliteka znalazła zastosowanie.
Czy dysponuje Pan jakimiś danymi, które obrazowały by jak przebiega np: liczene transformaty Fouriera, czy też przepuszczenie danych przez filtr cyfrowy z wygładzaniem?
Niestety nie, nie zajmuję się analizą sygnałów. Ale czysty SQL by się tutaj raczej nie nadał, zbytni stopień skomplikowania.
No właśnie. Ale to przykład nie tylko na analizę sygnałów.
Marek K.:
np: baza Vertica HP, która ma wbudowane w środku algorytmy obliczeniowe (bazujące na języku R) i nie ogranicza się do
Jeśli bazują na R, to nie jest to homogeniczne środowisko, więc mnie by nie pasowało w tamtym przypadku.

A gdyby mi pasowało, użyłbym SQL Servera wspierającego natywnie R (albo Oracle Enterprise). Ale wtedy nie było takiego wsparcia.
Podając przykłady miałem na myśli, że obliczenia wbudowane są w motor bazy, a to jest to prawie co czyni różnicę.
Wymienione rozwiązania za duże, za drogie, to zrób 'po Bożemu'. Baza niech przechowuje dane a obliczeniami niech zajmie się język obliczeniowy.
Jeśli założenia na to zezwalają, to jak najbardziej.
I jak dla mnie, to jest właściwa droga do obliczeń na danych. :-)
W porządku.
Cieszę się, że znaleźliśmy płaszczyznę porozumienia. EOT.



Wyślij zaproszenie do