Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PostgreSQL] Wydajność tabeli z bardzo dużą ilością kolumn, Pytanie WYŁĄCZNIE do doświadczonych programistów
The Night Shadow
post
Post #1





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Witam,

Czy bazy danych PostgreSQL dobrze sobie radzą z wydajnością w przypadku utworzenia tabeli o bardzo dużej ilości kolumn (nawet do 200-250)?

Mamy zbiór pewnych obiektów, które mają BARDZO dużo różnego rodzaju właściwości. Te właściwości mają umożliwiać szybkie filtrowanie danych. Właściwości nie dają się łączyć w pary itp. stąd konieczność korzystania z osobnych pól dla każdej z nich. Powstała teoria mówiąca, iż najlepiej jest rozdzielić takie dane do kilku tabel. W pierwszej tabeli trzymać właściwości z danej grupy właściwosci, w drugiej z drugiej grupy właściwości itd. Sęk w tym, że w momencie przeszukiwania instrukcje JOIN będą bardzo obciązały bazę.

Jestem zdania, że w sytuacji, w której mamy do czynienia z integralnymi właściwościami należy to zbudować na jednej tabeli o bardzo dużej ilości kolumn.

Uproszę. W tabeli z użytkownikami mamy imię i nazwisko oraz adres. Nie rozdzielamy tego na dwie tabele, bo w przypadku przeszukiwania takie rozwiązanie będzie stanowiło nie lada problem. Podobna sytuacja tylko na większą skalę dotyczy sytuacji wyżej opisanej tabeli.

Niech mnie ktoś poprawi jeżeli się mylę.

Pozdrawiam!


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
wookieb
post
Post #2





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




Joiny nie będą tak bardzo obciążały bazy jeżeli będą to odpowiednie joiny dostosowane do potrzeb (inner join np), dodatkowo odpowiednie klucze. W przypadku gdy danych będzie ogromna ilosć warto by było się zastanowić nad dobrym serwerem dedykowanym (z procesorem 4 lub więcej rdzeniowym), gdzie przy takich maszynach postgres sprawdza się lepiej.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
W pierwszej tabeli trzymać właściwości z danej grupy właściwosci, w drugiej z drugiej grupy właściwości itd. Sęk w tym, że w momencie przeszukiwania instrukcje JOIN będą bardzo obciązały bazę.

Powiem to tak - wszystko naprawdę zależy od sytuacji i trzeba by było zrobić odpowiedni benchmark z uwzględnieniem indeksów i tych obu przypadków.

Cytat
Powstała teoria mówiąca, iż najlepiej jest rozdzielić takie dane do kilku tabel.

Cytat
Jestem zdania, że w sytuacji, w której mamy do czynienia z integralnymi właściwościami należy to zbudować na jednej tabeli o bardzo dużej ilości kolumn.

Ok, ale pozostaje jeszcze kwestia skalowalności aplikacji. Jeśli jest to oprogramowanie, które nie będzie za bardzo rozwijane i tabela jest wykorzystywana tylko w tym jednym, konkretnym celu, to wal wszystko do jednej. Ale 100% się tego potwierdzić w ciemno nie da -> benchmark to podstawa, bo każda sytuacja jest inna.

Problemy zaczynają się wtedy, gdy tymi cechami trzeba zarządzać - wtedy trzeba by było zrobić bodajże pivot (zmienić kolumny na połączenia relacyjne z obiektami). Fakt, nieco to zwolni, ale poprawi się skalowalność aplikacji oraz przenośność. Nawet patrząc z poziomu systemu plików - mniej kolumn -> głowica ma mniej przeskoków między danymi na dysku. Dodawanie/usuwanie kolejnej kolumny dla wszystkich rekordów będzie dość uciążliwe czasowo niż manipulacja rekordem będącym w relacji.

Poza tym, może wystarczyłoby po prostu odpowiednio cache'ować dane?

Może jeszcze za wiele nie widziałem, ale raczej stawia się na relacyjność w bazach niż na pakowanie wszystkiego do jednej tabeli.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
The Night Shadow
post
Post #4





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Może ustalmy fakty. Danych nie będzie dużo. Zazwyczaj jest tak, że tabela zawiera kilkadziesiąt kolumn i kilka tysięcy rekordów (przy większości małych projektów). Rozmawiamy o sytuacji nieco to równoważaącej czyli kilkaset do kilku tysięcy rekordów i około 250 kolumn.


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




E, to na moje oko urelacjonowienie bazy będzie ledwo odczuwalne.

Kilka tysięcy rekordów, to jest nic. winksmiley.jpg (oczywiście przy odpowiednio założonych indeksach)


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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 Aktualny czas: 19.08.2025 - 10:20