Baza o której mowa powiększa się codziennie o kilka GB danych więc po roku jej wielkość może sięgnąć 1TB.
>90% powierzchni bazy zajmuje pole o nazwie "content".
Jest to pole statyczne, po którym nie będą prowadzone operacje wyszukiwania ani żadne inne (jedynie wyświetlanie tych danych).
Wyszukiwanie będzie tylko po kolumnie 'title' która zawiera maksymalnie 20 znaków.
Chciałem zapytać, jak organizować dane, żeby wyszukiwanie po tytule nie trwało eony.
1. Czy objętość kolumny 'content' ma jakiś wpływ na szybkość wyszukiwania po kolumnie 'title' ?
2. Czy przeniesienie kolumny 'content' do osobnej tabeli przyśpieszy wyszukiwanie po 'title' ?
3. Czy przeniesienie danych z kolumny 'content' do pliku na dysku przyśpieszy wyszukiwanie w porównaniu do pkt 1 i pkt 2 ?
1. nie
2. nie, raczej zwolni minimalnie bo będziesz musiał użyć drugigo indeksu do łączenia tabel wynikowych
3. nie
Jakiego typu wyszukiwanie? Coś w stylu REGEXP czy LIKE?
Przerabiałem podobny problem przy serwisie, w którym baza również bardzo szybko rosła zajmując -dziesiąt giga. Mogę zatem nieco Ci poradzić:
1. Utwórz kolumnę tsvector przechowującą dane do TSearch i załóż na niej indeks typu gist.
2. Jeśli wyszukiwanie odbywa się w jakiś zakresach czasowych to warto pomyśleć o partycjonowaniu tabeli (np. 1 miesiąc = 1 tabela).
3. Warto zapłacić za odpowiednią konfigurację samego Postgresa przez odpowiedniego fachowca.
4. Nie licz na cuda we wspominanym przeze mnie serwisie finalnie przeszliśmy na wyszukiwanie w tle i powiadamianiu mailowym o uzyskaniu wyniku
PS: Przenoszę do odpowiedniego działu.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)