Autor Wątek: Porównanie (relacyjnych) baz danych.  (Przeczytany 4219 razy)

Offline wozix

  • Użytkownik

  • +1
# Sierpień 14, 2015, 02:27:20
Witajcie. Wręcz cyklicznie kłócimy się na warsztacie o to, jaki język jest lepszy, która biblioteka jest najlepsza do grafiki, albo czemu goto powoduje raka. Mimo shitstormowego charakteru, to zawsze pojawia się trochę ciekawych faktów i można dowiedzieć się czegośnowego. Nie przypominam sobie jednak wątku (albo wątku wydzielonego) na temat baz danych. Dlaczego pomyślałem, że fajnie jakbyśmy przedyskutowali istniejące rozwiązania.
A więc zaczynam: Na bezludną wyspę zabrałbym ze sobą chyba PostgreSQL. Ma bardzo dobrą dokumentację, dość żywe community (przynajmniej na IRCu) oraz sporo dodatkowych funkcji (np. pisanie funkcji w plpgsql, C, a nawet pythonie). Jest też sporo ciekawych typów oraz tablice wielowymiarowe.
Z kolei w ogóle nie rozumiem fenomenu MSSQL. Duża część korporacji tego używa i szczerze zastanawiam się dlaczego?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline matheavyk

  • Użytkownik
    • rabagames.com

# Sierpień 14, 2015, 03:28:04
Jeśli nie programowałeś w C#, a w szczególności aplikacji webowych w ASP.net, to prawdopodobnie nie zrozumiesz fenomenu MSSQL. Ale jeśli kiedyś zobaczysz jak ktoś otwiera Visual Studio, potem zakładkę z serwerami baz danych, PRZECIĄGA sobie bazę danych, która się sama wykryła i otrzymuje gotowe rozwiązanie ORM, to pewnie zrozumiesz ;). Kiedy się już wejdzie w te gotowe ramy przygotowane przez Microsoft i ma się zbudowaną sensowną architekturę, to wszystko tak pięknie się układa, że masz wrażenie, że po prostu budujesz z gotowych klocków. No i przede wszystkim szybko, a na dodatek z możliwością pisania rozszerzeń w różnych miejscach potoku przetwarzania (tu już mówię o ASP.net).
Postgresa używałem na studiach, wydaje mi się, że ma dużo nowoczesnych rozwiązań, których próżno szukać np. w MySQL. Ale problem jest taki, że bazy danych są często wykorzystywane na stronach internetowych, a ciężko znaleźć darmowy lub nawet tani hosting z obsługą Postgresa (szukałem darmowego kiedyś, znalazłem jeden, ale ostatecznie nie udało mi się założyć konta).

Offline Xion

  • Redaktor
    • xion.log

  • +3
# Sierpień 14, 2015, 08:38:28
Cytuj
Z kolei w ogóle nie rozumiem fenomenu MSSQL. Duża część korporacji tego używa i szczerze zastanawiam się dlaczego?
Zapewne dlatego, że dostają licencję w jakimś większym pakiecie z innymi toolami MS-u, których używają. Do tego dochodzi typowe myślenie managementu, że jeśli za coś bulimy to przynajmniej będzie na kogo wrzeszczeć gdy się zepsuje.

Jeśli nie programowałeś w C#, a w szczególności aplikacji webowych w ASP.net, to prawdopodobnie nie zrozumiesz fenomenu MSSQL. Ale jeśli kiedyś zobaczysz jak ktoś otwiera Visual Studio, potem zakładkę z serwerami baz danych, PRZECIĄGA sobie bazę danych, która się sama wykryła i otrzymuje gotowe rozwiązanie ORM, to pewnie zrozumiesz ;).
Chcesz powiedzieć, że coś takiego jest możliwe tylko dla MSSQL? Jakoś nie wierzę, by nawet MS był taką szują, żeby celowo pominąć obsługę innych silników DB w ficzerze, który sprowadza się do parsowania outputu DESCRIBE TABLE.

Cytuj
Postgresa używałem na studiach, wydaje mi się, że ma dużo nowoczesnych rozwiązań, których próżno szukać np. w MySQL. Ale problem jest taki, że bazy danych są często wykorzystywane na stronach internetowych, a ciężko znaleźć darmowy lub nawet tani hosting z obsługą Postgresa (szukałem darmowego kiedyś, znalazłem jeden, ale ostatecznie nie udało mi się założyć konta).
Bo dzisiaj aplikacje webowe deployuje się nie na "hosting", tylko serwer wirtualny / VM-ki / kontenery / chmury / etc. AWS, GCS, Heroku, Rackspace, Engine Yard i wiele innych mają darmowe/tanie plany dev/hobby/micro/itp. gdzie możesz sobie postawić, co dusza zapragnie.

Offline lethern

  • Użytkownik

# Sierpień 14, 2015, 10:56:49
<irony mode>
No zależy co robisz, jeśli projekt studencki na 3 tabele, to pewnie wszelkie FREE-sql-software wyda Ci się rewelką, jeśli jednak bazę na 1000^2 tabel na 1000 dyskach, 1000 procesorów i 1000 jednoczesnych połączeń, to pewnie stąd lecą po MSSQL / Oracle (hm, nawet nie wymienione?)

No cóż, jeśli chcesz przekopać ogródek, to też dziwisz się, po co komuś koparka 20x20 metrów z łopatą na 50ton ziemi..

BTW jak zobaczyłem MySQL Workbench to mała część mojej duszy umarła. Chociaż z Oracle też mam niewielkie, ale słabe wspomnienia; może kwestia szczęścia do narzędzi i przyzwyczajeń
« Ostatnia zmiana: Sierpień 14, 2015, 11:00:56 wysłana przez lethern »

Offline ArekBal

  • Użytkownik

# Sierpień 14, 2015, 10:57:59
My tam używaliśmy MSSQL bo na Azure łatwo deploynąć i to taki default dla Azure.
Entity Framework co prawda ma szerokość driverów ale też mssql zawsze byl defaultem. Żaden inny silnik sql po prostu nie przekonał na tyle, by zmienić stary nawyk. A MS nie zrobił nic by ludzi zniechęcić do MSSQL. Prędzej rozważaliśmy czy nie dorzucić/przerzucić część bazy/domeny aplikacji na jakieś nosql lub czy nie podopinać rozwiązania do cache

Offline wozix

  • Użytkownik

  • +4
# Sierpień 14, 2015, 13:05:37
Ale jeśli kiedyś zobaczysz jak ktoś otwiera Visual Studio, potem zakładkę z serwerami baz danych, PRZECIĄGA sobie bazę danych, która się sama wykryła i otrzymuje gotowe rozwiązanie ORM, to pewnie zrozumiesz ;).
Sorki, ale nie specjalnie. Praca w okienkach na dłuższą metę jest słaba, bo ciężko śledzić i spójnie zapisywać zmiany. Praca ze skryptami i plikami źródłowymi ma tę zaletę, że wersjonowanie ich przy użyciu CVS jest naturalne.
Inną kwestią jest to, że nie wyobrażam sobie poważnego developmentu na windowsie i korzystania z windowsowego terminala.

jeśli jednak bazę na 1000^2 tabel na 1000 dyskach, 1000 procesorów i 1000 jednoczesnych połączeń, to pewnie stąd lecą po MSSQL / Oracle (hm, nawet nie wymienione?)
Ale taki PostgreSQL przecież też może się skalować na wielu maszynach.

Offline lethern

  • Użytkownik

# Sierpień 14, 2015, 13:15:45
Cytuj
Inną kwestią jest to, że nie wyobrażam sobie (...) korzystania z windowsowego terminala.
z czego? przepraszam, rzadko używane słowo i mało mówi..  chodzi o konsolę?
odkąd przestałem programować pod MS-DOSem, nie używam konsoli.. Nie mam pojęcia w czym mogłaby mi pomóc
No ale, jeśli nie robisz developmentu (bo nie możesz się przyzwyczaić/przenieść na windows/nie umiesz sobie wyobrazić), to po co w ogóle rozważać kwestię MS SQL? Nawet jeśli Ci się spodoba, to masz problem w innym miejscu, nie?
Jeśli chcesz wiedzieć co ma MS SQL, to po prostu zapoznaj się z listą feature.. (np. książki) Przecież nie ma tu na warsztacie ani jednego poważnego MS SQL experta który Ci to streści. A porównywanie na poziomie "utwórz tabelę, wylistuj dane" raczej niewiele różnic pokaże

(to trochę jak porównywać ze sobą różne IDE, na zasadzie, "no tutaj mamy cofanie, mamy kolorowanie składni, ii.. noooo... co tu więcej jest?", ano jest dużo, i na samym przykładowym IDE się to nie zatrzymuje, bo i pluginy trzeba przejrzeć)

PS cały czas chodzi mi po głowie pomysł, żeby paru ludzi (używających różnych narzędzi) nagrało video z developmentu, jakiegoś wspólnego dla wszystkichtasku (czy to bazy danych, czy ogólnie developmentu), byłby to świetny sposób na porównanie różnych narzędzi (feature, mentalności) jeśli dobrze zrobione (dobrze zrobione, czyli dobre do porónania, żeby nie porównywać ze sobą skillu ludzi, tylko faktycznie narzędzia. I żeby video były pozbawione tego "patrzcie ja, patrzcie moja zajestość, oh moje ego" czy "olać narzędzia, oto mój ekstremalnie dziwny sposób developmentu")
« Ostatnia zmiana: Sierpień 14, 2015, 13:29:17 wysłana przez lethern »

Offline CheshireCat

  • Użytkownik

# Sierpień 14, 2015, 14:43:06
Parafrazując autora wątku, ja bym zabrał na bezludną wyspę zdecydowanie MS SQL, ale z czysto osobistego powodu: mam w nim największe doświadczenie. Chyba w każdym miejscu, gdzie musiałem pisać coś bazodanowego, to był właśnie MS SQL.

A dlaczego temat baz danych nie pojawiał się często na warsztacie? Bo programiści gier zwykle nie lubią takich "nudnych" tematów jak bazy danych ;) Skoro mają zajawkę na temat gier - produktu uderzającego we wszystkie zmysły - grafika, muzyka, design, fabuła, rozwiązywanie zagadek/problemów, mocno pobudzajacego kreatywność, to mniej osób będzie interesować się typowym rzemieślniczym narzędziem.

Z kolei w ogóle nie rozumiem fenomenu MSSQL. Duża część korporacji tego używa i szczerze zastanawiam się dlaczego?

Inną kwestią jest to, że nie wyobrażam sobie poważnego developmentu na windowsie i korzystania z windowsowego terminala.

Zestawienie tych dwóch cytatów sugeruje mi, że OP jest po prostu zadeklarowanym anty-fanem Windowsa. Czy się mylę? ;)

Było coś takiego jak Terminal w Windows '95 i chyba również '98. Jeżeli OP chodzi o wiersz poleceń ("cmd") to nikt nie opiera na tym developerki.
« Ostatnia zmiana: Sierpień 14, 2015, 14:49:48 wysłana przez CheshireCat »

Offline matheavyk

  • Użytkownik
    • rabagames.com

# Sierpień 14, 2015, 14:58:50
@Xion, nie wiem jak jest z innymi bazami danych, ale MSSQL jest na pewno najlepiej przystosowane do innych technologi MS, więc po co w ogóle kombinować z czymś innym? To tylko może opóźnić pracę, a przecież ktoś kto korzysta z licencjonowanych produktów MS raczej nie bardzo ma ochotę na eksperymenty tam, gdzie liczy się czas i pieniądz (w sumie jedno i to samo :) ).

@wozix, praca jest w okienkach, ale przecież kod też się normalnie generuje. Może nie jestem ekspertem, ale nie wiem, gdzie miałby tu być problem z wersjonowaniem.

PS cały czas chodzi mi po głowie pomysł, żeby paru ludzi (używających różnych narzędzi) nagrało video z developmentu, jakiegoś wspólnego dla wszystkichtasku (czy to bazy danych, czy ogólnie developmentu), byłby to świetny sposób na porównanie różnych narzędzi (feature, mentalności) jeśli dobrze zrobione (dobrze zrobione, czyli dobre do porónania, żeby nie porównywać ze sobą skillu ludzi, tylko faktycznie narzędzia. I żeby video były pozbawione tego "patrzcie ja, patrzcie moja zajestość, oh moje ego" czy "olać narzędzia, oto mój ekstremalnie dziwny sposób developmentu")
Też bym chciał takie coś zobaczyć :D. Miałem to szczęście, że miałem już okazję widzieć profesjonalistę z wieloletnim doświadczeniem, który takie coś pokazywał na żywo. Tyle, że była tam tylko technologia MS.

Offline ShadowDancer

  • Redaktor

# Sierpień 14, 2015, 21:15:14
Tylko problem jest taki, że jak w grę wchodzą gigabajtowe bazy danych i dziesiątki serwerów, to nie bardzo można to nagrywać :)


Poniżej moje doświadczenia w mssql/mysql.


W kwestii toolsów to IMO zdecydowanie wygrywa MSSQL (nagroda za całokształt, ciężko to opisać w kilku słowach). W przypadku mysql jest trochę lipa. Workbench może się schować (nie wspominając o jego dziwnych chumorach - nie wiem np. dlaczego na mojej świeżej maszynie otwiera z 200 okienek z różnymi guidami). Z komercyjnych to miałem do czynienia narzędziami devart'a i dają radę, ale to jak renault przy ferrari, nie ta liga. Dla oracla używałem SQLArchitecta (czy jakoś tak), mam nadzieję, że mają coś lepszego bo strasznie toporne.


MSSQL - wygodna developerka, wersje plikowe (local/lite) są bardzo fajne - można bez zachodu mieć kilka wersji bazy na dysku, bez żadnych zmian w kodzie (narzędzie do deployu po prostu zmienia connection stringi).


No i ostatnia sprawa - MSSQL jest szybszy od MYSQL(w moim konkretnym zastosowaniu, baza kilkadziesiąt gb, readonly). Na ile to nie wiem, bo nie ja za to odpowiadam, natomiast na tyle szybszy, że częśc klientów chce za to dodatkowo płacić.


@matheavyk
Można kupić providery do mysqla(i postgressa afaik też), co daje prawie takie same benefity jeśli chodzi o mapowanie i orm, darmowych nie używałem to się nie wypowiadam, natomiast ten od devarta działa nieźle (poza jednym wałkiem z ich strony, ale mam nadzieję, że to poprawią)




@Xion
Nie znam się to się wypowiem :) (wybacz, nie mogłem się powstrzymać). Provider ado, to nie tylko wykrywanie struktury bazy, to także tzw. LINQ (zestaw bibliotek służących do tłumaczenia wywołań w c# na sqle, generalnie temat bardzo głęboki i trudny, jednak naprawdę fajny) do tego różne inne zabawy m.in. z migracjami i okazuje się, że taki provider to potężny kawałek kodu.

Offline wozix

  • Użytkownik

  • +2
# Sierpień 14, 2015, 21:39:41
Zestawienie tych dwóch cytatów sugeruje mi, że OP jest po prostu zadeklarowanym anty-fanem Windowsa. Czy się mylę? ;)
Nie jestem antyfanem. Zwyczajnie Windows do developmentu pasował mi jak pięść do oka - mimo to piszę ten post na Windowsie, gdyż traktuję go jako system do rozrywki. Dodatkowo to, że preferuję jakiś zestaw narzędzi nie czyni ze mnie antyfana. Po to powstał ten temat - żebym mógł się dowiedzieć czegoś na temat różnych baz, bo sam na tę chwilę mam wyrobione zdanie "MSSQL to trochę gorszy płatny PostgreSQL". Wiedząc jak głupio to brzmi właśnie postanowiłem dojść do sedna sprawy, żeby w przyszłości nie gadać głupot.
Z innej beczki, są też technologie czy narzędzia, które niezależnie od systemu działają w shellu - przykładowo: Cordova/Phonegap, Artisan od Laravela, Composer, node.js. Wymieniać dalej? I choćbyś głową walił w mur, to albo napiszesz swoje okna, albo nauczysz się, że konsola jest zwyczajnie wygodna.
z czego? przepraszam, rzadko używane słowo i mało mówi..  chodzi o konsolę?
For real?
@wozix, praca jest w okienkach, ale przecież kod też się normalnie generuje. Może nie jestem ekspertem, ale nie wiem, gdzie miałby tu być problem z wersjonowaniem.
A czy okienka, o których mówisz wygenerują mi ciąg migracji, który pozwoli odtworzyć strukturę bazy danych dla zadanej daty, a do tego będą plikiem łatwo wersjonowanym przez gita albo svn? (jako migrację rozumiem zmianę w strukturze)
« Ostatnia zmiana: Sierpień 14, 2015, 21:52:25 wysłana przez wozix »

Offline Kos

  • Użytkownik
    • kos.gd

  • +4
# Sierpień 14, 2015, 23:06:21
You click on cute icons, I execute commands!

Toole konsolowe są lubiane, bo można je łączyć w większe toole, wygodnie skryptować, zestawiać w różnych kombinacjach, automatyzować operacje w naturalny sposób, etc. Dlatego też tylu deweloperów i sysadminów nie wyobraża sobie życia bez konsoli (korzysta z niej nieraz częściej niż z edytora). Polecenia z parametrami są z założenia potężniejsze od klikania, a pliki konfiguracyjne (na dłuższą metę) bardziej przejrzyste niż okienka z checkboksami. Po drugiej stronie medalu mamy natomiast learning curve i wszechobecny RTFM :-)
Na windowsach nie ma środowiska posixowego jak na osx czy linuksie, więc naturalnie, że konsola jest takim trochę drugorzędnym obywatelem (dlatego też unikam kodowania na windowsie w większości języków :)). Środowiska graficzne są spoko, ale też niejako wpasowują dewelopera w konkretny sposób pracy założony przez twórców danego środowiska. Jeśli chcesz dodać jakieś narzędzie 'z zewnątrz' w swój proces, masz tutaj bardziej pod górę.

Offline ShadowDancer

  • Redaktor

  • +1
# Sierpień 14, 2015, 23:21:38
A czy okienka, o których mówisz wygenerują mi ciąg migracji, który pozwoli odtworzyć strukturę bazy danych dla zadanej daty, a do tego będą plikiem łatwo wersjonowanym przez gita albo svn? (jako migrację rozumiem zmianę w strukturze)

W skrócie to tak (https://msdn.microsoft.com/en-us/data/jj591621.aspx?f=255&MSPPError=-2147217396). Jak się trochę ręcznie pobawisz to zachowasz też dane, chociaż imo lepiej je generować za każdym razem. Całość można spiąć w jakimś post-checkout.
« Ostatnia zmiana: Sierpień 14, 2015, 23:23:28 wysłana przez ShadowDancer »

Offline lethern

  • Użytkownik

# Sierpień 15, 2015, 03:18:57
MSSQL to trochę gorszy płatny PostgreSQL
to już podchodzi pod trollowanie
także tego.. dobrze że "błądzisz, szukasz, pytasz" ;p
(podobnie też uważam Linuksa za masochizm, ale i wiem że to (chyba) błędny przesąd jaki sobie wygodnie przyjąłem)
« Ostatnia zmiana: Sierpień 15, 2015, 03:55:41 wysłana przez lethern »

Offline Xender

  • Użytkownik

  • +4
# Sierpień 15, 2015, 11:54:41
Przepraszam, że odpisuję bez przeczytania całego wątku - TL;DR.

Chciałbym tylko wskazać, że istnieje jeszcze coś takiego jak SQLite.

Ze względu na lekką (jednoplikową i biblioteczną) budowę nadaje się np. jako format zapisu plików w aplikacji, a więc coś, do czego generalnie nie używa się "klasycznych" DB klient-serwer.

Najważniejsze cechy charakterystyczne:
- Jest zrealizowana jako biblioteka C (z bindingami do mnóstwa innych języków), zamiast modelu klient-serwer i łączenia się przez sieć.
- Cała baza siedzi w jednym pliku (kiedy jest w użyciu, mogą pojawiać się dodatkowe pliki dziennika lub "Write-Ahead Log" (WAL), ale po zamknięciu zostaje jeden plik).
- Wiele procesów może na raz czytać z DB, tylko jeden może pisać w danym momencie (w trybie WAL jeszcze nieco inaczej).
- Współbieżność dostępu jest zrealizowana na plikowych lockach systemu operacyjnego - AFAIK działa to zarówno na UNIX-owatych i na Windows, ale dostęp do pliku z bazą przez dysk sieciowy to generalnie zły pomysł - locki raczej kiepsko działają na różnych implementacjach sieciowych systemów plików i może dość do uszkodzenia bazy przez wiele równoczesnych zapisów.

https://www.sqlite.org/whentouse.html
https://www.sqlite.org/different.html

Pozdrawiam :)