Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PostgreSQL] Czy Postgre da radę
dado
post
Post #1





Grupa: Zarejestrowani
Postów: 194
Pomógł: 2
Dołączył: 12.04.2004
Skąd: Częstochowa

Ostrzeżenie: (10%)
X----


Mamy pytanie dotyczące sensu stawiana bazy na silniku postgre danych w przypadku gdy :

- baza zawiera ok. 400 milionów rekordów. Rozmiar rekordu od 120 do 950 bajtów.
- nie można tworzyć kluczy primary key bo dane w kolumnach nie są unikalne.
- baza ma pracować online wystawiona w intenrnecie z średnio 4,5 userami online.
- zapytania do bazy danych odwołują się do 3-6 tabel jednocześnie.

Baza zawiera wszystkie części samochodowe świata.

Czy jedynym wyjściem jest tutaj oracle?

W tym momencie zapytanie o wyświetelenie 30 rekordów w pgadminie do jednej z głównych tabel trwa około 4 minut. (tabela przeindeksowana i klastrowana)

Może ktoś borykał się z takimi bazami.

będę wdzięczny za każdą odpowiedź.

Ten post edytował dado 15.10.2008, 08:54:18
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
calebos
post
Post #2





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

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


Sprawdzanie co robi zapytanie:
  1. EXPLAIN SELECT...


To ze powiedziales że nie ma unikanlej wartości mowi o tym ze nie do konca ta tablica jest odpowiedno znormalizowana i może udałoby sie cos utargowac jakims rozbiciem, ale z tego co podajesz pozniej wyglada na to ze jest chyba ok.
Przy takiej ilosci rekordow pamietaj o problemie z powtarzalnoscia danych..

Nie znam sie na postgresie ale btree to chyba najprostsza forma indeksu nie ma tam czegos bardziej zmyslnego zeby operowal na wiekszych wycinkach wartosci kolumny? Takie drzewo to zamulacz i predzej trafisz skanujac tablice za pelna wartoscia jak chodzac po drzewie.

Muszisz krok po kroku robic sobie te zapytania i analizowac EXPLAIN oraz czas wykonania zapytania.
Na poczatku pytaj po prostu jedna kolumne bez zadnych ORDER itp,bez indeksow itp i analizuj sobie jak to dziala.
Nie daj sie oszukac buforowi bazy bo moze Ci cos zapamietac (zobacz jaka jest komenda na wyczyszczanie).

Na koniec jesli bedziesz wykonywac takie zapytania jak np
tab.kategoria=KLOCKI
tab.marka=VOLVO
tab.rok between X and Y

To mozesz utworzyc sobie indeksy na wielu kolumnach. Przeczytaj dokumentacje bo one dzialaja w momencie kiedy pytasz o 3 kolumny a jak juz zapytasz o 1 to ten indeks nie dziala (jakos tak).

Optymalizatory sa dziwne i trzeba patrzec co robia.

Np mysql nie radzi sobie z GROUP BY podczas laczenia 3 tablic a mogloby sie wydawac ze takie przypadki juz bedzie w stanie sobie rozpracowac.

Na koniec mozesz sie zastanowic nad cachem takich zapytan do talic pomocniczych oraz nad silnikiem wyszukiwania po frazie tez na tablicy pomocniczej.

PS. Tez jestem z Czestochowy wiec jak bedziesz potrzebowal wiecej pomocy to wal

Ten post edytował calebos 21.10.2008, 09:56:44
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(calebos @ 21.10.2008, 10:45:58 ) *
To mozesz utworzyc sobie indeksy na wielu kolumnach. Przeczytaj dokumentacje bo one dzialaja w momencie kiedy pytasz o 3 kolumny a jak juz zapytasz o 1 to ten indeks nie dziala (jakos tak).

Nie zgodzę się. Prawda jest taka, że pierwsza kolumna z indexu wielokolumnowego determinuje użycie danego indeksu. Jeżeli natomiast w warunku zostanie użyta np. druga kolumna to indeks również będzie pomocny ale jego "skuteczność" będzie niższa niż rozpoczęcie listy warunków od pierwszej kolumny indeksu. Nie można jednak powiedzieć, że indeks w ogóle nie zostanie użyty.
Go to the top of the page
+Quote Post
calebos
post
Post #4





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 22.02.2008

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


Cytat(phpion @ 21.10.2008, 17:56:32 ) *
Nie zgodzę się. Prawda jest taka, że pierwsza kolumna z indexu wielokolumnowego determinuje użycie danego indeksu. Jeżeli natomiast w warunku zostanie użyta np. druga kolumna to indeks również będzie pomocny ale jego "skuteczność" będzie niższa niż rozpoczęcie listy warunków od pierwszej kolumny indeksu. Nie można jednak powiedzieć, że indeks w ogóle nie zostanie użyty.


Tez nie do konca piszesz prawde. Chodzi o roznice w zasadzie dzialania indeksu. W przypadku Postgre i uzyciu B-tree ten indeks zostanie uzyty tak jak napisales ale przy uzyciu gist juz jest uwarunkowany uzyciem pierwszej kolumny w warunkach.
MySQL tez nie uzyje indeksu przy uzyciu tylko 2 kolumny z indeksu musi miec pierwsza.
Go to the top of the page
+Quote Post

Posty w temacie
- dado   [PostgreSQL] Czy Postgre da radę   15.10.2008, 08:23:43
- - Sedziwoj   "dane w kolumnach nie są unikalne" To na...   18.10.2008, 11:09:55
- - dado   no właśnie to jest dziwne że tam gdzie ma być prim...   20.10.2008, 08:16:35
- - wookieb   Cytat(dado @ 20.10.2008, 09:16:35 ) M...   20.10.2008, 08:34:35
- - dado   Może to głupie pytanie sprawdzić czy zrobione inde...   20.10.2008, 11:57:58
- - calebos   Sprawdzanie co robi zapytanie: [SQL] pobierz, pla...   21.10.2008, 09:45:58
|- - phpion   Cytat(calebos @ 21.10.2008, 10:45:58 ...   21.10.2008, 16:56:32
|- - calebos   Cytat(phpion @ 21.10.2008, 17:56:32 )...   21.10.2008, 18:28:25
- - dado   Hej no witam zioma Znalazłem sposób na ograniczen...   21.10.2008, 11:38:40
- - Sedziwoj   Z tego zapytania co pisałeś wynika (nie wnikam w j...   21.10.2008, 14:26:34
- - bigZbig   Po pierwsze nie bój się sztucznego primary key czy...   21.10.2008, 18:02:55
- - Sedziwoj   @calebos Pierwsza, druga? a gdzie optymalizator, c...   21.10.2008, 22:48:48
- - calebos   Sedziwoj, Jak dasz indeks na 2 kolumnach ( nie bt...   23.10.2008, 14:37:15
- - Sedziwoj   @calebos Dlatego jak występuje czasem tylko druga ...   24.10.2008, 10:00:45
- - dado   Dzięki za cenne informacje W dokumentacji mam nap...   28.10.2008, 09:36:00
- - Sedziwoj   [SQL] pobierz, plaintext SELECT artnr, sortnr, lfd...   28.10.2008, 10:02:48
- - dado   Dzięki zaraz zapuszczę Udało mi się zrobić index...   28.10.2008, 10:21:10
- - Sedziwoj   Daj potem znać które rady okazały się skuteczne. ...   28.10.2008, 16:35:32
- - dado   Cały czas się z tym męcze ale mam już spore postęp...   5.11.2008, 13:47:27
- - Skobi   [SQL] pobierz, plaintext SELECT a.ArtNr, a.DLNr, a...   5.11.2008, 14:57:42
- - Sedziwoj   Popieram Skobi co do typów kolumn, jak są tylko li...   6.11.2008, 13:32:52
- - Skobi   Co do usuwania Joinow to się z tym nie mogę zgodzi...   6.11.2008, 14:01:26
- - Sedziwoj   @Skobi Proste pytanie, ile razy zajmowałeś się baz...   6.11.2008, 15:37:35
- - Skobi   nie mam zamiaru wchodzić z Tobą w polemikę, bo wyd...   6.11.2008, 20:54:33
- - Sedziwoj   Tylko nie bierzesz jednej bardzo ważnej rzeczy pod...   7.11.2008, 07:40:13
- - Skobi   Biorę pod uwagę to iż w bankach stoją dziesiątki s...   7.11.2008, 09:35:17
- - dado   zamiast left zostawiłem samo join i rzeczywiście w...   28.11.2008, 15:08:21


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

 



RSS Aktualny czas: 4.10.2025 - 07:09