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
|
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
|
|
Szukanie oprogramowania
|