Łukasz Holeczek

Łukasz Holeczek Najlepszy z
najlepszych

Temat: Jedna baza czy wiele

Witam, mam obecnie mały dylemat dotyczący baz danych dla mojej aplikacji.

Aplikacja dostarczana w modelu SaaS, klient wchodzi na strone podaje subdomene i tworzone jest dla niego konto. Docelowo przyrost użytkowników to około 3000-5000 rocznie.

Mój dylemat to czy używać jednej bazy danych czy wielu baz dla każdego klienta osobnej.

Obecnie baza danych ma 27 tabel, a liczba nowych rekordów tookoło 1000/tydzień, gdyby to były 2 tabele to nie zastanawiałbym się nad wieloma bazami.

Jeżeli zdecydowałbym się na wiele baz danych to muszą one mieć wspólne 3 tabele, z informacjami o kontach, kontrahentach i postępowaniach, ponieważ dane te mają być dostępne w portalu, który spina całość.

Bardzo chętnie wysłucham opinii bardziej doświadczonych w temacie baz danych.Łukasz Holeczek edytował(a) ten post dnia 02.05.12 o godzinie 10:19
Anna R.

Anna R. REQB | ISTQB

Temat: Jedna baza czy wiele

Polecam Ci bardzo dobrą lekturę na ten temat z TechNet-u:
http://msdn.microsoft.com/en-us/library/aa479086.aspx
27 tabel to nie dużo, pytanie, ile i jakie informacje chcesz gromadzić - a przede wszystkim, jak długo. No i jeszcze jedno - czy użytkownicy będą robili backupy? Jeśli tak, to bez oddzielnych baz się chyba nie obejdzie.

Kolejne nasuwające się pytania, to: w jakiej technologii - czyt. na ile Cię stać? Inaczej projektuje się aplikacje dla systemów klasy enterprise, a inaczej na darmowe rozwiązania, chcąc nie chcąc, jednak okrojone w możliwościach zarządzania i nie tak elastyczne.

Wspólne tabele - to nie problem. Czy to wspólna oddzielna baza danych (taki np. DB_config dla aplikacji bez danych użytkowników) czy też odrębna schema - to już zależy wyłącznie od tego, jak Ci wygodniej zaimplementować taką funkcjonalność.
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: Jedna baza czy wiele

Jaki planujesz mieć roczny przyrost tych baz, ewentualnie ile baz na jeden serwer?
Łukasz Holeczek

Łukasz Holeczek Najlepszy z
najlepszych

Temat: Jedna baza czy wiele

1 klient = 1 baza danych

Około 1000 klientów w pierwszym roku, 3000 drugi rok, 5000 trzeci rok. To jest oczywiście plan minimum.Łukasz Holeczek edytował(a) ten post dnia 02.05.12 o godzinie 16:31
Karol Kowalczyk

Karol Kowalczyk Programista, Marsh
Sp z o.o.

Temat: Jedna baza czy wiele

Użytkownicy i klienci to nie zawsze to samo w aplikacji. Miło by było jakbyś uściślił czy czy bazę chcesz dla jednego użytkownika.

Pracuję na aplikacji gdzie jest 3000 baz około 15000 użytkowników.

Doświadczenia hmmm zależy;).

Generalnie na początku sugerowałbym zrobienie bazy matki gdzie wszyscy klienci mieliby dane.(plusy: łatwość developmentu i utrzymania, minusy: w teorii bezpieczeństwo, wydajność) oraz oddzielną bazę danych z danymi administracyjnymi(jakbyś stwierdził że jedna baza to nie to...).

W przypadku rozbudowy aplikacji, zbyt dużego obciążenia aplikacji itp. mógłbyś przejść do modelu z większą ilością baz.
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: Jedna baza czy wiele

Nie wiem na jakim systemie planujesz to postawić, ale przy tej ilości baz będą problemy z każdym RDBMS. Z doświadczenia, realnie zarządzalne jest 100, max 200 baz na instację. Powyżej tych wartości zaczynają się różne problemy związane z ilością baz.

Policz sobie przyrost danych - zaleznie od wybranego RDBMS nie problemu z zarządzaniem pojedyńczymi bazami terabajtowej wielkości.

Jak piszesz o tym, że będziesz chciał wyświetlać jakieś sumaryczne dane to na myśl o np widoku na 5000 baz robi mi sie trochę słabo.. :)Bartosz Ślepowronski edytował(a) ten post dnia 05.05.12 o godzinie 13:15
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: Jedna baza czy wiele

Karol Kowalczyk:
W przypadku rozbudowy aplikacji, zbyt dużego obciążenia aplikacji itp. mógłbyś przejść do modelu z większą ilością baz.

A właśnie, taka uwaga, w tą stronę jest prościej niż w drugą. W drugą jest zawsze problem z kluczami :)
Łukasz Holeczek

Łukasz Holeczek Najlepszy z
najlepszych

Temat: Jedna baza czy wiele

W zależności od abonamentu klient będzie mógł zakładać dodatkowe konta swoim pracownikom czyli 1 klient = 1 baza = max 100 użytkowników.
Karol Kowalczyk

Karol Kowalczyk Programista, Marsh
Sp z o.o.

Temat: Jedna baza czy wiele

Na mój gust stworzenie więcej niż jednej bazy jest upierdliwe ale może sie okazać potrzebne.

Elastyczność systemu jest niezwykle porządana przy rozbudowie i codziennym użytkowaniu.
W takim wypadku to ja bym zaprojektował to w ten sposób:
Baza dministracyjna:
-Klienci (z dodatkową kolumną varchar z nazwą bazy danych)
-Użytkownik Klient rola
-tabela użytkowników
-Wszelkie dane dodatkowe dane w stylu historia lodowań, zmian hasła itp.
-tabela słowników globalnych
Bazy odpowiadające rodz abonamentu przy czym wszystkie oparte na wspólnym modelu.
(łatwość przenoszenia) plus:
-tabela słowników lokalnych

Dlaczego tak:
-bo gdy nadejdzie dzień że bedzie chciał rozdzielić bazy z jakiego kolwiek powodu to mechanizm masz już kompletny
-jak wprowadzisz abonanment super enterprise przynajmniej część wspólną masz gotową.
Jakub P.

Jakub P. Programista, TEKOM
Sp. z o.o.

Temat: Jedna baza czy wiele

Witam,

Pracuję nad systemem, w którym 1klient = 1baza z tym, że dziennie przybywa ponad 1GB danych wszystkim klientom z przedziału od 1MB do 100MB per klient (baza). Tylko tak mogliśmy zapewnić elastyczność dla klientów, backupy i inne. Tak jak napisał Bartosz pracujemy z maksymalnie 300 baz na instancję.
W twoim przypadku 1000 rek/tydz to oddzielne bazy będą bardzo małe, nawet po roku czasu. Chyba, że ten 1 rekord to całe megabajty danych. Popieram rozwiązanie zaproponowane przez Karola. Będziesz musiał ocenić jedynie ilu klientów będzie przypadać na jedną bazę danych.

Pozdrawiam

konto usunięte

Temat: Jedna baza czy wiele

Mój dylemat to czy używać jednej bazy danych czy wielu baz dla każdego klienta osobnej.

Dlaczego myślisz o użyciu wielu baz danych ? Tzn. co chcesz przez to osiągnąć ?Jakub Wojt edytował(a) ten post dnia 05.05.12 o godzinie 13:39
Łukasz Holeczek

Łukasz Holeczek Najlepszy z
najlepszych

Temat: Jedna baza czy wiele

Jakub Wojt:
Mój dylemat to czy używać jednej bazy danych czy wielu baz dla każdego klienta osobnej.

Dlaczego myślisz o użyciu wielu baz danych ? Tzn. co chcesz przez to osiągnąć ?

Nie wiem jeszcze czy chcę mieć wiele baz danych. Pierwotnie zakładałem jedną bazę dla wszystkich, otrzymałem jednak kilka z sygnałów z zewnątrz, że wiele baz może być lepszym rozwiązaniem np. w przypadku gdybym chciał klientów przenosić na inne serwery ze względu na duży ruch w aplikacji jaki generują.

W związku z tym postanowiłem zapytać mądrzejszych od siebie jakie rozwiązanie będzie lepsze.

konto usunięte

Temat: Jedna baza czy wiele

Baza na klienta może być problematyczna. Tabela na klienta również. Wydaje mi się, że hybryda obu rozwiązań będzie najlepsza.

Np. alfabetyczny podział:
klienci na A = baza A, a w środku tabele dla każdego klienta itd...

konto usunięte

Temat: Jedna baza czy wiele

Dlaczego myślisz o użyciu wielu baz danych ? Tzn. co chcesz przez to osiągnąć ?

Nie wiem jeszcze czy chcę mieć wiele baz danych. Pierwotnie zakładałem jedną bazę dla wszystkich, otrzymałem jednak kilka z sygnałów z zewnątrz, że wiele baz może być lepszym rozwiązaniem np. w przypadku gdybym chciał klientów przenosić na inne serwery ze względu na duży ruch w aplikacji jaki generują.

W związku z tym postanowiłem zapytać mądrzejszych od siebie jakie rozwiązanie będzie lepsze.

Skąd wiesz, kto jest mądrzejszy od Ciebie ? :)
Jeśli jedynym powodem tworzenia 'osobistej' bazy danych jest jest 'wydajność' to wg. mnie jest to zły pomysł. Istnieją mechanizmy klasteryzacji / partycjonowania baz danych. Wykorzystaj je. nie twórz swoich.
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: Jedna baza czy wiele

Sebastian Zaborowski:
Baza na klienta może być problematyczna. Tabela na klienta również. Wydaje mi się, że hybryda obu rozwiązań będzie najlepsza.

Np. alfabetyczny podział:
klienci na A = baza A, a w środku tabele dla każdego klienta itd...

O bosh.. apagee satanas! Przychodzi się potem do różnych firm co im niedziałabazadanych i widzi się takie koszmarki. No offence, ale lecenie po alfabecie to bardzo zły pomysł.Bartosz Ślepowronski edytował(a) ten post dnia 05.05.12 o godzinie 21:30
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: Jedna baza czy wiele

Jakub Wojt:
>Istnieją
mechanizmy klasteryzacji / partycjonowania baz danych. Wykorzystaj je. nie twórz swoich.

Ale nie w każdym RDBMS. A kolega Łukasz się nie określił chyba w temacie bazy?
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Jedna baza czy wiele

Szczerze to średnio widzę sens takiej architektury(wiele baz danych, dynamicznie tworzonych). Nie jesteś w stanie robić wielu rzeczy (joinów itp), nie sposób ograniczyć liczby połączeń, co może spowodować (nie licząc wydajności) bledy jak pool połączeń się wyczerpie itp itd. Skoro sam nie wiesz co chcesz tym osiągnąć, to po co w ogóle o tym myśleć? Chyba że lubisz jak inny programista czasem na Ciebie poklnie (widząc takie rozwiązania)...
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: Jedna baza czy wiele

Są przypadki kiedy dynamiczne tworzenie baz jest uzasadnione. Nie wiem czy akurat konkretnie ten, ale są.
Łukasz Holeczek

Łukasz Holeczek Najlepszy z
najlepszych

Temat: Jedna baza czy wiele

Bartosz Ślepowronski:
Jakub Wojt:
>Istnieją
mechanizmy klasteryzacji / partycjonowania baz danych. Wykorzystaj je. nie twórz swoich.

Ale nie w każdym RDBMS. A kolega Łukasz się nie określił chyba w temacie bazy?

Jeżeli chodzi od bazę to będzie to MySQLŁukasz Holeczek edytował(a) ten post dnia 06.05.12 o godzinie 12:03

konto usunięte

Temat: Jedna baza czy wiele

>Istnieją
mechanizmy klasteryzacji / partycjonowania baz danych. Wykorzystaj je. nie twórz swoich.

Ale nie w każdym RDBMS. A kolega Łukasz się nie określił chyba w temacie bazy?

Jeżeli chodzi od bazę to będzie to MySQL

http://dev.mysql.com/doc/refman/5.1/en/partitioning-ov...
http://www.mysql.com/products/cluster/

Następna dyskusja:

Wiele baz danych - jako jedna?




Wyślij zaproszenie do