porównanie baz danych

0

Witam
Ostatnio po pytaniach "którą bazę wybrać" wpadłem na pomysł przeprowadzenia w miarę bezstronnego testu wybranych darmowych serwerów baz danych (min. MySQL 4.1, MySQL5.0, PostgreSQL, FireBird, MSDN, Paradox (to tak dla porównania), SQLite, Oracle 10g EE) a potem porównanie ich z komercyjnymi systemami (MSSQL, Oracle 10g r2, DB2). Lista baz do dyskusji, ale wymienione to wg. mnie te najbardziej znane i mające najwięcej rynku.

Porównywane były by w trzech płaszczyznach:

  1. możliwości - czyli
    a) zgodność ze standardem SQL
    b) transakcje
    c) procedury wbudowane
    d) wyzwalacze
    e) indexy i więzy integralności
    f) widoki
    g) obsługiwane języki
    h) archiwizacja
    i) itd
  1. wydajność
    a) mała baza (ok 50MB)
    b) średnia baza (ok 500MB)
    c) duża baza (ok 2GB)
    na każdej z nich wykonywane były by operacje typu (i mierzony czas ich wykonania)
    a) prosty SELECT z jednej tabeli
    b) złożony SELECT z kilku (kilkunastu) tabel z warunkami i sortowaniem wg konkretnej kolumny
    c) SELECT z widoku (jeśli baza posiada widoki)
    d) INSERT do tabeli bez wyzwalaczy
    e) INSERT do tabeli z wyzwalaczami (jeśli baza obsługuje wyzwalacze)
    f) UPDATE
    g) DELETE
    h) DELETE rekordu powiązanego więzami integralności

Jak to sobie wyobrażam
Został by stworzony schemat bazy testowej i byłby on taki sam dla wszystkich typów baz. Następnie pustą bazę wypełniało by się danymi do określonego rozmiaru. Dla wszystkich SZDB dane były be dokładnie te same. Następnie została by napisana aplikacja testująca konkretną bazę. Teraz każda z osób uczestniczących w projekcie miała by za zadanie na swoim kompie przetestować WSZYSTKIE bazy i wyniki przekazać do dalszej obróbki. Bazy testowane były by w dwóch konfiguracjach - 1. podstawowej, czyli zainstalowana i tyle, 2. po tuningu SZDB.

W wyniku mieli byśmy czasy wykonania poszczególnych zapytań na konkretnej bazie z konkretną ilością danych i na konkretnej maszynie :) (zakręcone trochę - wiem). Jako wynik końcowy były by średnie ogólne, dla konkretnego systemu (windows/linux bo nic innego chyba nie będzie), dla procka (intel / Amd + może podział na rodzinę) i jak ktoś będzie chciał to dane jednostkowe w postaci źrodłowej.

Czego oczekuję od uczestników
Przede wszystkim poważnego podejścia oraz świadomości, że trzeba będzie w to włożyć trochę pracy i czasu. To co napisałem wyżej to są bardzo ogólne założenia. Wszystkie szczegóły są do omówienia. Potrzebni są ludzie, którzy znają się choć trochę na bazach danych, przydali by się też spece, którzy potrafią wycisnąć z danej bazy max :). W zależności od ilości osób część lub wszyscy musiała by też napisać program, który testował by konkretną bazę (wytyczne oraz sposób testowania i pomiaru czasu będzie opracowany i taki sam dla wszystkich)

Co mogę zaoferować w zamian
Zaszczytne miejsce na liście uczestników projektu :P. Być może (w zależności od końcowego efektu) powstała by strona projektu (a wierzcie mi, takich porównań w necie jest jak na lekarstwo). Cały projekt jest darmowy, nikt go nie sponsoruje i nikt nikomu nic nie płaci. Jedyne co możecie zyskać to sławę i szacunek milionów zagubionych poszukiwaczy tej jedynej i najlepszej dla nich bazy danych :P

I na koniec mam nadzieję, że będzie jakikolwiek odzew, choćby nawet negatywny ...

0

Pomysł moim zdaniem ciekawy, ale wymaga dużo czasu oraz chęci i dlatego myślę, że może to iść bardzo powoli :/ Ale życzę powodzenia w pracy, bo tego typu szczegółowych porównań rzeczywiście jest bardzo mało. Ogólnie - jestem na tak.

0

Mi też pomysł się bardzo podoba, może uda się przekonać znajomego, że SQLite to nie jest takie cudo ;P

Mogę zająć się stworzeniem strony projektu oraz udostępnić miejsce na serwerze dla niej. Z udostępnieniem maszyny może być gorzej, obecnie tylko MySQL 4.1 u mnie jest i ciężko z miejscem na coś nowego :)

Nie wiem czy aplikacja testująca konkretną bazę jest dobrym pomysłem - może raczej jakiś skrypt napisany w PHP czy czymkolwiek innym, łączący się przez w miarę uniwersalną nakładkę (PDO czy ODBC), by uniezależnić się od interfejsu konkretnej bazy danych?

Do listy testowanych baz... warto było by przetestować i MS SQL Server 2000 (była darmowa edycja o ile pamiętam) oraz najnowszy 2005, darmową wersję Express na przykład, które znacznie się od siebie różnią.

Wynik testi wydajności nie jest tylko zależny od platformy programowej oraz procesora, ale przede wszystkim - od ilości RAM, więc i to w zestawieniu i uśrednianiu trzeba brać pod uwagę.

0

Wiem, że będzie wymagało to czasu i sumienności od uczestników ale myślę, że znajdzie się kilka osób :). Wiem też, że niedługo zaczynają się sesje i matury. Nie ma oczywiście problemu i możemy wystartować pełną parą np. w wakacje.

Co do interfejsu bazy to chciałbym też zrobić taki test przy różnych sposobach podłączenia do bazy (np. ODBC, ADO, natywne sterowniki (jeśli są)) bo wbrew pozorom nie są one tak samo wydajne.
Co do ramu to wiem, że od ilości dużo zależy, ale może być problem ile będzie mogła dla siebie zagarnąć sama baza zależy też od tego ile będzie go wolnego i o ile na jednej maszynie można stworzyć podobne warunki dla każdej bazy o tyle na różnych może być ciężko (ale oczywiście nie będzie problemu, żeby z danych wyciągnąć zestawienie z podziałem na ilość ramu).

0

Witam,
moim zdaniem nie mozna tez taką lekka ręką ominąć podziału w godzinach produkcyjnych i poza nimi, a takie stałe obciązenie będzie raczej cięzkie do osiągnięcia.
Poza tym trzeba bedzie ludzi do kazdej z tych baz - chodzi mi o optymalizację zapytań, kazda baza reaguje na selecty na swoj sposob.
W wakację chętnie bym sie podłączył do tych testów, co do aplikacji testującej to raczej proponowałbym skrypty DML i tworzenie pseudo-raportów z danych. Nie da się napisać uniwersalnej aplikacji, nie krzywdząć tych RDBMS'ów :D.

Pozdrawiam

0
night napisał(a)

Witam,
moim zdaniem nie mozna tez taką lekka ręką ominąć podziału w godzinach produkcyjnych i poza nimi, a takie stałe obciązenie będzie raczej cięzkie do osiągnięcia.

Tu można np. spróbować przeprowadzić kilka testów jednocześnie - np. odpalamy generowanie jakiegoś raportu + proste selecty + seria insertów. Wiem, że uzyskanie warunków choćby zbliżonych do tych występujących w czasie działania aplikacji jest ciężkie ale zawsze będzie to jakaś baza, na której można się oprzeć

Poza tym trzeba bedzie ludzi do kazdej z tych baz - chodzi mi o optymalizację zapytań, kazda baza reaguje na selecty na swoj sposob.

Zgoda, ale same SELECTy to nie wszystko, w wielu przypadkach czas wykonania SELECTa jest dużo mniej znaczący niż INSERTa (np. na raport można poczekać nawet i 5 minut, ale pani, która fakturuje nie może sobie pozwolić na minutową przerwę po dodaniu każdej f-ry). I o ile jeden SELECT można napisać na wiele sposobów o tyle INSERTa czy UPDATEa się raczej nie da.

W wakację chętnie bym sie podłączył do tych testów

trzymam za słowo :)

co do aplikacji testującej to raczej proponowałbym skrypty DML i tworzenie pseudo-raportów z danych. Nie da się napisać uniwersalnej aplikacji, nie krzywdząć tych RDBMS'ów :D.

ale ja nigdzie nie napisałem, że ma to być jedna aplikacja :). Miałem raczej wizję co najmniej* jednej aplikacji do jednego RDBMS'a, pisanej tylko i wyłącznie pod konkretny system

No i właśnie na początku trzeba przedyskutować wszystkie kwestie i sposoby testowania. Ja jestem raczej elastyczny i nie staram się przekonać wszystkich do moich sposobów :P

    • można też napisać kilka łączących się w różny sposób
0

Dokładnie tak, chociaż w kwestii insertów to pojedyncze raczej nie robią problemów, chyba ze jest naście kluczy obcych, i tyle samo indexów. W tym momencie uciążliwe jest ładowanie batchowe.

Ja moge się podjąć dłubania w Oracle'u bo troche to znam i w dedykowanym srodowisku np. Oracle Developer. Jakby sie ktoś znał na generatorach danych to byloby zajefanie :), nie wiem czy bedzie sie chciało komus klepać ze 2 mln rekordów z palca (chyba ze jakieś produkcyjne dane :) ).

0
night napisał(a)

Dokładnie tak, chociaż w kwestii insertów to pojedyncze raczej nie robią problemów, chyba ze jest naście kluczy obcych, i tyle samo indexów. W tym momencie uciążliwe jest ładowanie batchowe.

robiąc taki podział przy testowaniu kierowałem się tym, że wszystkie działające systemy bazodanowe można podzielić na 4 grupy*

  1. zbierające dane - mnóstwo insertów sporadyczne selecty i prawie żadnych updateów (to np. systemy zbierające dane z czujników przemysłowych, gdzie raport jest generowany np. raz na dobę)
  2. udostępniające dane - praktycznie same selecty, czasem insert lub update (np. dane dla map, gdzie są wpisywane raz a następnie tylko odczytywane)
  3. zbierające dane transakcyjnie (nie wiem jak je inaczej nazwać :P) - dużo grupowanych insertów, które muszą się wykonać wszystkie albo żaden (np. systemy fakturujące, systemy bankowe), średnio selectów update/delet raczej rzadko
  4. mieszany - wszystkie pozostałe aplikacje, które po równo dopisują, zmieniają, kasują, pobierają dane.

Przy każdym z tych zastosowań ten sam RDBMS może (i zazwyczaj się zachowuje) się zachowywać bardzo odmiennie. Jedna baza zatka się przy dużej liczbie insertów, a będzie szybka przy skomplikowanych zapytaniach a inna wręcz odwrotnie itd.

Ja moge się podjąć dłubania w Oracle'u bo troche to znam i w dedykowanym srodowisku np. Oracle Developer.

No i wreszcie konkretne deklaracje :D. Na dzień dzisiejszy ja mogę podłubać w FB i Postgresie bo na nich pracowałem i pracuje.

Jakby sie ktoś znał na generatorach danych to byloby zajefanie :), nie wiem czy bedzie sie chciało komus klepać ze 2 mln rekordów z palca (chyba ze jakieś produkcyjne dane :) ).

Tu myślałem zrobić testową bazę (a właściwie trzy - 50MB, 500MB i 2GB) a potem importować dane do reszty baz. Co do samych danych to mam pomysł, żeby napisać automat, który by wypełniał podaną tabelę danymi losowymi (losowa długość ciągu + losowe znaki). Coś takiego ma np. IBExpert dla FB/IB.
A co do produkcyjnych danych to wiadomo, że tajemnica zawodowa i jakby to wyszło na zewnątrz to można nieźle beknąć więc raczej odpada (chyba, że będą to dane ogólnie dostępna, np. lista Wildstein :P)

    • ten podział jak i nazewnictwo to mój wymysł więc nie strzelać, proszę :)
0
Ktos napisał(a)

Mi też pomysł się bardzo podoba, może uda się przekonać znajomego, że SQLite to nie jest takie cudo ;P

Małe OT.
To jest cudo. Jako podręczna jednoplikowa baza danych jest rewelacyjna. Jeden pliczek, bez instalacji i masz pod ręką mały serwer sql do wykorzystania w niewielkich aplikacjach. Jedyne znane mi podobne bazy Paradox, dBase i Access wysiadają przy niej.

0
Dryobates napisał(a)

Małe OT.
To jest cudo. Jako podręczna jednoplikowa baza danych jest rewelacyjna. Jeden pliczek, bez instalacji i masz pod ręką mały serwer sql do wykorzystania w niewielkich aplikacjach. Jedyne znane mi podobne bazy Paradox, dBase i Access wysiadają przy niej.

a działa wtedy z wiolodostępem? BO np. FB ma wersję embedded (jeden dll + plik bazy) ale wtedy tylko można jednego klienta podpiąć

0
Misiekd napisał(a)

a działa wtedy z wiolodostępem? BO np. FB ma wersję embedded (jeden dll + plik bazy) ale wtedy tylko można jednego klienta podpiąć

http://www.sqlite.org/faq.html#q7

Jak widać podpiąć można, ale jest to troszkę ograniczone.

0
Dryobates napisał(a)

http://www.sqlite.org/faq.html#q7

[wstyd] no tak, kto by czytał FAQ

0
Ktos napisał(a)

Nie wiem czy aplikacja testująca konkretną bazę jest dobrym pomysłem - może raczej jakiś skrypt napisany w PHP czy czymkolwiek innym, łączący się przez w miarę uniwersalną nakładkę (PDO czy ODBC), by uniezależnić się od interfejsu konkretnej bazy danych?

Myślę, że w ten sposób moglibyśmy skrzywdzić niektóre bazy, ktore lepiej by działały na swoich "natywnych" interfejsach.

A jeśli chodzi o deklaracje: chętnie się tego podejmę, ale skolei PO wakacjach (bo teraz licencjat a w wakacje bywam offline), no i mogę coś niecoś w oracle'u, mysql'uu i (to jeszcze nie pewne) DB2 (mam nawet evaluation do Ent Server Edition v8.2 i Express Edition, ale jeszcze nie bawiłem się tym a byłby to dobry pretekst).

jeśli chodzi o aplikacje to mogę w php, delphi, vs.net.

Tyle. Będę obserwołał ten topic bo ciekaw jestem co z tego wyniknie...</delphi>

0

dzięki :) i trzymam za słowo. I jeśli projekt ruszy (no na razie zadeklarowały się dwie osoby :P) to na pewno się odezwę

0

DB2 (mam nawet evaluation do Ent Server Edition v8.2 i Express Edition, ale jeszcze nie bawiłem się tym a byłby to dobry pretekst).

A masz jakies kursy, tutoriale i narzedzia do DB2, bo chciałbym zrobic w tym projekt do szkoly, a nie bardzo mam od czego zacząc :/.
Byłbym bardzo wdzięczny.
Pzdr

0

hmm, teraz jestem na zajeciach (swoją drogą- bazy danych), ale jak bede w chacie to zobacze co jest i odezwe sie ;)

0

z jednej strony to bez sensu bo przed kazdym powaznym wdrozeniem i tak sie robi taka analize. poza tym w komercyjnych zastosowaniach licza sie jedynie MsSQL i Oracle. a porownywanie pod wzgledem wydajnosci pozostalych mija sie z celem bo czesciej wybor jest wymuszony warunkami sprzetowymi, programowymi i odwiecznym problemem user-friendly.

jednakze z drugiej strony wiedza, ktora zdobedziesz przy okazji jest nie do pogardzenia...

0
vixen03 napisał(a)

z jednej strony to bez sensu bo przed kazdym powaznym wdrozeniem i tak sie robi taka analize.

Nie bardzo się z Tobą zgodzę - taką analizę robi się zazwyczaj przed napisaniem aplikacji a nie przed wdrożeniem

poza tym w komercyjnych zastosowaniach licza sie jedynie MsSQL i Oracle.

grubo się mylisz, nie każda aplikacja jest pisana dla giganta finansowego, który może sobie pozwolić wydać xxx$ na sam serwer SZBD. Są też na rynku dziesiątki tysięcy małych i średnich firm, gdzie np. postgres sprawdza się znakomicie

a porownywanie pod wzgledem wydajnosci pozostalych mija sie z celem bo czesciej wybor jest wymuszony warunkami sprzetowymi, programowymi

Nie wiem jak Ty ale u mnie to sprzęt jest dobierany pod silnik bazy a nie na odwrót

i odwiecznym problemem user-friendly.

A tego to nie kumam, przecież SZBD nie ma być user friendly tylko stabilna, szybka i bezpieczna. Przecież nikt o zdrowych zmysłach nie daje dostępu zwykłemu userowi dostępu do gołej bazy - zazwyczaj jest jakaś aplikacja między userem a SZDB

jednakze z drugiej strony wiedza, ktora zdobedziesz przy okazji jest nie do pogardzenia...

a tu się wyjątkowo zgodzę :P

0

(...)każda aplikacja jest pisana dla giganta finansowego, który może sobie pozwolić wydać xxx$ na sam serwer SZBD. Są też na rynku dziesiątki tysięcy małych i średnich firm, gdzie np. postgres sprawdza się znakomicie

No i w tym momencie taki postgres zaczyna mieć tyły gdy pojawia się np darmowa wersja oracle (10g express edition) lub db2 ibm'a. Teraz "giganci" nie pozwalają sobie na utratę rynku małych firm, nawet jeżeli nie przynosi on bezpośrednich dochodów.

A tego to nie kumam, przecież SZBD nie ma być user friendly tylko stabilna, szybka i bezpieczna.

Dodam jeszcze: skalowalna ;)</quote>

0
Misiekd napisał(a)
vixen03 napisał(a)

z jednej strony to bez sensu bo przed kazdym powaznym wdrozeniem i tak sie robi taka analize.

Nie bardzo się z Tobą zgodzę - taką analizę robi się zazwyczaj przed napisaniem aplikacji a nie przed wdrożeniem

no chodzi mi o to, ze zanim ktos zdecyduje sie na wybor danej bazy danych to przeprowadza odpowiednia analize, biorac pod uwage wydajnosc, sklaowalnosc itd...

Misiekd napisał(a)

poza tym w komercyjnych zastosowaniach licza sie jedynie MsSQL i Oracle.

grubo się mylisz, nie każda aplikacja jest pisana dla giganta finansowego, który może sobie pozwolić wydać xxx$ na sam serwer SZBD. Są też na rynku dziesiątki tysięcy małych i średnich firm, gdzie np. postgres sprawdza się znakomicie

~800$ za wersje MsSql dla malej lub sredniej firmy. to nie tak duzo....

Misiekd napisał(a)

a porownywanie pod wzgledem wydajnosci pozostalych mija sie z celem bo czesciej wybor jest wymuszony warunkami sprzetowymi, programowymi

Nie wiem jak Ty ale u mnie to sprzęt jest dobierany pod silnik bazy a nie na odwrót

male i srednie przedsiebiorstwa najpierw beda probowaly wykorzystac istniejace zasoby, a dopiero potem myslec o kupnie nowych.

Misiekd napisał(a)

i odwiecznym problemem user-friendly.

A tego to nie kumam, przecież SZBD nie ma być user friendly tylko stabilna, szybka i bezpieczna. Przecież nikt o zdrowych zmysłach nie daje dostępu zwykłemu userowi dostępu do gołej bazy - zazwyczaj jest jakaś aplikacja między userem a SZDB

chodzi o zarzadzajacych baza. jedynie MsSql (nie wiem jak Oracle) ma z prawdziwego zdarzenia narzedzie do zarzadzani baza. kiedy zobaczylem, ze do MySQLa trzeba sciagac osobno i to ThirdParty to odpuscilem sobie, w Postgre troche lepiej bo narzedzie jest, choc bardzo dziwne (co jest tylko moja subiektywna opinia).

poza tym MySQL i Postgre sa OpenSource co samo w sobie je dyskfalifikuje.

0
vixen03 napisał(a)

poza tym MySQL i Postgre sa OpenSource co samo w sobie je dyskfalifikuje.

pomijając wszystko inne to tu mnie po prostu rozbawiłeś :D

0

Tylko po co mi nawet to darmowe oracle, jak mam mieć po prostu firmową książkę telefoniczną z jakimiś ficzerami specyficznymi dla mnie?
MySQL odpalę na byle czym, w przeciwieństwie do oracle'a.

0
Qyon napisał(a)

Tylko po co mi nawet to darmowe oracle, jak mam mieć po prostu firmową książkę telefoniczną z jakimiś ficzerami specyficznymi dla mnie?
MySQL odpalę na byle czym, w przeciwieństwie do oracle'a.

Może po to, że jak Twoja firma osiągnie sukces i będzie chciała się rozwijać, to po prostu przejdzie na płatną wersję i uruchomi serwer na kilku procesorach i to wszystko bez bólu..
Albo dlatego, że w tym momencie stworzenie aplikacji dla bazy oracle, za pomocą Application Express zajmie Ci mniej więcej 1/4 czasu, w porównaniu do pisania takiej aplikacji np. w php.

Zresztą, uważam, że ta polemika nie ma za dużo sensu, bo przypomina zastanawianie się nad kwestią "jaki język programowania jest najlepszy?".

Każde narzędzie, które jako-tako trzyma się na rynku jest tam komuś potrzebne. My chcemy je tylko porównać pod względem wydajności i przy okazji się czegoś nauczyć.

0

Pomysl ciekawy i chetnie sie przylacze, przy czym jezeli chodzi o termin prac to najbardziej odpowiadalby mi lipiec. Moge sie zajac bazami Oracle, MSSql lub MySQL oraz procesem przygotowania i ladowania danych do testowanych baz.
Na biezaco bede sledzil watek i mam nadzieje ze zglosi sie wiecej osob.

Pozdrawiam
Marcin

0

czyli jak dobrze liczę to jest już nas trzech :)

0

Ciężko będzie coś takiego zrealizować :)

Choćby dlatego, że Oracle ma hinty i pewne specyficzne funkcje, które pozwalają optymalizować zapytania. Nie wiem czy inne systemy mają takie funkcjonalności.

Wszystko musiałoby ruszyć na tym samym sprzęcie... A to też trochę bez sensu.

MySQL n.p. w ogóle nie obsługuje typowo biznesowych funkcjonalności dotyczących spójności danych.

Najlepiej byłoby mieć dostęp do paru sytemów BD i spod SAP'a puścić abapowy skrypt w native sql na transakcji analizy ;)

Albo jeszcze inaczej, puścić to w open sql i pozwolić ABAP'owi na optymalizację zapytania pod konkretną bazę z której będzie korzystać.

Inaczej może być różnie z porównywaniem wyników.

0

Witam,

W poszukiwaniu zestawienia baz danych wygooglałem ten wątek. Nie wiem jak się mają wasze plany/postępy w działaniach odnośnie testowania baz danych, ale ja mam właśnie takie zadanie do wykonania.

Muszę wykonać porównanie silników baz danych (wg planu szefa w grę wchodzi Interbase, MAX DB, MS SQL, MySQ, DB2, pewnie coś dodam od siebie). Na wykonanie zadania mam 12 miesięcy. W mojej dotychczasowej pracy miałem doczynienia z bazami MySQL, Oracle, Sybase i Interbase. Bieżące zadanie związane jest z wyborem silnika/silników bazy danych dla nowej wersji aplikacji.

Przeczytałem waszą planowaną metodologię testowania i to czego brakuje do dopełnienia moich testów to test skalowalności i wbudowane mechanizmy replikacji. W moim wypadku kłopot polega na tym, że w chwili obecnej dostarczamy rozwiązania dla spektrum klientów od małych firm po "ogromne" (w sumie to pojęcie względne), więc muszę uwzględnić ten aspekt.

Nie wiem jakie są wasze dalsze zamierzenia odnośnie testowania, ale chętnie się im będę przyglądał i jeżeli będzie to możliwe spróbuję się z wami podzielić moimi wynikami.

Jak na razie opracowuję środowisko testowe. Planuję użyć wirtualnych maszyn posadowionych na VMware (ten mam w wersji Workstation 5) lub innym sofcie do wirtualizacji systemów. Moim zdaniem posiada to kilka zalet:

  1. Łatwość przenoszenia do innych fizycznych maszyn bez tracenia czasu na instalację OS.
  2. Powtarzalność konfiguracji OS (wszystkie bazy danych można posadowić na identycznym OS).
  3. Możliwość symulacji zachowań sieciowych na jednym fizycznym PC (np komunikacja klient-serwer, replikacja).

Pozdrawiam i czekam na dalszy rozwój wątku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1