|
shyha
|
 |
« Odpowiedz #15 : Sierpień 24, 2006, 15:28:01 » |
|
a może to być kwestia szybkości odczytu dysku?
Ten parametr jest jednym z najbardziej kluczowych Dodam tylko, że nie jestem ekspertem w tuningu baz danych 
|
|
|
|
|
Zapisane
|
Shyha@Flickr'Of all the paths you choose in life, make sure some of them are dirt'
|
|
|
|
bies
Gość
|
 |
« Odpowiedz #16 : Sierpień 24, 2006, 15:48:03 » |
|
Załóżmy, że struktura jest taka jak podał Shyha. Załóżmy, że jedyny indeks jest na polu ,,slowo''. Spróbuj tak: Select id_dok, slowo from indeks where slowo in (slowo_1, ..., slowo_n) order by id_dok
A następnie przejdź kursorem (albo po stronie bazy - PostreSQL ma jakiś odpowiednik PLSQL-a, albo po stronie aplikacji) i wybierz tylko te id o odpowiedniej liczności. // edit Aha, IMO wyszukiwanie dokumentów po słowach kluczowych to zdecydowanie nie domena relacyjnej bazy danych - tu bardziej przydaje się struktura drzewa (grafu). Może użyj jakiejś dedykowanej biblioteki (np. Lucene).
|
|
|
|
« Ostatnia zmiana: Sierpień 24, 2006, 15:50:03 wysłane przez bies »
|
Zapisane
|
|
|
|
|
Goliatus
|
 |
« Odpowiedz #17 : Sierpień 24, 2006, 15:57:08 » |
|
Jeśli jedyny indeks jest na "słowo" to sortowanie po id_dok również da zły efekt. Aha, IMO wyszukiwanie dokumentów po słowach kluczowych to zdecydowanie nie domena relacyjnej bazy danych - tu bardziej przydaje się struktura drzewa (grafu). Może użyj jakiejś dedykowanej biblioteki (np. Lucene). No tak ale to nie tylko przeszukiwanie tekstu, ale również przeszukiwanie obiektów o różnych parametrach. Zamiast robić 100 tabel dla każdej kategorii obiektów, zrobiłem jedną: (id_obiekt, id_typ_parametru, wartosc) Nie wiem czy to wlasciwy sposob uzywania baz danych, ale uproscilo to wiele spraw.
|
|
|
|
|
Zapisane
|
|
|
|
|
shyha
|
 |
« Odpowiedz #18 : Sierpień 24, 2006, 15:59:33 » |
|
Jeśli jedyny indeks jest na "słowo" to sortowanie po id_dok również da zły efekt. Nie - po prostu odfiltruje przy użyciu indeksu. Bies dał ci rozwiązanie, w którym wyznaczenie liczności rekordów i filtrowanie po niej zrzucone są na twoje barki  // edit: aaaaaaaaaaaaa inne pola  myślałem, że chodzi o to samo 
|
|
|
|
« Ostatnia zmiana: Sierpień 24, 2006, 22:15:57 wysłane przez shyha »
|
Zapisane
|
Shyha@Flickr'Of all the paths you choose in life, make sure some of them are dirt'
|
|
|
|
Goliatus
|
 |
« Odpowiedz #19 : Sierpień 24, 2006, 16:07:05 » |
|
No ale jaka gwarancja, że to sortowanie bez używania jakiegoś indeksu nie zamuli?
|
|
|
|
|
Zapisane
|
|
|
|
|
bies
Gość
|
 |
« Odpowiedz #20 : Sierpień 24, 2006, 16:15:41 » |
|
Jeśli jedyny indeks jest na "słowo" to sortowanie po id_dok również da zły efekt.
Tak, mea culpa, indeks na id_dok też się pewnie przyda. Czyli potrzebne będą raczej dwa indeksy. Poza tym, sprawdź. ;P // edit Może warto nawet zrobić CLUSTER (tj. robić co jakiś czas) po tym indeksie.
|
|
|
|
« Ostatnia zmiana: Sierpień 24, 2006, 16:19:40 wysłane przez bies »
|
Zapisane
|
|
|
|
|
Goliatus
|
 |
« Odpowiedz #21 : Sierpień 24, 2006, 16:17:39 » |
|
no sprawdziłem działa dobrze(filtrowanie we własnym zakresie pozwoli na pokazywanie wyników na bieżąco, o co w sumie mi chodziło), indeks na id_dok jest, ale nie jest używany
|
|
|
|
|
Zapisane
|
|
|
|
|
bies
Gość
|
 |
« Odpowiedz #22 : Sierpień 24, 2006, 16:26:27 » |
|
Ok, jeśli miałbyś trochę czasu to spróbuj zrobić to tak. 1) Stwórz dwie tabele, jedną fizycznie posortowaną (cluster), drugą bez indeksu (skoro działa dobrze - trochę się zdziwiłem, spodziewałem się raczej, że indeks będzie pomocny). 2) Bieżące dane wpisuj do drugiej. 3) W ,,trybie nocnego przetwarzania'' przerzucaj dane z drugiej do pierwszej i znowu cluster. 4) Wyszukuj w obu w ten sam sposób a w programie imperatywnym przejdź dwoma kroczącymi kursorami - b. prosty i szybki algorytm.
// edit A w ogóle zobacz ,,Notes'' w dokumentacji do CLUSTER - tam jest ciekawy mechanizm który może w ogóle wyeliminować sortowanie z pierwszej tabeli.
|
|
|
|
« Ostatnia zmiana: Sierpień 24, 2006, 16:32:31 wysłane przez bies »
|
Zapisane
|
|
|
|
|
Reg
|
 |
« Odpowiedz #23 : Sierpień 27, 2006, 20:55:34 » |
|
Skoro to ma być wyszukiwanie słów kluczowych, to nie myślałeś może, żeby spróbować indeksów pełnotekstowych?
|
|
|
|
|
Zapisane
|
|
|
|
|
Goliatus
|
 |
« Odpowiedz #24 : Wrzesień 01, 2006, 15:33:36 » |
|
Poczytałem troche o tsearch2, że ludzie mają z tym wydajnościowe problemy, a że nie dysponuje super sprzętem to wolę nie ryzykować i sklecic samemu coś prostszego.
|
|
|
|
|
Zapisane
|
|
|
|
|
JCoder
|
 |
« Odpowiedz #25 : Kwiecień 22, 2008, 13:55:11 » |
|
Przekombinowujecie  CLUSTER tabela_idx_b ON tabela_b; Powinno przyspieszyć o rząd wielkości.
|
|
|
|
|
Zapisane
|
Being really good at C++ is like being really good at using rocks to sharpen sticks. -- Thant Tessman
|
|
|
skowronkow
Jr. Member

wiadomości: 95
get it done
|
 |
« Odpowiedz #26 : Czerwiec 02, 2008, 17:00:41 » |
|
nie mowiac juz o tym ze jak napisal bies jest to typowe zastosowanie fulltext search... ale staruski temat;p
|
|
|
|
|
Zapisane
|
gid
|
|
|
|