LINUXSOFT.cz
Nazwa użytkownika: Hasło:     
    CZ UK PL

> Komentarze :: článek PostgreSQL (21) - Spojování dotazů

Odlehčení 19.5.2006 23:49
Lukáš Zapletal

Příliš jsem nepochopil, v čem že spočívá to odlehčení pro server. Buď si výsledky naskládá/vyhází programátor v aplikaci, nebo to za něj udělá databázový server. UNION a spol jsou obyčejné množinové operace sjednocení (resp. průnik a podobně) - server je musí zkrátka "ručně" provést tak jako tak (v paměti nebo na disku - podle počtu dat - za použití indexové strategie pochopitelně).

Odlehčení by mohlo nastat za situace, kdy by to programátor dělal původně s pomocí dočasných tabulek, což je zvyk ze serveru MySQL, který v ranných verzích neposkytoval jinou možnost. Tohle je ovšem standardizovaná záležitost, kterou Postgres umí dlouho.

Hezký seriál, dneska večer jsem si ho prošel. Jen tak dál!

Re: Odlehčení 22.5.2006 09:50
MaReK Olšavský

To je jednoduchý, řada lidí, zejména z řad začátečníků, má tendenci tohle řešit byť na serveru, ale ve svých scriptech, ať už se jedná o PHP, nebo Python. Nevím, nakolik se věnujete programování, ale i v kompilovaných jazycích mi vychází takovéto operace rychleji na serveru, než na aplikační úrovni, třeba už jen režie, kdy pošlu sekvenci dotazů a server musí každý analyzovat, vykonat, zpracovat výsledky a Ty mi vrátit.

Než jsem se dostal k PostgreSQL a FirebirdSQL, tak jsem taky všechno řešil na straně aplikace, nevěřil jsem, že stored procedury mohou být rychlejší, než sestavit složitý dotaz na straně aplikace, který pak předám a vezmu si zpět data. Pro zatím neobeznámené lidi z řad čtenářů, ta stored procedura je zanalyzovaná a server ví, které indexy bude používat a jaké hodnoty bude vracet, že jí předám data, která zafiltrují výstup, nebo jsou předlohou ke zpracování je bombónek.

Re: Odlehčení 23.5.2006 15:42
Lukáš Zapletal

No to je jasný, ale v čem je to odlehčení pro server?Jako že to uživatel nebude hloupě psát postupně? Tak to potom jo :-) Je samozřejmě neefektivní to dělat v aplikaci, výhodnější je využít prostředky relační algebry a vykonat to na serveru.

Programování se věnuju teoreticky i prakticky :-D Databázím zejména... PostgreSQL je fajn.

Re: Odlehčení 1.6.2006 19:18
sirt2
Vždyť už Ti to napsal, zkusím Ti to tedy napsat trochu jinak (tzv. "pro Kopyta" :-)):

Otázka:
Co se děje, když se dotážeš DB serveru na data (=pošleš serveru SQL-dotaz -tedy PLAIN(=prostý) TEXT) ?

Odpověď:
Server musí nejdříve navázat komunikaci (to je patrně ta část, která zdržuje nejvíc), rozlouskat (=rozložit) ten textový řetězec a udělat si z toho nějakou datovou strukturu - prostě provádí nějaké INICIALIZACE, pak provede specifikované akce a nějakou formou klientovi (=Tobě) vrátí výsledek.

Když chceš tedy vyzvědět CO NEJRYCHLEJI nějaká data z DB serveru, tak je dobré (mimo jiné) spojit více dotazů do jednoho (SQL)-např.pomocí UNIONu, protože ušetříš právě to výše zmíněné NAVÁZÁNÍ KOMUNIKACE a něco z INICIALIZACÍ.

Tedy jeden "UNIONOVANÝ" SQL-dotaz je rychlejší než kdybys ty dotazy pokládal sériově za sebou.

Tolik tedy "PRO UNION".
Nyní začíná sekce "PROTI UNIONU" :-) :

Ovšem jiná věc je, když Ti na rychlosti zase až tak nezáleží. Pak to prostě napiš SÉRIOVĚ -je to přehlednější než UNION. A až bude později někdo Tvůj kód měnit, tak je menší pravděpodobnost, že do kódu zanese nějakou chybu (UNIONy jsou prostě složitější a většinou není čas je odlaďovat - je to zbytečná práce navíc).
Re: Odlehčení 1.6.2006 20:02
Aleš Hakl

Latence s navazanim komunikace pada na cele spojeni se serverem. Z tohoto pohledu je tedy naprosto jedno, jestli v jednom spojeni udelate dva dotazy, nebo jeden, ktery bude slozenim techto dvou. Union ma smysl opravdu jen tehdy, pokud chceme jako vystup ten union. Snazit se tim o nejake optimalizace je pravdepodobne naprosty nesmysl.

A pro ty vase uvahy o rychlosti bych docela rad videl nejake platne argumenty, vysledky mereni, ci citace vasich zdroju.

Re: Odlehčení 2.6.2006 08:36
Petr Zajíc

Teda já zírám... souhlasím samozřejmě s Alešem. UNION je prostředek pro získání specifické množiny dat (sjednocení). Nemá nic společného s optimalizací. V situaci, kdy chceme ušetřit něco času při provádění dotazu nám mohou posloužit uložené procedury. Ty šetří čas tím, že server je předem "zná" a má "rozmyšleno", jak je nejrychleji obsloužit. To díky celkem sofistikovanému mechanismu nazvanému prováděcí plán.

vyhladavanie cez string bez diakritiky 23.5.2006 12:58
blindmen

Chcel by som sa spytat ako sa riesi vyhladavanie cez varchar ak chcem potlacit diakritiku.
Uzivatel zada :
číča a chcem aby sa to pretransformovalo na cica a teda potom aj vsetky zaznami pri search by sa transformovali.

nieco ako select xxx from clovek where nejaka_funkcia(xxx) like nejaka_funkcia(yyy).

Databazove kodovanie mam ako UTF8

a funkcia to_ascii() mi hodi unsupported encoding
a convert('xxx','UTF8','ASCII') mi pismena s diakritikou prelozi ako znaky v zatvorkach teda napr :
číča prelozi ako : (a1)(e8)(a2)(d3)(a1)(e8)(a2)a
co nie jo to hladam ;)

Dik za pomoc

Re: vyhladavanie cez string bez diakritiky 23.5.2006 15:47
Lukáš Zapletal

To je jednoduche - musite ta data orezat uz ve chvili, kdy je tam vkladate. Nevim o zadnem indexu, ktery by byl schopen odstranovat diakritiku. Pak staci diakritiku odstranit i v dotazu.

Pokud se diakritiky nechcete vzdat, tak doporucuji vytvorit si novy sloupec, ktery bude obsahovat tytez informace, jen bez diakritiky. Bude slouzit jen ke hledani. Bude to poruseni 3. normalni formy, ale v tomto pripade je poruseni na miste (NF neni dogma).

A nebo vyuzijte fulltextovy modul TSearch2. O fulltextovem vyhledavani v Postgresu 8.X by mel vyjit tento tyden na serveru LinuxEXPRES.cz muj clanek. To by bylo asi nejidealnejsi reseni, protoze s timto modulem muzete delat dokonce (ceskou!) lematizaci slov (diky ispellu).

Re: vyhladavanie cez string bez diakritiky 23.5.2006 17:00
blindmen

Dik moc ;)
pockam si na ten clanok a potom sa rozhodnem ;). Z hladiska performance by bolo asi lepsie vytvorit samostatny stlpec vsak ?

Re: vyhladavanie cez string bez diakritiky 24.5.2006 07:19
Petr Zajíc

Určitě. Sice bude více dat v DB, ale to hledání pak bude mnohem rychlejší. Ten stlpec se totiž dá naindexovat.

Re: vyhladavanie cez string bez diakritiky 24.5.2006 18:53
Lukáš Zapletal

No fulltext je rychlejsi nez like, takze spis ten fulltext...

Re: vyhladavanie cez string bez diakritiky 11.10.2006 10:21
Tomk

Múžete prosím uvést url nebo název článku ? Nenašel jsem ho


KOMENTARZE
Odlehčení 19.5.2006 23:49 Lukáš Zapletal
L Re: Odlehčení 22.5.2006 09:50 MaReK Olšavský
  L Re: Odlehčení 23.5.2006 15:42 Lukáš Zapletal
    L Re: Odlehčení 1.6.2006 19:18 sirt2
      L Re: Odlehčení 1.6.2006 20:02 Aleš Hakl
        L Re: Odlehčení 2.6.2006 08:36 Petr Zajíc
vyhladavanie cez string bez diakritiky 23.5.2006 12:58 blindmen
  L Re: vyhladavanie cez string bez diakritiky 23.5.2006 15:47 Lukáš Zapletal
    |- Re: vyhladavanie cez string bez diakritiky 23.5.2006 17:00 blindmen
    | |- Re: vyhladavanie cez string bez diakritiky 24.5.2006 07:19 Petr Zajíc
    | L Re: vyhladavanie cez string bez diakritiky 24.5.2006 18:53 Lukáš Zapletal
    L Re: vyhladavanie cez string bez diakritiky 11.10.2006 10:21 Tomk
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
> Szukanie oprogramowania
1. Pacman linux
Download: 4780x
2. FreeBSD
Download: 8967x
3. PCLinuxOS-2010
Download: 8472x
4. alcolix
Download: 10766x
5. Onebase Linux
Download: 9550x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6119x

1. xinetd
Download: 2317x
2. RDGS
Download: 937x
3. spkg
Download: 4521x
4. LinPacker
Download: 9765x
5. VFU File Manager
Download: 3100x
6. LeftHand Mała Księgowość
Download: 6966x
7. MISU pyFotoResize
Download: 2686x
8. Lefthand CRM
Download: 3472x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 2977x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz