Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jakie rozwiązanie lepsze wydajnościowo ?, Wiele baz, jeszcze więcej tabel czy miliony rekordów ?
ramol
post 28.07.2010, 04:28:30
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 5
Dołączył: 19.07.2005

Ostrzeżenie: (0%)
-----


Witam,

nie jestem specjalistą od baz danych dlatego postanowiłem zapytać tutaj. Proszę o wypowiedzi osób, które mają doświadczenie w tym temacie. Teoretyzować sam mogę winksmiley.jpg

Problem:
Na serwerze należy zainstalować, na początek, 1000 aplikacji jednego typu ( np. forum phpBB, joomla, wordpess ). Faktem jest, że ostatecznie będzie używana tylko i wyłącznie ta jedna wybrana aplikacja. Przyjmijmy w przykładzie, że będzie to jakieś forum aby zasygnalizować problem wydajności.
Można wykonać takie zadanie na trzy sposoby:
1. Instalacja każdej instancji aplikacji na osobnej bazie
2. Jedna baza danych i wiele prefixowanych tabel
3. Jedna baza danych, jeden prefix tabel ale za to dodatkowe pole rozróżniające instancje aplikacji.

Nie można założyć, że wszystkie aplikacje będą pracować pod dużym obciążeniem - mogą być używane nawet bardzo sporadycznie. Może również dojść do sytuacji gdy będzie potrzebny drugi serwer - należy więc zwrócić uwagę na ciągłość danych.

Jeżeli ktoś pracował nad podobnym zagadnieniem to chętnie poznam sugestie i uwagi.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
wookieb
post 28.07.2010, 07:18:03
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Oddzielna baza dla kazdej aplikacji.


--------------------
Go to the top of the page
+Quote Post
Mchl
post 28.07.2010, 08:32:59
Post #3





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Cytat(wookieb @ 28.07.2010, 08:18:03 ) *
Oddzielna baza dla kazdej aplikacji.


QFT
Go to the top of the page
+Quote Post
mkozak
post 28.07.2010, 12:12:13
Post #4





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


W sumie jeżeli chodzi o MySQL-a to nie ma to takiego dużego znaczenia.

Porozkładanie po różnych bazach to jedynie szybszy listing wszystkich tabel no i tak wizualnie łatwiejsze do ogarnięcia (bkpy, dumpy, dropy). W mysql baza danych to katalog (upraszczając - bo jeszcze są dane przechowywane w tabelach systemowych), a tabela i jej index to dwa pliki.
Jeżeli masz dużo dysków to część tabel/baz możesz poprzesuwać na inne woluminy. Np.: połowa baz/tabel systemów na jednym dysku, a druga na drugim.

Rozwiązanie nr 3 jest najgorsze - wszystko w jednej tabeli (np.: 4 fora phpbb z takimi samymi tabelami i pole rozróżniające) - dużo danych do zarządzania/przeszukania.

W dokumentacji od create table (http://dev.mysql.com/doc/refman/5.1/en/create-table.html) masz opisane opcje DATA DIRECTORY, INDEX DIRECTORY.


--------------------
==============================================
Bo ja jestem Wróbelek Htmlek
==============================================
Go to the top of the page
+Quote Post
Mchl
post 28.07.2010, 12:48:44
Post #5





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Cytat(mkozak @ 28.07.2010, 13:12:13 ) *
W sumie jeżeli chodzi o MySQL-a to nie ma to takiego dużego znaczenia.


Nie zgodzę się. Z 1000 instancji tej samej aplikacji niemożliwe jest, żeby wszystkie były wykorzystywane w jednakowym stopniu. Podział na wiele baz ułatwi na przykład migrację mocniej obciążonych instancji na osobne serwery. Gdyby siedziało to w jednej bazie trzeba by się bawić w klastrowanie.

Ten post edytował Mchl 28.07.2010, 12:50:26
Go to the top of the page
+Quote Post
everth
post 28.07.2010, 12:52:03
Post #6





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Skłaniam się ku rozwiązaniu 2. Tylko dlatego że ciężko mi się zarządza setkami baz w mysql. Rozwiązanie 3 sobie skreśl (za dużo kombinowania, czytaj błędów)


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
wookieb
post 28.07.2010, 12:53:42
Post #7





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To może odpowiedzią na pytanie będzie. Czy ktokolwiek z was tworzył wszystkie swoje aplikacji na JEDNEJ bazie danych? Odpowiedź zapewno 1%, który nie znał składni polecenia CREATE DATABASE. Po prostu 1 projekt = 1 baza i utrzymujesz czysty logiczny porządek.


--------------------
Go to the top of the page
+Quote Post
everth
post 28.07.2010, 13:04:47
Post #8





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Zakładając przy tym że ma się takie uprawnienia. Ja zakładam że zazwyczaj takich uprawnień się nie ma (jedna baza -> jeden użytkownik). Ale pomijając to, to masz rację smile.gif


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
Mchl
post 28.07.2010, 13:06:58
Post #9





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Cytat(everth @ 28.07.2010, 14:04:47 ) *
Zakładając przy tym że ma się takie uprawnienia. Ja zakładam że zazwyczaj takich uprawnień się nie ma (jedna baza -> jeden użytkownik). Ale pomijając to, to masz rację smile.gif


Bardzo dziwne założenie...
Go to the top of the page
+Quote Post
ramol
post 28.07.2010, 14:04:24
Post #10





Grupa: Zarejestrowani
Postów: 21
Pomógł: 5
Dołączył: 19.07.2005

Ostrzeżenie: (0%)
-----


Dzięki za odpowiedzi.
Ja sam pkt.3 od razu skreśliłem bo to niesamowity bałagan .. no ale musiałem spytać.
Co do punktów 1 i 2 - ja obstawiałbym 1 z tego powodu, jak pisał Mchl, że można spokojnie przenieść bardziej obciążoną instancję na inny serwer. Jest to też jakby logiczne z punktu widzenia sensu baz danych. Ogólnie ciężko mi sobie wyobrazić 1k baz danych i stąd to pytanie.
Go to the top of the page
+Quote Post
mkozak
post 28.07.2010, 14:11:26
Post #11





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


Cytat(Mchl @ 28.07.2010, 12:48:44 ) *
Nie zgodzę się. Z 1000 instancji tej samej aplikacji niemożliwe jest, żeby wszystkie były wykorzystywane w jednakowym stopniu. Podział na wiele baz ułatwi na przykład migrację mocniej obciążonych instancji na osobne serwery. Gdyby siedziało to w jednej bazie trzeba by się bawić w klastrowanie.


Ułatwi migracje i logiczny porządek, ale o wydajność było pytanie, więc jeżeli każda tabela w mysql ma swój oddzielny plik to nie ma znaczenia, czy jest to w jednej, czy w 1000-cu tabel.

Cytat(wookieb @ 28.07.2010, 12:53:42 ) *
To może odpowiedzią na pytanie będzie. Czy ktokolwiek z was tworzył wszystkie swoje aplikacji na JEDNEJ bazie danych? Odpowiedź zapewno 1%, który nie znał składni polecenia CREATE DATABASE. Po prostu 1 projekt = 1 baza i utrzymujesz czysty logiczny porządek.


Ja stawiałem ileś tam CMS-ów (takich samych) na jednej bazie, bo akurat tak sobie to wymyśliłem podział na swoim servie.
Bazy były od różnych systemów, a w ramach bazy chodziły sobie np fora na różnych prefixach, a w innej bazie CMS-y na różnych prefixach.
To też ułatwiało mi migracje pomiędzy wersjami fora, bo tworzyłem nowy prefix w tej samej bazie i przy migracji nie musiałem bawić się z prawami dostępu.
Dodatkowo stare tabele były zawsze pod ręką w razie jakiegoś fuckupu.

Ten post edytował mkozak 28.07.2010, 14:17:35


--------------------
==============================================
Bo ja jestem Wróbelek Htmlek
==============================================
Go to the top of the page
+Quote Post
Mchl
post 28.07.2010, 15:42:50
Post #12





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Cytat(mkozak @ 28.07.2010, 15:11:26 ) *
Ułatwi migracje i logiczny porządek, ale o wydajność było pytanie, więc jeżeli każda tabela w mysql ma swój oddzielny plik to nie ma znaczenia, czy jest to w jednej, czy w 1000-cu tabel.


Będę się nadal upierał, że ma to związek z wydajnością. Jeżeli migracja nie jest łatwa w przeprowadzeniu, zazwyczaj się ją odwleka do ostatniego możliwego momentu, a użytkownicy coraz bardziej narzekają... winksmiley.jpg

Osobny problem pojawia się, jeśli aplikacja korzysta z funkcji/procedu skłądowanych. W jednej bazie mamy możliwość zdefiniowania jednej funkcji/procedury o danym identyfikatorze. Przy 1000 instalacjach tej samej aplikacji w tej samej wersji, problemu nie ma, ale niech się pojawi update obejmujący te procedury składowane. Część instalacji nie będzie kompatybilna z kodem w bazie. Na szczęście (?) mało która aplikacja korzysta z procedu składowanych.
Go to the top of the page
+Quote Post
mkozak
post 30.07.2010, 11:48:47
Post #13





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


Cytat(Mchl @ 28.07.2010, 14:42:50 ) *
Będę się nadal upierał, że ma to związek z wydajnością.


Ale niby dlaczego?? Jakieś argumenty?


--------------------
==============================================
Bo ja jestem Wróbelek Htmlek
==============================================
Go to the top of the page
+Quote Post
Mchl
post 30.07.2010, 16:05:24
Post #14





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Podałem zaraz po kropce.

Cytat
Jeżeli migracja nie jest łatwa w przeprowadzeniu, zazwyczaj się ją odwleka do ostatniego możliwego momentu, a użytkownicy coraz bardziej narzekają...


Może nie jest to związek bezpośredni, ale moim zdaniem jest winksmiley.jpg
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:50