Volltextsuche/ Balancing

Hallo

Ich bin derzeit daran eine Website zu bauen wo die Leute miteinandern
Nachrichten austauschen können. Es gibt eine Hauptnachrichtentabelle
und User sowie User Detail Tabellen. Die Nachrichtentabelle kann ich
irgendwie nicht sinnvoll splitten und hier ist auch die höchste Aktivit=
ät
zu verzeichnen.

Für den Userinfo Teil möchte ich jetzt eine Volltextsuche anbieten, d=
ie
aber so optimiert wie möglich ablaufen soll, sprich es soll keine tause=
nd
dropdowns geben sondern eher so etwas in de Stil von Google, wo man
allerdings einschränken kann in welche Bereichen des Profils man suchen=

soll.

Eine der Optionen ist, das man in seinen eigenen Nachrichten, die wiederu=
n
in der Hauptnachrichtentabelle gespeichert sind, auch durchsuchen kann.

Bisher dachte ich da an Unions aber irgendwie sind die jetzt schon ziemli=
ch
zeitraubend, daher suche ich nach einer "schnellen" alternative. Wie gesa=
gt
100 Häkchenfelder zum abhalen will ich echt niemanden zumuten weil das
schon auf so endloß vielen Seiten der Fall ist.

Meine =DCberlegung ist nun:

Wie kann ich die Hauptnachrichtentabelle besser vor Massenansturm
präparieren?
(kann man eventuell einer Tabelle einen gesonderten Tablespace zuordnen?)

Wie gestalte ich unter Postgres 8.1 eine Volltextsuche die nach
beliebigen Strings
suchen soll (z.B mit iLike) ?

Dabei fällt mir ein das DB/2 von IBM und ORACLE ein Feature haben das s=
ich
Partitioning nennt und genau dieses Problem behandelt, allerdings zu
Preisen von 20.000 EUR aufwärts und das wars nicht was ich im Sinn hatt=
e.

Grüßle Marc

=09

=09
=09
___________________________________________________________= 20
Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq
apoc9009 [ Fr, 09 Dezember 2005 12:36 ] [ ID #1095335 ]

Re: Volltextsuche/ Balancing

am 09.12.2005, um 12:36:40 +0100 mailte apoc9009 [at] yahoo.de folgendes:
^^^^^^^^^^^^^^^^^

Viele kennen sich hier mittlerweile schon fast persönlich, zumindest
wird es aber gern gesehen, wenn man zumindest den Namen kennt.
Vielleicht denkst Du da mal drüber nach.


> Meine =DCberlegung ist nun:
>
> Wie kann ich die Hauptnachrichtentabelle besser vor Massenansturm
> präparieren?
> (kann man eventuell einer Tabelle einen gesonderten Tablespace zuordnen=
?)

Ja, das geht ab 8.0 (oder 8.1?)


> Wie gestalte ich unter Postgres 8.1 eine Volltextsuche die nach beliebi=
gen
> Strings
> suchen soll (z.B mit iLike) ?

Du kannst zwar die Spalte indizieren für schnelleren Zugriff, allerding
wird eine Suche nach '*foobar*' einen Seq-Scan bewirken. Indexe greifen
nur, wenn der Suchstring linksbündig ist, also links keine Wildcards
stehen.

Abhilfe: tsearch2

12:49 < akretschmer> ??tsearch2
12:49 < rtfm_please> For information about tsearch2
12:49 < rtfm_please> see http://www.devx.com/opensource/Article/21674/0/p=
age/3
12:49 < rtfm_please> or http://www.sai.msu.su/~megera/postgres/gist/tsear=
ch/V2/

Schau Dir mal die Links an. Ich kenne tsearch2 nicht (brauch es nicht),
aber Gerüchte besagen, das dies die Suche um ca. Faktor 100
beschleunigt.


Ansonsten: Um Schwachstellen bzw. Performance-Probleme zu finden, gibt
es EXPLAIN, evtl. gepaart mit ANALYSE.


Andreas
--
Andreas Kretschmer (Kontakt: siehe Header)
Heynitz: 035242/47212, D1: 0160/7141639
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
=3D=3D=3D Schollglas Unternehmensgruppe =3D=3D=3D

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
andreas.kretschmer [ Fr, 09 Dezember 2005 12:52 ] [ ID #1095336 ]

Re: Volltextsuche/ Balancing

>>Meine =DCberlegung ist nun:
>>
>>Wie kann ich die Hauptnachrichtentabelle besser vor Massenansturm
>>präparieren?
>>(kann man eventuell einer Tabelle einen gesonderten Tablespace zuordnen=
?)
>>
>>
>
>Ja, das geht ab 8.0 (oder 8.1?)
>
>

=C4hm, ich fragte danach ob ich Tabellen in einen gesonderten Tabelspace
auslagern kann und nicht
danach das ich beim erstellen einer DB einen kompletten Tablespace für
alle Tabellen einmalig an einer
bestimmten Position im Dateisystem hinterlegen kann.

Der Sinn und Zweck ist es, das nur die eine Tabelle
(Nachrichtentabelle) dann in einem Tablespace verwaltet
wird, der auf ein gesondertes Festplattenlaufwerk oder Raid verzweigt.
Das ist wie gesagt nicht das selbe
wie die ganze DB dort zu hinterlegen. Bei ORACLE 9i und 10g ist sowas
recht unproblematisch, da kann
man dann auch noch alternativ Tabelpartintioning zuschalten (falls Dir
das was sagt).

Ich hoffe das dazu jemand anderes hier (mit mehr Erfahrung) noch etwas
erklärendes und hilfreiches
posten kann.

>>Wie gestalte ich unter Postgres 8.1 eine Volltextsuche die nach beliebi=
gen
>>Strings
>>suchen soll (z.B mit iLike) ?
>>
>>
>
>Du kannst zwar die Spalte indizieren für schnelleren Zugriff, allerdin=
g
>wird eine Suche nach '*foobar*' einen Seq-Scan bewirken. Indexe greifen
>nur, wenn der Suchstring linksbündig ist, also links keine Wildcards
>stehen.
>
>

Wie soll man denn das nun wieder verstehen?

Soll der Spalteninhalt einer Tabelle links ohne Blanks u.s.w angeordnent
sein? Wenn ja würde
ich sowas schon hinbekommen und eigentlich finde ich, dass das auch die
normale Ausganglage
ist (bin jetzt etwas verwirrt / weißt Du was Du da geschrieben hast?)

>Abhilfe: tsearch2
>
>12:49 < akretschmer> ??tsearch2
>12:49 < rtfm_please> For information about tsearch2
>12:49 < rtfm_please> see http://www.devx.com/opensource/Article/21674/0/=
page/3
>12:49 < rtfm_please> or http://www.sai.msu.su/~megera/postgres/gist/tsea=
rch/V2/
>
>Schau Dir mal die Links an. Ich kenne tsearch2 nicht (brauch es nicht),
>aber Gerüchte besagen, das dies die Suche um ca. Faktor 100
>beschleunigt.
>
>

"Gerüchte" Naja ok ich schaue es mir mal an, kann nicht schaden.

>Ansonsten: Um Schwachstellen bzw. Performance-Probleme zu finden, gibt
>es EXPLAIN, evtl. gepaart mit ANALYSE.
>
>
bringt mir nicht sonderlich viel wenn eine Tabellenspalte komplett
durchsucht werden muss.
(es sollen ja alle Treffer zurückgelifert werden).


Marc

=09

=09
=09
___________________________________________________________= 20
Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings
apoc9009 [ Fr, 09 Dezember 2005 13:12 ] [ ID #1095337 ]

Re: Volltextsuche/ Balancing

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Marc

apoc9009 [at] yahoo.de wrote:
>
> Der Sinn und Zweck ist es, das nur die eine Tabelle
> (Nachrichtentabelle) dann in einem Tablespace verwaltet
> wird, der auf ein gesondertes Festplattenlaufwerk oder Raid verzweigt.
> Das ist wie gesagt nicht das selbe
> wie die ganze DB dort zu hinterlegen. Bei ORACLE 9i und 10g ist sowas
> recht unproblematisch, da kann
> man dann auch noch alternativ Tabelpartintioning zuschalten

PostgreSQL 8.1 unterstuetzt eine eingeschraenkte Partitionierungs-Option
mittels Vererbung und Constraint Exclusion. Details siehe hier:
http://www.postgresql.org/docs/8.1/interactive/ddl-partition ing.html
http://www.postgresql.org/docs/8.1/interactive/runtime-confi g-query.html#GUC-CONSTRAINT-EXCLUSION

Beste Gruesse,
Jutta
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFDmXorjowk+u8uwgERAhwRAJ4wPsdDAxnbxF7rp9kkCUqdOQ/VawCg zGhW
bUMWf0C16gllSZiD5w3Dlws=
=x26O
-----END PGP SIGNATURE-----

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo [at] postgresql.org so that your
message can get through to the mailing list cleanly
Jutta Horstmann [ Fr, 09 Dezember 2005 13:35 ] [ ID #1095338 ]

Re: Volltextsuche/ Balancing

apoc9009 [at] yahoo.de <apoc9009 [at] yahoo.de> schrieb:

>
> >>Meine =DCberlegung ist nun:
> >>Wie kann ich die Hauptnachrichtentabelle besser vor Massenansturm
> >>präparieren?
> >>(kann man eventuell einer Tabelle einen gesonderten Tablespace zuordn=
en?)
> >>
> >Ja, das geht ab 8.0 (oder 8.1?)
> >
>
> =C4hm, ich fragte danach ob ich Tabellen in einen gesonderten Tabelspac=
e
> auslagern kann und nicht
> danach das ich beim erstellen einer DB einen kompletten Tablespace fü=
r alle
> Tabellen einmalig an einer
> bestimmten Position im Dateisystem hinterlegen kann.

Wie wäre es einklich, nun mal die Doku zu lesen? Du wirst dort zwar
nicht Deinen Namen finden, aber Antwort auf Deine Frage.


> Der Sinn und Zweck ist es, das nur die eine Tabelle (Nachrichtentabell=
e)
> dann in einem Tablespace verwaltet
> wird, der auf ein gesondertes Festplattenlaufwerk oder Raid verzweigt. =
Das
> ist wie gesagt nicht das selbe

tell news, please.


> wie die ganze DB dort zu hinterlegen. Bei ORACLE 9i und 10g ist sowas r=
echt
> unproblematisch, da kann

Niemand hindert Dich, ORA zu nehmen. Es gibt mittlerweile sogar die 10er
zum freien Einsatz (mit Limitierungen, ja).


> man dann auch noch alternativ Tabelpartintioning zuschalten (falls Dir =
das
> was sagt).

Ja.


> Ich hoffe das dazu jemand anderes hier (mit mehr Erfahrung) noch etwas
> erklärendes und hilfreiches
> posten kann.

Ich drück Dir *ganz fest* die Daumen ;-)


> >Du kannst zwar die Spalte indizieren für schnelleren Zugriff, allerd=
ing
> >wird eine Suche nach '*foobar*' einen Seq-Scan bewirken. Indexe greife=
n
> >nur, wenn der Suchstring linksbündig ist, also links keine Wildcards
> >stehen.
> >
>
> Wie soll man denn das nun wieder verstehen?

Steht in der Doku.


> >http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/
> >Schau Dir mal die Links an. Ich kenne tsearch2 nicht (brauch es nicht)=
,
> >aber Gerüchte besagen, das dies die Suche um ca. Faktor 100
> >beschleunigt.
> >
>
> "Gerüchte" Naja ok ich schaue es mir mal an, kann nicht schaden.

ACK.


> >Ansonsten: Um Schwachstellen bzw. Performance-Probleme zu finden, gibt
> >es EXPLAIN, evtl. gepaart mit ANALYSE.
> >
> bringt mir nicht sonderlich viel wenn eine Tabellenspalte komplett
> durchsucht werden muss.
> (es sollen ja alle Treffer zurückgelifert werden).

[ ] Du hast den tieferen Sinn von Indexen verstanden.



Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
Kaufbach, Saxony, Germany, Europe. N 51.05082=B0, E 13.56889=
=B0

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster
Andreas Kretschmer [ Fr, 09 Dezember 2005 13:38 ] [ ID #1095339 ]

Re: Volltextsuche/ Balancing

--On Freitag, Dezember 09, 2005 13:12:51 +0100 apoc9009 [at] yahoo.de wrote:

>>
>> Ja, das geht ab 8.0 (oder 8.1?)
>>
>>
>
> =C4hm, ich fragte danach ob ich Tabellen in einen gesonderten Tabelspace
> auslagern kann und nicht
> danach das ich beim erstellen einer DB einen kompletten Tablespace für
> alle Tabellen einmalig an einer
> bestimmten Position im Dateisystem hinterlegen kann.
>

Hmm genau das hat doch Andreas beantwortet? Kurzum, es geht:

CREATE TABLESPACE tablespace LOCATION '/anywhere';
CREATE TABLE <yourstuff> TABLESPACE tablespace;

> Der Sinn und Zweck ist es, das nur die eine Tabelle (Nachrichtentabelle)
> dann in einem Tablespace verwaltet
> wird, der auf ein gesondertes Festplattenlaufwerk oder Raid verzweigt.
> Das ist wie gesagt nicht das selbe
> wie die ganze DB dort zu hinterlegen. Bei ORACLE 9i und 10g ist sowas
> recht unproblematisch, da kann
> man dann auch noch alternativ Tabelpartintioning zuschalten (falls Dir
> das was sagt).
>

Du kannst dir unter 8.1 mal Constraint-Exclusion ansehen:

http://www.postgresql.org/docs/8.1/static/ddl-partitioning.h tml

Generell wäre es interessant zu wissen, mit welchem Datenaufkommen du
rechnest?

> Ich hoffe das dazu jemand anderes hier (mit mehr Erfahrung) noch etwas
> erklärendes und hilfreiches
> posten kann.
>

Ich denke Andreas hat genügend Erfahrung...

>>> Wie gestalte ich unter Postgres 8.1 eine Volltextsuche die nach
>>> beliebigen Strings
>>> suchen soll (z.B mit iLike) ?
>>>
>>>
>>
>> Du kannst zwar die Spalte indizieren für schnelleren Zugriff, allerding
>> wird eine Suche nach '*foobar*' einen Seq-Scan bewirken. Indexe greifen
>> nur, wenn der Suchstring linksbündig ist, also links keine Wildcards
>> stehen.
>>
>>
>
> Wie soll man denn das nun wieder verstehen?
>
> Soll der Spalteninhalt einer Tabelle links ohne Blanks u.s.w angeordnent
> sein? Wenn ja würde
> ich sowas schon hinbekommen und eigentlich finde ich, dass das auch die
> normale Ausganglage
> ist (bin jetzt etwas verwirrt / weißt Du was Du da geschrieben hast?)
>

Ganz einfach: SELECT foo_text FROM foo WHERE foo_text LIKE '%text%'; wird=

einen Sequential Scan verwenden, auch wenn ein Index auf foo_text existiert.

>> Abhilfe: tsearch2

Wenn du nach ganzen Worten innerhalb größerer Textspalten suchen willst=
,
ist das sicherlich die erste Wahl.

>
> "Gerüchte" Naja ok ich schaue es mir mal an, kann nicht schaden.
>
>> Ansonsten: Um Schwachstellen bzw. Performance-Probleme zu finden, gibt
>> es EXPLAIN, evtl. gepaart mit ANALYSE.
>>
>>
> bringt mir nicht sonderlich viel wenn eine Tabellenspalte komplett
> durchsucht werden muss.
> (es sollen ja alle Treffer zurückgelifert werden).
>

Das versteh ich nun wieder nicht...bedeutet dass, das du alle Tupel
selektierst, ohne WHERE-clause bzw. ohne Indizierung?



--
Thanks

Bernd


---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo [at] postgresql.org so that your
message can get through to the mailing list cleanly
Bernd Helmle [ Fr, 09 Dezember 2005 13:52 ] [ ID #1095340 ]
Datenbanken » gmane.comp.db.postgresql.german » Volltextsuche/ Balancing

Vorheriges Thema: Grundsatzproblem
Nächstes Thema: postgreSQL tunen