Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Úvaha ohledně zneužívání LIKE v databázích

uživatel si přál zůstat v anonymitě
22. 4. 2009 1:13 Nový

Zbytecne dlouhe

celé vlákno
Myslim, ze tento clanek sel napsat do jednoho odstavce bez zbytecne omacky :)
funtomas aura:35
22. 4. 2009 8:19 Nový

Re: Zbytecne dlouhe

celé vlákno
Ne jen to, ale autor, dle svých slov profesionál, zřejmě nechápe plně význam operátoru LIKE a tento skvělý a výkonný operátor zatracuje kvůli jedné nevhodné implementaci.
MartinP
MartinP (neregistrovaný)
22. 4. 2009 10:34 Nový

Re: Zbytecne dlouhe

celé vlákno
1. autor je odbornik na postgresql
2. ano, existuji legalni pripady, kdy je vhodne pouzit like, ale neni jich mnoho
3. clanek je vyborny a diky za nej
Tomáš Vondra aura:86
24. 4. 2009 18:34 Nový

Re: Zbytecne dlouhe

celé vlákno
Tak o tom slově "výkonný" by se myslím dalo s úspěchem polemizovat ;-)

Ne že bych LIKE zatracoval, to rozhodně ne, ale je to jedna z prvních věcí které v aplikaci zkoumám pokud jsem povolán k nějakým výkonnostním problémům. Fulltextové vyhledávání implementované přes LIKE, to je celkem oblíbený zabiják výkonu.
daks
daks (neregistrovaný)
22. 4. 2009 9:06 Nový

Re: Zbytecne dlouhe

celé vlákno
Taky si myslím. Když někdo programuje prasácky, není to třeba stavět tak, že je problém v programovacím jazyku (asi je to nadsázka, ale s podobným přístupem se setkávám ve spoustě článků).
D.A.Tiger aura:65
22. 4. 2009 11:50 Nový

Re: Zbytecne dlouhe

celé vlákno
+1

Jj. Bohužel tak to je - a nejen u Databází. Většinou je mnohem jednoduší za chyby a nevhodný přístup, či návrch zatratit programovací jazyk a ne lidi, kteří to spáchali.
Ksl
Ksl (neregistrovaný)
22. 4. 2009 16:20 Nový

Re: Zbytecne dlouhe

celé vlákno
No zrovna v případě SQL je docela na místě prohlásit, že za spoustu věcí může jazyk. Nebýt SQL, mohli bychom dnes místo SQL databází mít *pravé* Coddovy relační databáze, třeba s nějakou tou implementací Industrial D (viz Chris Date).
abendak
abendak (neregistrovaný)
23. 4. 2009 7:32 Nový

Re: Zbytecne dlouhe

celé vlákno
Dobry den.
Pracujem ako profesionalny programator cez 12 rokov. S SQL asi 5 rokov (MySQL a ORACLE) aktivne, z toho 2 na ORACLE 9i.
Autor clanku urcite vie o com hovori. No aj to, co napisal, je zbytocne prehnane a kopmplikovane riesenie. Jednoznacne aj ja preferujem normalizaciu a jasne prepojene relacne vztahy na primarne indexy!
Ako tu uz napisal nejeden prispievatel, vela zalezi len na programatorovi ako navrhne databazu a potom ci chape vnutorne procesy, ktore sa v db deju, aby na zaklade toho mohol vytvarat optimalizovane prikazy.
No prikaz LIKE by som nezavrhoval v ziadnom pripade!
Ak si niekto vyfiltruje tabulku aj s x relaciami na niekolko desiatok alebo stoviek zaznamov a na ne aplikuje v klauzule WHERE prikaz LIKE, nevidim v tom ziadny problem.
Mimochodom tieto zalezitosti odporucam diskutovat s expertmi napr. p. Branislav Valny (z ORACLE) a jeho kolegovia.
db-man
db-man (neregistrovaný)
27. 4. 2009 15:34 Nový

Re: Zbytecne dlouhe

celé vlákno
jo, oraclisti jsou spicka, mohu potvrdit, ze jsem to uz take slysel od znameho, ktery sice nedela do databazi ale jeho manzelka pracuje ve firme, co taky nasazujou oracle a ta se bavila s jednim spoluzamestnancem a ten to taky potvrdil, ze jsou jako spicka.
Lael Ophir
Lael Ophir (neregistrovaný)
22. 4. 2009 2:00 Nový

i LIKE it

celé vlákno
Použití LIKE je v některých případech zcela v pořádku. Pokud potřebuji vyhledávat ve firemním telefonním seznamu, dotaz SELECT * FROM PEOPLE WHERE NAME LIKE 'NOVA%' je v pohodě. U normalizace samozřejmě naprostý souhlas.

Popsaný případ s příšerným návrhm DB bohužel není až tak výjimečný :(. Přitom k rozumnému návrhu DB člověk dojde i bez vzdělání nebo znalosti NF, chce to jen použít mozek.
marmax
marmax (neregistrovaný)
22. 4. 2009 13:52 Nový

Re: i LIKE it

celé vlákno
Ovsem zname i pripady, kdy je treba provest denormalizaci, ze?
jos
jos (neregistrovaný)
23. 4. 2009 13:55 Nový

Re: i LIKE it

celé vlákno
ve většině těch případů si vystačíme s pohledem, že?
Jarda
Jarda (neregistrovaný)
27. 4. 2009 21:21 Nový

Re: i LIKE it

celé vlákno
Cha cha cha, s pohledem, to jsem se pobavil.
Tomáš Vondra aura:86
27. 4. 2009 22:50 Nový

Re: i LIKE it

celé vlákno
A mohl byste být od té dobroty a vysvětlil nám proč? Copak vás na pohledech tak pobavilo?
NOT LIKE(AUTOR)
NOT LIKE(AUTOR) (neregistrovaný)
22. 4. 2009 2:10 Nový

Arogantní text bez komplexního přemýšlení

celé vlákno
Nebudu se vyjadřovat k obsahu, ale způsob napsání je dost arogantní a vyznívá že "já jsem správný programátor, podívejte se ostatní co jste za voly, uživatelé jsou taky pitomci, jen já vím, co je pro ně správné".

No, autore bez profilu; neoslnil jsi mne, zatím nedostatečná. Naučte se to ještě jednou a přijďte znovu ...
Pavel Stěhule aura:89
22. 4. 2009 2:21 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Pokud by se kodéři aspoň zamysleli, po přečtení článků, tak pak tento článek má smysl.
LENIN POWER! aura:41
22. 4. 2009 8:58 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
napiste taky clanek o tom ze lidi maji pouzivat transakce. Dost jich to totiz porad nedela.
Peter Helcmanovsky aura:64
22. 4. 2009 9:13 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Jsou mista, kde transakce potreba nejsou (ale dost lidi ani nerozumi tomu kde potreba jsou a kde ne), ale to je podruhe ve velmi kratke dobe co s vami temer souhlasim. Zajimave.
LENIN POWER! aura:41
22. 4. 2009 10:23 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
jak jsem ukazoval jinde. Bez transakci nemohou byt ani jednotlive SQL prikazy atomicke, coz vyzaduje norma.
Suchý čert aura:94
22. 4. 2009 11:07 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno

The other non-transactional storage engines in MySQL Server (such as MyISAM) follow a different paradigm for data integrity called “atomic operations.” In transactional terms, MyISAM tables effectively always operate in autocommit = 1 mode. Atomic operations often offer comparable integrity with higher performance.
(z dokumentace MySQL)

…tak nevím. :-)

Pavel Stěhule aura:89
22. 4. 2009 11:19 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Co si to vyzkoušet? Stačí delší update a v půli restart serveru. A pochybuji, že Vám "jiné paradigma" bude k něčemu :).
LENIN POWER! aura:41
22. 4. 2009 11:34 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
testnul jsem to. jednak to poskodilo tabulku musel jsem pustit ten repair, pak po nem nejake radky (asi 1000) dokonce z tabulky zmizely.

A presne jak jsem predpokladal pulka byla aktualizovana, pulka ne. Nad tabulkou jsem nemel index, ten by byl asi taky v haji a musel by se rebuildnout.
backup
backup (neregistrovaný)
22. 4. 2009 12:00 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
me se na techto prikladech nelibi, ze nejsou realne. Me se to jeste nikdy nestalo, aby se server restartoval prave v tu chvili, kdy se provadi nejaky velky update. To ja pak mohu jit, zabudovat do masiny vadny hw-raid controler, nechat oracle-db bezet a pote, kdy uzivatel zjisti, ze ma misto dat salat rici, ze Oracle je na prd.

Nahoda je blbec ale statistika je ocelova, transakce jsou monstrance dnesni IT doby a plni zejmena tu ulohu, aby mohl management klidne spat.
Karel
Karel (neregistrovaný)
22. 4. 2009 13:00 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Pokud se něco podobného stane u velkého updatu, pak je to pořád ještě ten lepší případ. A ne, nestalo se mi. Horší je to u malého updatu, kde je poškozeno jen pár záznamů a kolikrát na to nepřijdete. A to se mi už stalo. Troufám si říci, že pokud máte rozumně vytíženou databázi, tak při každém násilném restartu (já onehdá zakopl o napájecí kabel) se vám poškodí nějaká data. A teď jak z toho ven? Jedna cesta je používat stabilní OS, stabilní verzi databázového SW, pravidelně aktualizovat, UPS atd. Druhá cesta je použít transakční databázi. V každém případě je to však "vlastnost", o které by měl správce vědět a nějak ji řešit. Strčit hlavu do písku a tvářit se, že problém neexistuje... no to není dobré :-)
pavol
pavol (neregistrovaný)
22. 4. 2009 13:11 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Tak vzdy mozte rollbacknut z pravidelnej zalohy, dolezite je, aku mate infrastrukturu. Pokial sa vo firme setri na vsetkom vratane HW, tak nech sa potom nedivi.
melkor
melkor (neregistrovaný)
23. 4. 2009 7:54 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Vy snad zalohujete kontinualne?
A zakon schvalnosti funguje spolehlive: Prevazna vetsina poruch je tesne pred denni zalohou. Je snad lepsi ztratit cely den prace nez pouzivat transakce?
Sten
Sten (neregistrovaný)
23. 4. 2009 11:00 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Ale kdepak, převážná většina poruch je právě ve chvíli, kdy zálohujete (je to i logicky zdůvodnitelné: disky prostě dostanou zabrat), takže i záloha je poškozená :)
Lael Ophir
Lael Ophir (neregistrovaný)
23. 4. 2009 20:44 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Firmy naštěstí nepoužívají MySQL. Mají serverový HW (ne shit postavený v garáži), UPS, používají transakční DB engine a transakce na úrovni aplikačních serverů, zálohují DB i transakční logy, a drží vždy více záloh. "Webové aplikace" běžící na garážovém HW, LAMP a bez zálohování jsou z trochu jiné kategorie.
Ksl
Ksl (neregistrovaný)
23. 4. 2009 20:49 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
...s výjimkou Googlu... :o)
Tomáš Vondra aura:86
24. 4. 2009 18:45 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
No, to je trochu jiný případ ... Google používá masivní distribuované systémy kde se data ukládají redundantně na velkém počtu strojů. Nehledě na to že to nejsou data naprosto kritická (dají se znovu načíst z netu).
Pavel Stěhule aura:89
23. 4. 2009 20:58 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
To je otazka, co povazujes za firmu?
Franta Kučera aura:79
23. 4. 2009 21:51 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
heh, nedávno jsem byl v jednom datacentru a většina serverů tam byla normální PCčka. A nemyslím si, že by to byly všechno osobní servery jednotlivců :-D S dostatečnou redundancí se totiž dá úspěšně používat i ten „garážový hardware“.
Lael Ophir
Lael Ophir (neregistrovaný)
24. 4. 2009 17:00 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
To se ovšem typicky týká služeb typu Google. Když taková služba ztratí kus indexu, nic se neděje, za nějaký čas ho získá zpátky. Když ale firma ztratí faktury, tak se už samy neobjeví.

Pokud jste ale byl v serverově nějakého hostingu, tak tam v klecích ležely počítače různých garážových firem, co mají své projekty na inetu. A to je přesně ta kategorie "splácám to v garáži, ono to něco udělá, a jestli se ta data ztratí, je mi to jedno".
LENIN POWER!
LENIN POWER! (neregistrovaný)
24. 4. 2009 17:51 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
jedno jim to neni, ale jsou lini zalohovat. Kdyz ztrati data pokladaji to za nevyhnutelne zlo.
Tomáš Vondra aura:86
24. 4. 2009 23:33 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Ony to nemusí být vyloženě zbastlené servery pro garážové firmy - nemá cenu zastírat že i servery v racku sem tam odejdou do věčných lovišť. Ne každý server má redundantní napájení zdroje, větráček na CPU taky občas doslouží, kondenzátory na MB taky nevydrží všechno, ne každé datacentrum má dobře dimenzovanou (nebo chlazenou) UPS apod. A taková nevhodně umístěná klimatizace která začne téct, to taky umí svoje ...
Sten
Sten (neregistrovaný)
23. 4. 2009 23:14 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Firmy naštěstí nepoužívají MySQL

No jó, ani Google ani Seznam nejsou firmy, to jsou zájmová sdružení :)

uživatel si přál zůstat v anonymitě
23. 4. 2009 23:43 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Jasne, k cemu Google nejaky MySQL, kdyz ma vlastni BigTable, ktera se hodi na jejich aplikace? Proc by ty kvatna dat ukladali do relacni databaze? MySQL uz pouziva pouze okrajove...
Tomáš Vondra aura:86
24. 4. 2009 18:43 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
To byste se divil kolik firem (bohužel) používá MySQL i na celkem kritické aplikace. To jak je daná aplikace důležitá pro jejich business bohužel začínají zjišťovat až ve chvíli kdy to spadne.
Tomáš Vondra aura:86
24. 4. 2009 23:23 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Tak chtěl bych vás vidět jak "rollbackujete z pravidelné zálohy" například v případě většího e-shopu, kde:

(a) může být velmi mnoho dat (řádově GB)

(b) záleží zejména na naposledy vytvořených datech (čert vem rok staré již vyřízené objednávky - výdělek závisí na těch právě odeslaných)

(c) záleží na dostupnosti - uživatelé nepočkají a přímé ztráty za hodinu výpadku v nevhodnou dobu mohou jít klidně do desetitisíců Kč obratu (o nepřímých ztrátách na image apod. ani nemluvě)

To že se šetří na HW ještě neznamená že se na něm nedá provozovat pořádná databáze.
Lael Ophir
Lael Ophir (neregistrovaný)
25. 4. 2009 19:14 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Ta finanční stránka věci zaslouží upřesnit. Například alza.cz má roční obrat přes 2 miliardy korun. To je průměrný obrat asi 230k Kč za hodinu. To jen abychom měli představu, jak levná či drahá je pro takový podnik licence Windows a MS SQL Serveru či Oracle.
uživatel si přál zůstat v anonymitě
25. 4. 2009 19:29 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Co přesně mi licence za SQL Server nebo Oracle dá navíc co do úspěšnosti, úplnosti a rychlosti disaster recovery, že mi to neposkytne třeba Firebird?
Lael Ophir
Lael Ophir (neregistrovaný)
25. 4. 2009 19:44 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Řeč byla o MySQL, a tam myslím není co řešit. Firebird neznám, nebudu tedy vynášet soudy.

SQL Server nebo Oracle vám dají minimálně to, že můžete začíst s verzí zdarma (SQL Server Express Edition), a poté jen za cenu licence přejít na větší DB server (SQL Server Standard Edition). Nemusíte u toho přepisovat aplikaci. Naopak když začnete na MySQL a budete chtít víc, budete aplikaci přepisovat, což je velký problém.
LENIN POWER!
LENIN POWER! (neregistrovaný)
25. 4. 2009 22:26 Nový

profi db

celé vlákno
no treba kdyz mate oracle data guard nebo db2 hadr tak pri havarii neztratite ani jednu transakci a failover na backup server je za nekolik sekund. To je dost dobra vec pro online e=shop, nemyslite?

Dalsi vec je mit db ktera je odzkousena a ne kterou dela par zoufalcu po vecerech.

Dalsi hezka vec je ze profi databaze umi workload manager - nektere dotazy umi vyrizovat prednostne. Takze pak reporty nebrzdi OLTP a nemusite delat reporty nad historickymi daty, ale nad aktualnimy. Aktualni informace maji cenu zlata. Kdyz treba zakaznik zavola nasi reklamce a chce prave aktualni stav protoze pred nekolika hodinama spustil dulezitou a drahou kampan tak muze operatorka vyrobit a poslat sestavy, ktery se nevytvari zrovna rychle tak je dulezity aby to tu databazi nebrzdilo pro normalni provoz.

Krom toho dneska se databaze daji zalohovat velmi rychle ty 2 TB co tu mame se zalohuji na pasky bez disk spoolingu neco malo pres hodinu.

Takze jak tu mistni expert tvrdil 'databaze co muze mit i nekolik GB a to je pak problem' asi nikdy nevidel poradny HW.
uživatel si přál zůstat v anonymitě
25. 4. 2009 22:46 Nový

Re: profi db

celé vlákno
"no treba kdyz mate oracle data guard nebo db2 hadr tak pri havarii neztratite ani jednu transakci a failover na backup server je za nekolik sekund. To je dost dobra vec pro online e=shop, nemyslite?"
Myslím, že s výjimkou (ne)ztráty transakcí lze totéž realizovat s Firebirdem celkem jednoduše. Ztratím pouze nepotvrzené transakce, ovšem počítám-li s tím, že s touhle jedinou výjimkou si DB stroj může třeba totálně vyhořet, tak to snad není tak strašné. Jak ODG zachovává všechno? Spolupracuje s klientskou knihovnou na straně aplikace, aby kontext připojení přesměrovala na nový server? A kolik to vlastně stojí? :-)
Dalsi vec je mit db ktera je odzkousena a ne kterou dela par zoufalcu po vecerech.
Ale já nepsal o MySQL. Já psal o databázi, kterou dvacet let vyvíjel člověk, od kterého Oracle kopíroval fíčury. :-)
Krom toho dneska se databaze daji zalohovat velmi rychle ty 2 TB co tu mame se zalohuji na pasky bez disk spoolingu neco malo pres hodinu. Takze jak tu mistni expert tvrdil 'databaze co muze mit i nekolik GB a to je pak problem' asi nikdy nevidel poradny HW.
Brazilci cpou do Firebirdu deset tera (BTW, asi světový rekord v poměru velikost databáze/velikost serverového softwaru :-)) a prý si nestěžují. :] Českému e-shopu jistě pár tera pro data postačí s ohromnou rezervou.
LENIN POWER!
LENIN POWER! (neregistrovaný)
26. 4. 2009 0:10 Nový

Re: profi db

celé vlákno
ODG stalo $30k na procesor, ale nekdo mi tu psal ze ho uz v 11 EE davaji zadara.

To neni zadny hrdinstvi nacpat hodne dat do db, zalezi na tom jak to je pak rychly. mysql pri 10GB db uz zacne prohravat s cloudscape.

PGSQL ne pri vice datech taky strasnej opruz protoze vacuum. I na 30 GB trva vacuum full hodne dlouho (po 8 hodinach jsem to killnul) pokud je ta db rozfragmentovana treba 3 rocnim provozem.
Tomáš Vondra aura:86
26. 4. 2009 0:25 Nový

Re: profi db

celé vlákno
Vacuum je téma samo pro sebe, ale pokud se věnuje dostatečná pozornost konfiguraci autovacuum démona tak s ním nebývají výrazné problémy. Bohužel na (auto)vacuum nadávají hlavně vývojáři a admini kteří se na konfiguraci vyprdnou a pak se diví.

Pokud jste 3 roky provozovali databázi do které se i zapisovalo, a pak jste spustil VACUUM FULL aniž byste předtím rozumně nastavil vacuum_cost_ proměnné, tak se nedivte že to běželo hodiny (předpokládám že se CPU flákalo, že?).

Je to prostě vlastnost MVCC architektury, která se ale kontinuálně řeší a teď v 8.4 by se to mělo zase zlepšit. Stěžovatelé se většinou ohání tím že "Oracle to nedělá" - no, nedělá to proto že má jinou MVCC architekturu, která zase přináší jiné problémy (starý známý "ORA-01555: Snapshot Too Old", apod.).
LENIN POWER! aura:41
26. 4. 2009 11:49 Nový

Re: profi db

celé vlákno
vacuum full zamyka tablice, takze je zadouci aby to dobehlo co nejrychleji. Krom toho to byla miniaturni db 20-30GB. Od te ocekavam, ze se zreogranizuje na x86 komodity hw s levnym ide diskem za maximalne 30 minut.

db2 9.7 ma taky mvcc a nemusi delat ani stupidni vacuum (pg, firebird) ani pouzivat rollback segmenty (oracle). Nacita starsi verze radek z transakcniho logu. Oracle kopiruje kazdou zmenenou stranku do rollback segmentu, to generuje znacne mnozstvi IO operaci i kdyz ji nikdo nebude cist. DB2 se s tim zacne zabyvat az v pripade ze nekdo chce stary snapshot dat cist.

Taky je zajimave jak i5/os db2 dela recovery z journalu. to je velmi creativni zpusob recovery aniz by se muselo cekat na dokonceni operace. Najdete si k tomu nejake prezentace na webu. z/OS verze DB2 se to naucila casem taky (defered restart), ale i5/os verze to umi porad jeste lepe. unix verze db2 to pravdepodobne nebude umet nikdy pokud nebudou zakaznici dupat at to tam preportuji.

Mne se libi pristup ibm - poslou vam papiry kam si muzete napsat co byste v db2 radi videli a kolik si koupite novych licenci, kdyz to tam dodelaji. tomu rikam spravna orientace na zakaznika. Obvolaval jsem lidi at jim napisou ze chceme preportovat schema evolution z Z/OS do unix verze. i5/OS verze db2 ma zase naprosto suprovej fulltext se semantickou analyzou textu (kterej se normalne prodava zvlast za $30k na procesor) a vybornou podporu pro narodni jazyky. Holt si to i5/os zakaznici umeli vydupat. Ja uz jsem si taky uspesne vydupal u IBM radu featur v jejich softu - u jinych ISV prakticky nemam moc sanci aby mi do krabicove verze dodelali to co chci.
Tomáš Vondra aura:86
26. 4. 2009 17:16 Nový

Re: profi db

celé vlákno
Ano, vacuum full zamyká tabulky a když už ho pustíte tak je žádoucí aby to doběhlo rychle. Jenomže k tomu aby to doběhlo rychle je potřeba vhodně nastavit právě ty vacuum_cost_* proměnné, protože defaultní nastavení je takové aby to nevytěžovalo CPU.

Navíc všechny rady ohledně vacuum full jsou ve smyslu "nastavte to tak aby vacuum full vůbec nebylo potřeba". Pokud totiž dostatečně vhodně nastavíte autovacuum, max_fsm_pages atd. tak by vacuum full vůbec nemělo být potřeba.
LENIN POWER! aura:41
26. 4. 2009 21:36 Nový

Re: profi db

celé vlákno
max_fsm_pages je opruz. nastavovat velikost db? to jsme snad jeste v praveku?

jak se ma nastavit vacuum_cost_* aby to jelo rychle?
X
X (neregistrovaný)
26. 4. 2009 21:43 Nový

Re: profi db

celé vlákno
A všechny ty tunitelný věci na z/OSDB2 nejsou pravěk? :-)
Ksl
Ksl (neregistrovaný)
26. 4. 2009 18:30 Nový

Re: profi db

celé vlákno
db2 9.7 ma taky mvcc a nemusi delat ani stupidni vacuum (pg, firebird) ani pouzivat rollback segmenty (oracle). Nacita starsi verze radek z transakcniho logu. Oracle kopiruje kazdou zmenenou stranku do rollback segmentu, to generuje znacne mnozstvi IO operaci i kdyz ji nikdo nebude cist. DB2 se s tim zacne zabyvat az v pripade ze nekdo chce stary snapshot dat cist.
No něco na upřesnění: Firebird většinu starých řádků odstraňuje průběžně na pozadí společně s běžným přístupem ke stránkám. Jakmile je zapotřebí provést "sweep", je to příznak, že se něco "podělalo". Pro starší verze řádku nemusí sahat do protokolu - nejenže transakční protokol nemá, ale proč sahat pro nejnovější verzi řádku do jedné (datové) stránky a pro dvě starší verze do dvou různých dalších stránek (protokolu), když je jednodušší a rychlejší všechno shrábnout z jediné diskové stránky? Opravdu "stupidní" řešení. :-)
Obvolaval jsem lidi at jim napisou ze chceme preportovat schema evolution z Z/OS do unix verze.
Schema evolution? To jako tohle?
DB2 UDB for z/OS now provides the ability to change the definitions of tables and indexes without dropping and re-creating the object. This capability significantly enhances both the availability of your database and the performance of data access.
Přidat sloupec do existující tabulky je "pokročílá fíčura"? Nejen že tohle Firebird umí, ale umí to už dvacet let, za plného chodu, je to transakčně opouzdřené a provádí se to lazy updatem dat (verzovaná metadata), takže se databáze nezasekne na půl hodiny, když přidám sloupec do desetigigabajtové tabulky.
LENIN POWER!
LENIN POWER! (neregistrovaný)
26. 4. 2009 20:19 Nový

Re: profi db

celé vlákno
precetl jsem si dokumentaci a firebird uklada vice verzi radek do stejneho bloku. kdyz zjisti ze je tam nejaka stara co se uz nepotrebuje (nevim zda i pri cteni bloku nebo jen pri zapisu) tak ji vygumuje. Nektere stare radky to ale nemusi timpadem vygumovat kdyz pak delsi cas k nim nikdo nepristupuje. pokud je takhle cisti i pri cteni bloku tak generuje zbytecne zapisove operace, ktere jsou pomale.

bez transakcniho logu nemuzete delat rollforward recovery, umi tohle firebird?

Pokud mate v logu starou i novou verzi radku jako mela db2 vzdycky tak se za delat i rollbackward recovery coz je velmi zajimava vec. Do logu se musi stara verze zapsat u db2 vzdy takze mvcc neni zadne io navic jako u oraclu a vetsinou se stara verze potrebovat nacist nebude, v pripade ze ano je tu jeste pravdepodobnost ze bude v log bufferu. Mne to nepripada jako nestastne reseni, je to asi to nejlepsi co se da zaridit. Vacuum i rollback segment free a navic setri misto na disku i v bufferpoolu.

no schema evolution umi i zajimavejsi veci: zmenit index podle ktereho se tablice clusteruje, pridat sloupecek do indexu. zbytek uz je docela nuda: pridavani sloupecku, prejmenovani sloupecku, zruseni sloupecku, zmena poradi sloupcu a zmena data typu. Nejzajimavejsi je ze je to provedeno okamzite bez cekani, fyzicky se ta tabulka presoupe casem. Pro data warehousing k nezaplaceni. podporovano je soucasne max. 255 verzi tabulky a 16 versi indexu.

adminovat db2 na zOS je narocnejsi nez Oracle, ma to hodne ruznych prepinacu. naopak db2 na unixu je velmi jednoducha a kazda dalsi verze je snadnejsi. Na zOS panuje opacny trend.
Tomáš Vondra aura:86
25. 4. 2009 22:51 Nový

Re: profi db

celé vlákno
Předpokládám že tou poslední poznámkou se navážíte do mne, že? V tom případě si prosím znovu přečtěte v jaké souvislosti jsem se o těch GB zmiňoval, a třeba si všimnete že jsem to uváděl jako protiargument na návrh řešit problémy s transakcemi po pádu MySQL serveru obnovováním databáze ze zálohy a přehráním transakčního logu. Doufám že se shodneme že tady už i těch pár GB problémy s dostupností působit bude.

A věřte že "pořádného hardwaru" už jsem viděl celkem dost ...
LENIN POWER!
LENIN POWER! (neregistrovaný)
26. 4. 2009 0:19 Nový

Re: profi db

celé vlákno
no kolik mela nejrychlejsi masina co jste kdy videl? Mame tu treba db server co dela 1.1M TPC-C. Konzolidujeme na nem databaze a stal necely $3 mega.

mysql nema rollforward recovery, umi jen prehravat SQL prikazy (to je znacne pomale) a jeste v tom ma zname races, takze je mozne dostat po prehrani SQL logu jina data.

S bastlem mysql se vubec nema cenu zabyvat.
Tomáš Vondra aura:86
26. 4. 2009 3:11 Nový

Re: profi db

celé vlákno
Ano, máte pravdu - s takhle výkonnými a drahými stroji nepracuji. Běžně se setkávám jen se servery na úrovni PowerEdge 2950 a 2900 od Dellu (což jsou ve srovnání s tím vaším monstrem samozřejmě ořezávátka s 10x nižším TPC-C score za 50x nižší cenu), a databáze na nich provozované nemají TB ale pouze (desítky) GB. Uznávám že to ze mne nepochybně dělá absolutní lamu bez ponětí o technologiích ...

No a teď když jsme si tak pěkně pomocí TPC-C přeměřili virtuální penisy (váš je větší), tak byste mi mohl vysvětlit jak to souvisí s mým postem o nesmyslnosti řešit problémy s integritou při pádu MySQL obnovením ze zálohy.
LENIN POWER! aura:41
26. 4. 2009 13:47 Nový

Re: profi db

celé vlákno
Pokud jste nekdy varil v restauraci tak budete prekvapen ze i kdyz doma varit umite, tak se v restouraci vari uplne jinym zpusobem. Protoze postupy ktere pouzivame pri vareni doma nejsou moc skalovatelne.

V databazich je to stejne. OSS db funguji prijatelne maximalne v rozmezich desitky GB dat.

2950 Dell - 2 sockety. 8x15K disky bratru za $9.6k. Ten hw je dnes prakticky zdarma. licence pro db by staly tak $120k. Proto se prave konzoliduji databaze na jednu velkou masinu - znacne setrite na SW licencich, uspora muze byt i 10:1 pri vhodne pouzite virtualizaci.
Tomáš Vondra aura:86
26. 4. 2009 17:24 Nový

Re: profi db

celé vlákno
S tím pochopitelně souhlasím, vo tom žádná. Ale když firmě stačí jeden menší DB server na úrovni Dell PowerEdge 2950 (a na něm PostgreSQL, tj. licence $0), tak nebude investovat do 10x dražší mašiny na kterou pak tu jednu DB bude konsolidovat ;-)
LENIN POWER! aura:41
26. 4. 2009 21:43 Nový

Re: profi db

celé vlákno
no vidite a ja bych jim doporucil at si misto pgsql daji ms sql express kdyz uz nechteji utracet za licenci.

Pro zacatecniky je to nejlepsi. Jsou k tomu skoleni a literatura na kazdym rohu, vyvojovych nastroju dostatek. Kdyz nebudou neco vedet, tak jim poradi vsude.

Pokud chteji mermomoci provozovat db na linux, tak tam maji db2 express-C. Ale radsi bych jim doporucil ten ms sql. Pro zacatecniky je to lepsi.

Kdyz express verze prestane stacit, tak za velmi levny peniz poridi plnohodnotnou db a nebudou muset menit aplikaci.
Tomáš Vondra aura:86
27. 4. 2009 1:08 Nový

Re: profi db

celé vlákno
No, a já tahle absolutní tvrzení že produkt "X" je nejlepší považuji za nesmysl. Jistě, express edice (ať už Oracle nebo MS SQL) jsou sice hezká věc, ale zase že bych to snad chtěl používat na netriviální produkční aplikace?

To že jsou k něčemu školení a dokumentace dle mých zkušeností ještě nic neznamená, ve výsledku vždycky jde o to jestli vývojáři mají mozek. Kdybyste viděl s jakými hrůzami jsem se v poslední době setkal v dodávkách Oracle aplikací od "velkých" firem (Accenture, Cleverlance, Ness, ...) které svoje lidi údajně "školí", tak by vám hrůzou vstávaly vlasy, chlupy a kdoví co ještě.

Oproti tomu znám firmy které už několik let používají PostgreSQL, mají vývojáře a adminy kteří s ním umí pracovat, a nemají s tím sebemenší problém. Přechod na Oracle nebo jinou komerční databázi (třeba vaší oblíbenou DB2) by jim nepřinesl žádné výhody, jenom poplatky za licence. Čímž netvrdím že PostgreSQL je nejlepší databáze na světě ...
LENIN POWER!
LENIN POWER! (neregistrovaný)
27. 4. 2009 14:39 Nový

Re: profi db

celé vlákno
express edice se daji pouzit na netrivialni produkcni aplikace bez problemu. Jsou to totiz plnohodnotne databaze, ktera maji nejaka technicka nebo jen licencni omezeni. Je to stejne vyspely kod, ktery pohani velke databaze. Neni to nejaky zmetek zbastleny v garazi. Navic mate k dispozici vsechny vyvojove nastroje a knowhow z velkych systemu.

Pokud trvate na tom ze chcete databazi s nulovymi pocatecnimy naklady tak jsou to prave. Zejmena mssql express je velmi dobra vec pro zacatecniky. Mrknete co vsechno ta databaze umi http://www.microsoft.com/express/sql/default.aspx a jake hezke tooly k tomu muzete mit. Vy to nevidite ze se vam v tom bude delat snadneji a rychleji? Lidska prace totiz stoji nemale prostredky.

My treba mame pgsql nasazeny v jedne aplikaci kterou jsme koupili i ze serverem. Ma to pro nas nevyhody:

* opruz s vacuum
* nutnosti porad nastavovat free space map velikost protoze db porad roste. uz se to asi zvetsovalo 3x. Vrchol demence nastavovat cosi podle velikosti db, jak to mame vedet jak rychle poroste?
* replikace slony1 se opravdu velmi spatne adminuje a je nespolehliva, krome toho ze je jeste dost pomala a ma overhead i na strane master db.
* aplikace v 8.3+ nechodi. Zpetna kompatibilita pgsql zjevne neni nic moc. Jak dlouho bude jeste podporovana 8.2, kdo vi.
* pri upgradu na vyssi verzi se musi udelat import/export dat coz je dost opruz pac se jedna o 24/7 aplikaci. Pgsql navic importuje data pomalu jako lemra.
* knowhow o administraci pgsql se spatne shani.
* administrativni nastroje nejsou - vse se dela z command lajny
* monitorovaci nastroje taky nejsou
a to jeste nemluvime o takovych vlastnostech jako HA a recovery

Takze databaze sice stala toho kdo tu aplikaci psal $0, ale TCO co nas to stoji je mnohem vyssi nez kdyby to bezelo na komercni databazi. Kdyby ji napsal pro express edici velke db, tak si normalne misto srani s pgsql koupime standardni edici a mame klid. Ted budete muset jeste nechat nekoho to aplikaci prepsat do jine db, coz jsou zase nemale naklady.

Kde jsme podle vas usetrili pouzitim pgsql? Ja tu inzerovanou usporu nikde nevidim.
Pavel Stěhule aura:89
27. 4. 2009 15:14 Nový

Re: profi db

celé vlákno
Poradím:

Divím se, že takový borci neumí používat google.

free_space_map stačí nastavit jednou a pořádně - případně nasadit autovacuum. Čím déle neprovedete vacuum, tím větší musíte mít free_space_map.

migrace do 8.3, buďto opravit chyby nebo použít http://www.postgres.cz/index.php/Migrace_dat

něco o administraci http://www.postgres.cz/index.php/Desatero , http://www.postgres.cz/skoleni/skoleni_administrace_web.pdf


Administrace http://sqlmanager.net/products/postgresql/manager

Monitoring: http://pgfoundry.org/projects/nagiosplugins http://pgfouine.projects.postgresql.org/
LENIN POWER!
LENIN POWER! (neregistrovaný)
28. 4. 2009 2:42 Nový

pgsql

celé vlákno
INFO: vacuuming "alexa.resultcache"
INFO: scanned index "resultcache1" to remove 91 row versions
DETAIL: CPU 3.66s/6.46u sec elapsed 131.09 sec.
INFO: "resultcache": removed 91 row versions in 7 pages
DETAIL: CPU 0.00s/0.00u sec elapsed 0.12 sec.
INFO: index "resultcache1" now contains 143751986 row versions in 497612 pages
DETAIL: 91 index row versions were removed.
74 index pages have been deleted, 74 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.01 sec.
INFO: "resultcache": found 91 removable, 143751986 nonremovable row versions in 1647055 pages
DETAIL: 0 dead row versions cannot be removed yet.
There were 7503 unused item pointers.
73 pages contain useful free space.
0 pages are entirely empty.
CPU 14.72s/11.47u sec elapsed 361.19 sec.

autovacuum | on
autovacuum_analyze_scale_factor | 0.1
autovacuum_analyze_threshold | 250
autovacuum_freeze_max_age | 200000000
autovacuum_naptime | 60
autovacuum_vacuum_cost_delay | -1
autovacuum_vacuum_cost_limit | -1
autovacuum_vacuum_scale_factor | 0.2
autovacuum_vacuum_threshold | 500

na 8.3 migrovat nebudeme, k nicemu by nam to nebylo. db roste asi o 1 GB denne. Mame autovacuum + 1x denne vacuum. REINDEX ani VACUUM FULL delat nemuzeme, to by trvalo desitky hodin.

Ten /postmaster.pid to je taky opruz, mame tu napsano v poznamkach ze kdyz server spadne tak pgsql kvuli nemu nenastartuje. musi se rucne smazat. Boze to je spolehlivost. Ta pitoma databaze neumi ani spolehlive zjistit zda bezi?

pokud hroz´ı pˇreteˇcen´ı ˇc´ıtaˇce transakc´ı (varov´an´ı v logu) VACUUM FREEZE (1x za nˇekolik let). Neda se to zjistit nejakym selectem? ja nemam zajem se hrabat ve /var/log/messages - zaukoloval jsem admina.

Kdyby ta aplikace nebyla zbastlena v pythonu, nemela 6mb zdrojaku a nepouzivala modul import pg ktery je db neprenositelny tak uz by davno sel pg i se svym vacuum do haje. delat mvcc pres disk je pitomost.

Ne ze by se ten pgsql nejak vyrazne predrel pokud jde o odmazavani dat z velkych tablic. Pravda je tam DELETE CASCADE v relaci tak 1:80 ale stejne je to pomaly jak prase.
crawler=# DELETE FROM alexa.querycache where cached < '2009-03-17';
DELETE 67155
Time: 228892.404 ms

ted mne bezi DELETE + aktivni autovacuum cisti tabulky a dulezita query od klientu co bezi normalne tak 0.3sec normalne ted jede tak 7 sekund. To je radosti na starym belidle s db co nemaj workload manager a neumi poustet dulezite dotazy prioritne. Doufam ze neprijdou stiznosti.

Kdyz bezi autovacuum tak je to tedy znatelne pomalejsi:
crawler=# DELETE FROM alexa.querycache where cached < '2009-03-19';
DELETE 147471
Time: 1331750.621 ms

To vacuum je fakt za trest. Nerikal jsem vam ze je dulezite umet garantovat worst case? Takhle to moc nejde, napere se tam jedno automaticke vacuum a vykon jde do kytek.

taky by mne zajimalo proc se to vacuum chova takto, delam to na jedne tabulce a porad to cisteni restartuje. Proc tu tabulku a index musel cistit 3x? To to nezvladl v jednom pruchodu? To ale generuje strasnyho i/o.

crawler=# VACUUM verbose alexa.resultcache ;
INFO: vacuuming "alexa.resultcache"
INFO: scanned index "resultcache1" to remove 5592194 row versions
DETAIL: CPU 4.69s/18.03u sec elapsed 227.78 sec.
INFO: "resultcache": removed 5592194 row versions in 67423 pages
DETAIL: CPU 2.13s/0.45u sec elapsed 141.74 sec.
INFO: scanned index "resultcache1" to remove 5592205 row versions
DETAIL: CPU 4.69s/17.31u sec elapsed 170.26 sec.
INFO: "resultcache": removed 5592205 row versions in 63695 pages
DETAIL: CPU 1.85s/0.50u sec elapsed 80.27 sec.
INFO: scanned index "resultcache1" to remove 5005436 row versions
DETAIL: CPU 4.39s/32.36u sec elapsed 225.78 sec.
INFO: "resultcache": removed 5005436 row versions in 57313 pages
DETAIL: CPU 1.70s/0.46u sec elapsed 91.58 sec.
INFO: index "resultcache1" now contains 118633367 row versions in 498388 pages
DETAIL: 16189835 index row versions were removed.
87911 index pages have been deleted, 31703 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO: "resultcache": found 16189835 removable, 118633367 nonremovable row versions in 1649104 pages
DETAIL: 0 dead row versions cannot be removed yet.
There were 9117033 unused item pointers.
289416 pages contain useful free space.
0 pages are entirely empty.
CPU 31.78s/74.51u sec elapsed 1226.20 sec.

Teda zajimalo by mne ciste teoreticky zda firebird s tim vacuum taky takhle blbne. jo recovery.conf to je od autoru pgsql opravdu kanadsky zertik. Pripadam si jak roce 1987.

A to se tu bavime o pididatabazi 30GB. Co budeme delat az db naroste na 200GB? To uz abychom to zacali prepisovat pro ten Oraakl. Tady vidite ze pgsql ma pri nasazeni v realne netrivialni aplikaci dost vazne problemy. A to nechavam stranou jeho narocnou administraci na lidskou praci.

Vy si porad myslite ze se nam to vyplati? Kdyby jsme tam meli neco z trojky db2, mssql, oracle tak tyhle db zadne z vyse uvedenych problemu (vacuum normal/full/freeze migrace verzi) nemaji. Administrace pomoci klikacich nastroju, zalohovani do TSM bez problemu, rollforward recovery se dela 1 - slovy jednim prikazem. Ten pgsql ma strasne velky TCO.
Pavel Stěhule aura:89
28. 4. 2009 6:46 Nový

Re: pgsql

celé vlákno
V něčem by ti možná pomohla 8.4. VACUUM projíždí pouze změněné datové stránky - neprovádí FULL SCAN tabulky. Jinak:

INFO: vacuuming "alexa.resultcache"
INFO: scanned index "resultcache1" to remove 91 row versions
DETAIL: CPU 3.66s/6.46u sec elapsed 131.09 sec.

V contribu je modul pg_stattuple, skrz který je možné se dostat k údajům jako fragmentace datových stránek, hloubka indexů a podobně. Pokud je nad tabulkou zavěšené hodně indexů, je důležité zvětšit maintanaince_work_mem - např. 3-4 GB.

Nevidím do aplikace, ale předpokládám ať už z názvu nebo z výsledků VACCUA, že tabulka result cache je použitá jako cache. Na to je lepší použít MyISAM nebo memcache - případně vysadit tuto tabulku z autovacuua, a na konec dávek - např. toho masivního deletu přidat VACUUM tabulky. Další možností je použít partitioning a dropovat celé partišny - v pg je partitioning v základu, nikoliv v enterprise edicích, takže není důvod proč se mu vyhýbat.

Proč VACUUM prochází opakovaně, fakt netuším. Musel bych se podívat do zdrojáků nebo se zeptat v konferenci. U mne to nedělá, ale používám 8.4

Vytvořil jsem tabulku s 1mil řádků a zrušil každý třetí.

INFO: vacuuming "public.e"
INFO: scanned index "e_pkey" to remove 333333 row versions
DETAIL: CPU 0.03s/0.44u sec elapsed 0.66 sec.
INFO: "e": removed 333333 row versions in 3922 pages
DETAIL: CPU 0.02s/0.09u sec elapsed 0.14 sec.
INFO: index "e_pkey" now contains 666667 row versions in 2192 pages
DETAIL: 333333 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO: "e": found 333333 removable, 666667 nonremovable row versions in 3922 out of 3922 pages
DETAIL: 0 dead row versions cannot be removed yet.
There were 0 unused item pointers.
0 pages are entirely empty.
CPU 0.10s/0.75u sec elapsed 1.36 sec.

hlavně pak další průchod, pokud se nic nedělá je "rychlý". Samozřejmě, protože to už nic nedělá:

NFO: vacuuming "public.e"
INFO: index "e_pkey" now contains 666667 row versions in 2192 pages
DETAIL: 0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO: "e": found 0 removable, 666667 nonremovable row versions in 3922 out of 3922 pages
DETAIL: 0 dead row versions cannot be removed yet.
There were 333333 unused item pointers.
0 pages are entirely empty.
CPU 0.01s/0.06u sec elapsed 0.08 sec.

O postmaster.pid se většinou nemusíte starat (v nových verzích). Editace recovery.conf je asi jeden z mála úkonů administrace, kdy si připadám, že sedím u Oracle. Srovnávat administraci Oraclu a pg je vtip ne? To může zafungovat na tvoje ťuňtoidní zákazníky, kterým nacpeš předražený Indy. DB2, mssql, oracle sice nemají VACUUM, zase mají svoje jiné šperky dané buďto technologií nebo administrací - patchování Oraclu je taky dobrodružná záležitost, u db2 jsme před týdnem přišli o data a museli číst zálohu. Ukaž mi databázi, která je bez chyb. U pg by VACUUM už neměl být problém - v 8.3 je HOT update, v 8.4 se vacuují už jen modifikované stránky.

Fakt je, že migrace na vyšší verzi by mohla být pořešená líp - na online migraci dělal Zdeněk Kotala - je otázkou, na čem bude dělat pod Oraclem. Zatím můžeš použít pg_migrátor nebo si vyzkoušet pg_restore, který v 8.4 už dokáže běžet paralelně.

Pokud chceš klikat - pořiď si ems admina. Všechno je tam zabalené do klikátek.
LENIN POWER!
LENIN POWER! (neregistrovaný)
30. 4. 2009 19:51 Nový

Re: pgsql

celé vlákno
ad 8.4 migrace:
* aplikace nefunguje ani s 8.3 - musela by se upravit, asi nejak moc vyrazne ale:
* dump z 8.2 se do 8.3 nenacte kvuli fulltext indexum

ad myisam/memcache:
potrebuju persistentni data, vyroba tech sestav trva znacne dlouho. Tak si nemuzu dovolit po pripadnem restartu stroje dropnout cache. To je pak ta aplikace nepouzitelne pomala.

table partitioning nemam moc rad, driv se to muselo pouzivat ponevadz db2 umela na unixu/windows max. velikost tablespace 64GB coz byl ale desnej opruz. Osobne ho pouzivam jako nutne zlo jen kdyz se tablice nevejdou do tablespace. Nastesti s db2 9 uz tento opruz konci pac minimalni maximalni velikost tablespace je 2TB.

Ale uznavam ze to bude asi nejlepsi navrzene reseni. Musim rict ze je to tedy znacny administrativni opruz v pgsql:
http://www.postgresql.org/docs/8.2/static/ddl-partitioning.html
to se mi delat nechce, na to si nekoho najmeme, napsal jsem tehletem http://www.varlena.com/contactus.php
srovnejte to s db2
http://www.ibm.com/developerworks/data/library/techarticle/dm-0605ahuja2/index.html

jak vam crashla ta db2 a ktera verze to byla?

Obvykle neni duvod delat restore cele databaze, staci udelat restore jen toho tablespace ktere zarvalo. Vy nezalohujete po tablespaces? Pokud mate soft `db2 recovery expert` tak dokonce staci jen dropnout tu poskozenou tablici a udelat na ni rollforward.

Uznavam ze oracle je v tomto lepsi nez db2, ten umi delat restore na urovni db bloku (obnovi jen ty pozkozene bloky ze zalohy); je to jen ponekud administrativne narocnejsi na muj vkus. ja recovery databazi nedelam, mozna ze na to budou mit nejaky tooly.

Na ten EMS manager jsem se dival, vyzkousel jsem db2 verzi, ta mela vazny bugy (neukladala konfiguraci pripojeni k db, a taky pouzivala V8 syntax oproti V9 db) tak jsem ji smazal. Kdyz se holt setri na QA testingu tak pak nejsou sales. Na tu pgsql verzi EMS se podivam casem.

Takhle to dopadne kdyz se clovek necha premluvit na OSS databazovy soft. Je s tim jeden problem za druhym:
NOTICE: number of page slots needed (1950384) exceeds max_fsm_pages (1000000)
asi mi tim chce naznacit ze 30GB databaze potrebuje 2 mega? no dobre nastavil jsem mu je na 5 mega.
Pavel Stěhule aura:89
30. 4. 2009 20:33 Nový

Re: pgsql

celé vlákno
db2 určitě nebyla poslední verze - možná 7. Netuším, db2 v práci neřeším.

Doporučuji Release Notes pro 8.3 - je tam sekce věnovaná i TSearch2 aplikacím a importu z 8.2 do 8.3. Ostatně Release Notes je v každém případě, to co potřebuješ.

Partitioning v pg je lepší než žádný. A v 8.5 by se měl upravit, tj. přidat pár příkazů. Aby se člověk neupsal, tak stačí použí skript v shellu nebo uloženou proceduru.

NOTICE: number of page slots needed (1950384) exceeds max_fsm_pages (1000000). Tím to chce naznačit, aby ses podíval do dokumentace a přečetl si co max_fsm_pages znamená, a co se stane nebo nestane, když jej přešvihneš. V 8.4 už si fsm pg "jakoby" udržuje dynamicky.

Patrně uživatelé db2 nebudou tím typickým klientem EMS manageru. Verze v pg fungovala v pohodě, a už v roce 2004 měla integrovaný debugger plpgsql.
Tomáš Vondra aura:86
27. 4. 2009 15:23 Nový

Re: profi db

celé vlákno
Ne, já skutečně nevidím že se v tom bude pracovat lépe a rychleji. Ale možná je to tím že jsem v příkazové řádce jako ryba ve vodě, a když už potřebuji nějaké GUI tak si pustím Aqua Data Studio. Ale uznávám že OSS databáze nemají klikátka na takové úrovni jako například MS SQL (i když teda když jsem nedávno musel pracovat s tím administračním nástrojem od MS SQL tak jsem skoro umíral ... zlatá command lajna).

Každopádně pokud nejste spokojeni s danou aplikací postavenou nad pgsql, nemusí to nutně být chyba pgsql, ne? Zejména pokud to dělali vývojáři bez znalosti použité databáze - a to platí i pro ostatní produkty, včetně komerčních databází (Oracle, SQL Serveru a DB2).

Jak jsem řekl - pokud musíte pravidelně zvyšovat max_fsm_pages, tipuji na nevhodně nastavený autovacuum (pokud vůbec běží). Nehledě na to že max_fsm_pages souvisí ani ne tak s rychlostí růstu aplikace, ale s množstvím mazaných a měněných dat ... Zkuste autovacuum nastavit o něco agresivněji, tj. ať vacuumuje častěji a agresivněji. Máte-li zájem mohu vám s tím poradit.

Mimochodem zvyšování max_fsm_pages a nedostatečné vakuování má pochopitelně negativní vliv na rychlost. A jedna dobrá zpráva - v 8.4 už max_fsm_pages není potřeba.

Ano, replikace je jedna ze slabých míst PostgreSQL, to uznávám. Stejně tak nutnost exportu/importu při upgrade na další verzi je nepříjemné, zejména u 24/7 aplikací. 8.4 verze pg_restore už umí používat víc CPU, takže je to znatelně rychlejší.

Ano, máte pravdu že monitorovací nástroje nejsou, a je to velká chyba. Cosi primitivního jsem nedávno stvořil (http://pgmonitor.sf.net), ale s nástroji distribuovanými například s Oracle to pochopitelně soupeřit nemůže.

Na druhou stranu nevím co přesně myslíte tím "knowhow o administraci pgsql se spatne shani" - osobně pokládám dokumentaci k PostgreSQL za velice přehlednou a kvalitní, ale holt to chce zkušenosti. Znám dost lidí kteří si říkají "oracle administrátor" - dobří jsou tak 3 nebo 4, zbytku bych nesvěřil ani MySQL na domácím serveru.
Tomáš Vondra aura:86
25. 4. 2009 22:31 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Nerad bych se tady zaplétal do flame na téma "která databáze je nejlepší" případně "proč by všichni měli používat databázi X a ne Y" takže pouze pár důvodů proč si firmy často volí některou z mainstreamových komerčních databází typu Oracle a MS SQL Server a ne open source databázi.

- v podstatě jsou to kvalitní a spolehlivé produkty (i když ne že by se mi na nich líbilo úplně všechno), mají poměrně dost zajímavých funkcí (replikace, apod.)

- když za něco platím (licence), mám většinou nárok na přesně specifikovanou podporu od konkrétního subjektu (lokální zastoupení apod.) - skutečnost že když se něco pokazí tak mám někoho po kom se vozit je pro manažery dost důležitá ;-)

- existuje k nim poměrně rozsáhlá dokumentace / nabídka školení apod. (což například pro Firebird neplatí, resp. neplatilo před cca rokem kdy jsem kloudnou dokumentaci hledal dost marně)
Jan Seifert
28. 4. 2009 11:33 Nový

Re: Arogantní text bez komplexního přemýšleníRe: Arogantní text bez komplexního přemýšlení

celé vlákno

- existuje k nim poměrně rozsáhlá dokumentace / nabídka školení apod. (což například pro Firebird neplatí, resp. neplatilo před cca rokem kdy jsem kloudnou dokumentaci hledal dost marně)

Dokumentace k Firebirdu spatna neni a behem par dni od objednani jsem ji mel doma na stoje, ale je placena.

Tomáš Vondra aura:86
24. 4. 2009 18:07 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Nezlobte se, ale postupovat dle logiky "nikdy se mi to nestalo takže nebudu přemýšlet jaké by to mělo následky" je poněkud naivní. Věřte že náhlý pád serveru není nic až tak výjimečného - může vypadnout elektrika a selhat UPS, může vyhořet zdroj, může přijít blbec a vytáhnout napájecí kabel ze serveru ... fantazii se meze nekladou. A pokud databáze neustojí ani takhle základní typ výpadku, tak se nedá mluvit o spolehlivosti.

Jistě, může se pokazit i řadič (i to už jsem viděl), ale to už je zase o kus dál. On totiž úplně stačí pokažený driver pro chipset, a je to. Ne že by nestálo za úvahu jak to sledovat a jak na to reagovat (v rámci standardního recovery plánu), ale asi se shodneme že je to řádově méně pravděpodobné než prostý pád serveru.
pavol
pavol (neregistrovaný)
22. 4. 2009 12:51 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
tato "nebezpecnost" je u mysql dan za rychlost a nie stastny navrh. Ale uprimne, stalo sa nikomu v realnom nasadeni, ze by sa server restartoval(spadol) pocas vykonavania updatu? Ja si myslim, ze pri spravnej udrzbe systemu to skoro ani nieje mozne.
Jencek
Jencek (neregistrovaný)
23. 4. 2009 1:39 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Stalo. Poprvé to byl idiot, který vytáhl kabel. Podruhé to byl ten samý idiot kdy pro změnu vypl natvrdo diskové pole u špatného serveru. Ale uznávám, že to není obvyklé a že to byla naše chyba, protože jsme ho neměli do servrovny pouštět. Bohužel to byl správce druhého serveru a tak jsme ho tam pustit asi museli. Pazoury bych mu tehdy nejraději urazil.
Lael Ophir
Lael Ophir (neregistrovaný)
23. 4. 2009 20:48 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Já jednou viděl server v kanclu, kde uklízečka brzo ráno přišla, vrazila vysavač do UPS, a začala kancelář luxovat. Po půl minutě overloadu UPSky provedl server automaticky shutdown. Dali červenou nálepku s upozorněním na zásuvku co byla na UPSce, a situace se opakovala. Dali dětské zámky na zásuvky, ale uklízečka je vyndala ze zásuvky. Takové osobě urazit obě ruce.
Sten
Sten (neregistrovaný)
23. 4. 2009 23:16 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Která firma je tak blbá, že dá uklizečce (nebo jakémukoliv jinému neškolenému zaměstnanci) bez dozoru přístup k serveru?
Ksl
Ksl (neregistrovaný)
23. 4. 2009 23:46 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Spíš dali serveru bez dozoru přístup k uklízečce. :]
Lael Ophir
Lael Ophir (neregistrovaný)
24. 4. 2009 17:03 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
To byla malá firmička, a server ležel kdesi v rohu v jedné kanceláři. Samostatná serverovna pro umístění dvou třech serverů je pro malé firmy drahá a zbytečná.
Sten
Sten (neregistrovaný)
24. 4. 2009 17:14 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Spousta malých firem má malý box pod stropem (nebo jinde, ale pod stropem to bývá často, protože to nepřekáží) se servery a UPSkou a pod zámkem. Uklizečka prostě nemá mít přístup k serveru stejně jako nemá mít přístup do trezoru.
Lael Ophir
Lael Ophir (neregistrovaný)
24. 4. 2009 17:45 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Jistě takové firmy jsou. Také je ale hromada firem, které nemají ani tu UPS, natož server v racku. Pokladna je ve formě kasičky zamknuté v šuplíku stolu, a HR materiály zamknuté ve skříni. Prostě jim to tak stačí, protože jsou malí. Doma svůj počítač asi nezamykáte do racku, i když jsou na něm citlivá data, a své papírové dokumenty nemáte v trezoru. Občas se podobně chovají i firmy o desítkách lidí, protože rády šetří a nemají ještě špatnou zkušenost.

Nemusíte psát, jak je fyzická bezpečnost důležitá. Dobře to vím.
LENIN POWER! aura:41
23. 4. 2009 23:56 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
> Ale uprimne, stalo sa nikomu v realnom nasadeni, ze by sa server restartoval(spadol) pocas vykonavania updatu?
Veril by jste tomu ze nekdy nejake SQL prikazy bezi treba i tydny? Nebo sypete 15k updatu do serveru za sekundu. Pravda kdyz davate databazi jeden jednoradkovy update za 5 minut tak pravdepodobnost ze se havarie trefi zrovna do nej je mala. Krom toho transakce chrani take pred havarii/kilnutim aplikace.

Na linuxu s jeho demetni spravou pameti tam kdyz dojde pamet tak kernel odstreli ten oracle, pac ji ma nejvic. Ja si myslim, ze pri spravnemu navrhu memory managementu to skoro ani nieje mozne.
Sten
Sten (neregistrovaný)
24. 4. 2009 17:18 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Na linuxu s jeho demetni spravou pameti tam kdyz dojde pamet tak kernel odstreli ten oracle, pac ji ma nejvic

Tak hloupý zase OOM killer není. Nejdřív střílí procesy, které už dlouho nepožadovaly CPU čas. Krom toho mu lze celkem snadno říct (přes /proc/$PID/oom_adj), aby Oracle nechával až na později anebo vůbec nestřílel.

Lael Ophir
Lael Ophir (neregistrovaný)
24. 4. 2009 17:39 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
To bohužel nic nemění na faktu, že taková správa paměti je dementní. Ale to je na jinou diskusi.
Tomáš Vondra aura:86
24. 4. 2009 18:50 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
No, a není lepší správně nastavit procesy tak aby OOM killer nemusel ty procesy střílet? Nehledě na to že žádný program není bez chyby, a může spadnout například na SIGSEGV "sám od sebe".
JS
JS (neregistrovaný)
24. 4. 2009 19:48 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
To je skoda, ze je to na jinou diskusi, protoze me by treba celkem zajimalo, jake lepsi reseni byste navrhoval.
Tomáš Vondra aura:86
24. 4. 2009 23:26 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Já bych navrhoval do každé mašiny zavřít trpaslíka vycvičeného k rozhodování který proces je důležitý a který může odstřelit.
JS
JS (neregistrovaný)
25. 4. 2009 9:23 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Ja myslim, ze prave o to se vyvojari jadra snazi. ;-)
Lael Ophir
Lael Ophir (neregistrovaný)
25. 4. 2009 19:43 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Zkuste na rootu vyhledat OOM Killer v diskuzích ke článkům a zprávičkám. V krátkosti:
- nepoužívat fork/exec, ale nějakou obdobu CreateProces
- používat thready místo worker procesů
- při alokaci paměti jí opravdu vyhradit (tedy nelhat o paměti)
- když paměť není, tak se chovat dle normy jazyka C (alokace vrátí null),
- aplikace by měly být schopné správně reagovat na nedostatek paměti

Zkuste si to s Oraclem nebo MS SQL Serverem. Když selže alokace, tak zmenší nějaké buffery, nebo selže pouze provádění statementu, který paměť potřeboval. Slíbit procesům paměť, a pak je různě losovat a střílet, to je linuxové zvěrstvo.
uživatel si přál zůstat v anonymitě
25. 4. 2009 20:11 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
A víte, že memory overcommit se dá v Linuxu jednoduše vypnout? Je to konfigurace na jeden řádek. A reakce aplikací na nedostatek paměti je navíc plně v rukou aplikačních programátorů.
Lael Ophir
Lael Ophir (neregistrovaný)
25. 4. 2009 21:18 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Memory overcommit jde vypnout, ale pak brzo dojde paměť. Důvodem je nadužívání konstrukcí, které mohou spotřebovat spoustu paměti, ale většinou jí nepoužijí. Příkladem je fork a fork/exec.

Reakce na nedostatek paměti NENÍ v rukou programátora. Na Linuxi díky overcommittingu projde prakticky jakákoliv alokace, i když paměť není (malloc vrátí pointer). Když potom aplikace zkusí paměť použít, kernel zjistí, že aplikaci slíbil paměť, a teď jí nemá. Pak je čas na OOM Killer. Autor aplikace s tím moc nenadělá. Minimálně na Windows a Solarisu je situace řešená daleko lépe. O paměti se nelže, threading je dlouhá léta funkční, a příšernost fork/exec není třeba používat.
LENIN POWER!
LENIN POWER! (neregistrovaný)
25. 4. 2009 22:01 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
http://www.root.cz/zpravicky/steve-ballmer-linux-je-vetsi-hrozba-nez-apple/257669/

misto aby vylepsovali oom killer by mohli prestat lhat o pameti. Navic ta sama aplikace na windows kdyz se srovna s linux verzi tak linux verze zerou mnohem vic pameti.

Solaris taky neni zadny zazrak, 32 bit verze ma swap max. 2GB. 32bit solac je kupodivu vyrazne rychlejsi.
HKMaly aura:99
2. 5. 2009 16:21 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Pokud by CreateProces melo mit stejne moznosti (predevsim co se tyce pipe a ostatni meziprocesove komunikace) jako fork/exec taky by muselo mit zhora neomezeny pocet parametru. Problem, o kterem mluvite, je vyresen uz 30 let: vfork je funkce kterou mate zavolat pokud vite, ze budete skoro hned delat exec. Tim jadru umoznite predpokladat, ze se nebude ve skutecnosti spotrebovavat zadna pamet.
Lael Ophir
Lael Ophir (neregistrovaný)
5. 5. 2009 1:48 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
POSIX.2 z roku 1996 nezná vfork. Možná právě proto už 30 let aplikace vesele používají fork/exec. Navíc vfork má své vlastní problémy:
http://linux.die.net/man/2/vfork

Které konkrétní možnosti máte na mysli u CreateProcess?
Suchý čert aura:94
22. 4. 2009 15:59 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Po restartu stačí obnovit databázi ze zálohy a přehrát binary log, ne? ;-) Teď tu vypadám jako nějaký zastánce MySQL a MyISAMu, přitom ve skutečnosti všude, kde to jde, používám PostgreSQL a bez transakcí bych opravdu cokoliv netriviálního dělat nechtěl. :-)
backup
backup (neregistrovaný)
22. 4. 2009 16:02 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
dokavad nedefinujete 'netrivialni', tak se jedna bohuzel o kecy
Suchý čert aura:94
22. 4. 2009 17:27 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno

Tak s MyISAMem je problém i obyčejná úloha typu převod peněz z účtu na účet.

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

Obecně pokud je pro zachování integrity dat nutné provést atomicky více než jeden příkaz, tak je to jen velice obtížně řešitelné.

LENIN POWER!
LENIN POWER! (neregistrovaný)
22. 4. 2009 19:12 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
jenomze mysql/isam neumi provest atomicky ani jeden (cely) prikaz.
Suchý čert aura:94
22. 4. 2009 19:58 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Pokud po pádu databázi obnovíte z binary logu (připadně z kombinace zálohy a binary logu), tak by nemělo k porušení atomicity dojít.
LENIN POWER! aura:41
22. 4. 2009 20:54 Nový

mysql a atomicita statementu

celé vlákno
mate ale nekolik problemu:

1.
V prvni rade musite umet detekovat ze vam mysql samo od sebe zbuchlo nebo ze vam spadnul OS. Havarie OS ty dejme tomu budeme umet spolehlive detekovat, ale mysql je udelane tak ze kdyz crashne tak se samo restartne - jak vlastne zjistit ze padlo?.

2.
Budete muset detekovat v aplikaci chybove stavy jako treba UPDATE vice nez 1 radky zarvalo protoze doslo misto na disku.

3.
Takze detekce zda se vam vubec podelali nejaka data neni zrovna trivialni. Vetsina mysql aplikaci ignoruje nejake navratove kody, proste tam jen vali sql statementy.

4. Fajn takze i kdyz sance ze zjistime potencionalni poskozeni dat je velmi mala rekneme ze to na 100% zvladame. Kdyz se to zjisti tak se musi zashutdownovat databaze co mozna nejdrive abychom zabranili dalsi ztrate dat - uzivatele vkladaji data do poskozene databaze. Ma na to vubec nami pripojena aplikace prava?

5. Pak je potreba udelat restore ze zalohy, vybrat spravne binarni logy od posledni zalohy a prehrat je. Zrejmne dost rucni prace admina.

6. neuvazujeme pro jednoduchost zname pripady races, kdy mysql zapisuje prikazy do binarniho logu v nespravnem poradi a tedy jejich prehranim dostaneme odlisna data od puvodnich. Tyto bugy jsou dlouhou dobu neresene.

Jak vidite atomicita sql statementu je pro mysql/isam prakticky nedosazitelny highend.

Nejake dalsi otazky?
Suchý čert aura:94
22. 4. 2009 22:45 Nový

Re: mysql a atomicita statementu

celé vlákno

1.
V prvni rade musite umet detekovat ze vam mysql samo od sebe zbuchlo nebo ze vam spadnul OS. Havarie OS ty dejme tomu budeme umet spolehlive detekovat, ale mysql je udelane tak ze kdyz crashne tak se samo restartne - jak vlastne zjistit ze padlo?.

Automatický restart zařizuje nějaký pomocný skript, který vůbec není nutné používat.

2.
Budete muset detekovat v aplikaci chybove stavy jako treba UPDATE vice nez 1 radky zarvalo protoze doslo misto na disku.

Aktuální verze se při zaplnění disku chová tak, že se daná operace zablokuje a čeká se, až se nějaké místo uvolní. Pokud vím, tak mimo uvolnění místa se z tohoto stavu lze dostat pouze násilným ukončením serverového vlákna, které tu operaci provádí, sama aplikace s tím nemůže už nic udělat.

3.
Takze detekce zda se vam vubec podelali nejaka data neni zrovna trivialni. Vetsina mysql aplikaci ignoruje nejake navratove kody, proste tam jen vali sql statementy.

4.
Fajn takze i kdyz sance ze zjistime potencionalni poskozeni dat je velmi mala rekneme ze to na 100% zvladame. Kdyz se to zjisti tak se musi zashutdownovat databaze co mozna nejdrive abychom zabranili dalsi ztrate dat - uzivatele vkladaji data do poskozene databaze. Ma na to vubec nami pripojena aplikace prava?

Tyhle dva body nechápu. K poškození dat může dojít pokud server spadne nebo ho násilně ukončíme, v obou případech už ale server neběží a aplikace se k poškozeným datům nedostanou.

5.
Pak je potreba udelat restore ze zalohy, vybrat spravne binarni logy od posledni zalohy a prehrat je. Zrejmne dost rucni prace admina.

Tak najít log s nejvyšším číslem a pustit ty tři nebo kolik příkazů zas tolik práce není. :-)

Tomáš Vondra aura:86
24. 4. 2009 18:40 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Aneb krásný příklad jak si marketing dokáže chytrou formulací udělat z průseru skvělou featuru ;-) Sice vám nezaručíme integritu dat, ale zato je to strašně rychlé!
Tomáš Vondra aura:86
24. 4. 2009 18:23 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Já samozřejmě chápu myšlenku toho článku (zhruba "Nezneužívejte LIKE operátor k dotazům nad nedostatečně normalizovaným schématem!") ale trochu mi tam chybí nějaké jasné shrnutí kdy je použití LIKE operátoru v pořádku a kdy to zavání čuňárnou.

Totiž vyjdeme-li z toho že článek je určen hlavně těm kdo si popisované problémy neuvědomují, hrozí že to buď vůbec nepochopí a nebo přejdou k opačnému extrému (LIKE je absolutně fuj a kdo ho použije není skutečný programátor!) zhruba ve stylu příkazu GOTO. Na školách se učí že je to fuj, tak si spousta programátorů myslí že je to fuj ... a přitom v některých případech je jeho použití zcela korektní (viz. například http://kerneltrap.org/node/553)

No ale hlavně se bojím že obávám že ti kteří by si tento článek měli přečíst především (tj. ti kdo zvěrstva s LIKE páchají) si ho nepřečtou protože si myslí kdoví jak to není fikané - vím o čem mluvím, několik takových individuí která sebe sama nazývají programátory znám.
Raulik
Raulik (neregistrovaný)
22. 4. 2009 2:54 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Napadat zde timto zpusobem cloveka, ktery denne prispiva vyvoji pgSQL, zhruba co mesic vydava clanky zde na rootu, obstarava pgsql.cz, je vzdy ochotny poradit a na rozdil od ostatnich v hlave ma hodne, mi prijde ubohe, zvlast od neregistrovaneho NOT LIKE(AUTORa). Jsi ubohy chlapce.
N/A
N/A (neregistrovaný)
22. 4. 2009 6:08 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
mozna ubohy, ale ma pravdu. na zacatku autor nadava na LIKE, pak predvede priklad, na kterem se snazi chybne pouziti LIKE predvest, ale predvadi pouze app. s chybnym navrhem... atd.

velmi slaby clanek.

a je mi uplne jedno, kolik domen autor provozuje, co na ne pise a kam prispiva. hodnotim clanek, nikoli barvu autorovych oci.
pepak
pepak (neregistrovaný)
22. 4. 2009 6:14 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Je to tak. V principu by šlo se článkem souhlasit, kdyby ovšem byl formulovaný ve stylu "LIKE je často použit chybně, lepší je nahradit ho tak a tak". Ale tady je stavěný do pozice "existuje špatné použití operátoru LIKE, tudíž je operátor LIKE špatný a kdo ho používá je blbec", a to je prostě jednoznačně špatně.
Xerces
Xerces (neregistrovaný)
22. 4. 2009 9:07 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Je to možná malinko přesazené, ale všichni se tady prsíte jako že tenhle problém neexistuje a on existuje a je to skutečně problém který není jen technický jak je z článku, kterému je vytýkána omáčka, patrné. Samozřejmě root čtou samý technicky uvažující lidé, kterým je hned všechno jasné :-D ale mě příjde forma i rozsah článku absolutně ok a dobře se mi to četlo. Asi proto, že s tím občas v práci taky bojuju ;-)
martin
martin (neregistrovaný)
23. 4. 2009 9:47 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Ale přece o tom ten článek je -- o tom, že je potřeba se 2x zamyslet, než použijete LIKE.
A na reálném příkladu ukazuje, že to co se na první pohled může zdát jednodušší (tj. držet si data pohromadě a použít LIKE) v důsledcích vede jen k problémům. Bohužel spousta lidí nemá dostatečné znalosti o fungování relačních databází a vůbec tak nedokáže posoudit, co je správné řešení (chybná úvaha "musel bych k tomu připojovat další tabulku -- bylo by to pomalé") -- tady si tito lidé můžou přečíst a na příkladech vyzkoušet co opravdu funguje lépe.
Tomáš Vondra aura:86
24. 4. 2009 18:29 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Ne že bych k článku neměl výhrady, ale o demonstraci nevhodného použití operátoru LIKE snad šlo, ne? A to že někdo použije operátor LIKE namísto toho aby data správně normalizoval a použil standardní porovnání je celkem častým problémem (věřte nebo ne).

Samozřejmě, LIKE operátor má spoustu dalších problémů (například výkonnostních - osobně jsem řešil výkonnostní problémy u jednoho e-shopu který LIKE používal pro fulltextové vyhledávání v popisech výrobků a i při minimální zátěži 100% vytěžoval SCSI disky protože generoval soustaný datový tok přes 80 MB/s), ale to nebylo tématem tohoto článku, ne?
ldx
ldx (neregistrovaný)
22. 4. 2009 23:18 Nový

Re: Arogantní text bez komplexního přemýšlení

celé vlákno
Souhlasim s tim, ze takovy clanek nepatri na root, ale na zive nebo lupu, kde se takovi koderi, co jsou schopni spachat vyse popisovane spis vyskytnou. Predpokladam, ze na root lamy moc nechodi. Clanek by taky klidne moh zabrat tak tretinu objemu, ja jsem se po precteni par odstavcu priserne nudil... napriklad rozdil mezi normalizovanou a nenormalizovanou databazi by pokryl jeden odstavec, neni nutne omilat deset prikladu. A podle meho nazoru operator LIKE muze byt za urcitych podminek celkem uzitecny, stejne jako treba regularni vyrazy.
t42
t42 (neregistrovaný)
22. 4. 2009 2:21 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
takove clanky prave na root patri, i kdyz by mozna mohl byt malinko kratsi. Celkove ale skvela prace, za kterou patri velky dik!

jinak LIKE je v urcitych pripadech OK, napriklad pokud ma formu napriklad 'hledaneslovo%'. Ovsem forma '%hledaneslovo%' je opravdu silenost nejvetsi
xurpha
xurpha (neregistrovaný)
22. 4. 2009 5:50 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
A to je ta databáze tak blbá, že nedokáže „LIKE '%asdf%'“ optimalizovat na „= 'asdf'“? (Když už stejně provádí tuny dalších optimalizací?)
Mastodont
Mastodont (neregistrovaný)
22. 4. 2009 6:43 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
A jak byste si takovou optimalizaci představoval? :-))) Dejme tomu, že bych měl tabulku knih se sloupcem Obsah, kde by byla hodnota třeba
"Výskyt střevlíků v Krkonoších."
Jak by databáze měla optimalizovat "select * from tab where obsah LIKE %střevl%" na "select * from tab where obsah = 'střevl' ??
Kamil Podlešák aura:100
22. 4. 2009 9:06 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
V podstatě jediná možnost je fulltext, a to žádná databáze (pokud vím) sama neudělá.
tomas z.
tomas z. (neregistrovaný)
22. 4. 2009 9:50 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Otázka je co znamená sama, třeba v téhle (placené rozšíření) to stačí nastavit.

http://sql602.sourceforge.net/helpdir-cs/xml/html/fulltext.html
Pavel Stěhule aura:89
22. 4. 2009 10:27 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Ono to ani nejde - like %neco% může najít něco jiného než fulltextový operátor. Like porovnává znak po znaku, kdežto fulltext po tokenech (dalo bz se to přirovnat, ke slovům). K tomu se ještě tokeny převádí na lexémy - fulltext dohledá žlutý, žluté, žlutá - to může být (podle nastavení) jeden token.

Existuje metoda, jak připravit index, který by dokázal akcelerovat vyhledání podřetězců v řetězci. Má jen jednu dost velkou vadu. Výsledný index je řádově větší než indexovaná data.
Kamil Podlešák aura:100
22. 4. 2009 11:04 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Samozřejmě, fulltext by fungoval jinak, to je právě důvod proč nemůže být LIKE nahrazen fulltextem v rámci optimalizace přímo databází.

Ovšem z hlediska aplikace je 90% oprávněných použití operátoru LIKE nahraditelných fulltextem.
Pavel Stěhule aura:89
22. 4. 2009 11:20 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
ju, souhlas
Tomáš Vondra aura:86
24. 4. 2009 18:59 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Tak existují samozřejmě databáze které fulltext přímo obsahují, ale dává to pochopitelně obecně jiné výsledky než LIKE operátor. Otázkou je čeho chcete dosáhnout - většina problematických použití LIKE se kterými jsem se setkal byla triviálním pokusem o fulltext.

A k tomu už existují vhodnější projekty - ať už tsearch2, nebo například Lucene (osobně dávám přednost Lucene, ačkoliv jsem velký příznivec PostgreSQL).
Lael Ophir
Lael Ophir (neregistrovaný)
23. 4. 2009 20:57 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Autor příspěvku se možná snažil říci, že pokud hledáte '%střevl%', tak výsledek musí obsahovat i výsledek hledání 'střevl%' a '%střevl'. DB může tyhle věci vracet na prvním místě, protože se k nim díky indexu dostane výrazně rychleji, než k '%střevl%'. Kdo si počká, dočká se nakonec i výsledků hledání '%střevl%'.

V praxi to samozřejmě nemá moc význam, datový model musí být slušně navržený.
Tomáš Vondra aura:86
24. 4. 2009 19:02 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Což je ovšem úplně k ničemu pokud ty výsledky chcete třídit podle daného sloupce (například podle ID). V tom případě musí databáze stejně načíst všechny výsledky, setřídit a až potom může vracet uživateli.

Nehledě na to že problematická použití LIKE operátoru se většinou týkají větších textů (například popisy výrobků v e-shopu), zhusta HTML formátovaných, takže pravděpodobnost že najdete dané slovo hned na začátku textu je mizivá (už proto že tam nejspíš bude nějaká HTML značka).
Lael Ophir
Lael Ophir (neregistrovaný)
21. 5. 2009 18:28 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Jak jsem říkal, v praxi mnou popsaný efekt nemá velký význam.

Používat LIKE jako náhradu fulltextu je samozřejmě hrubě špatně.
Tomáš Vondra aura:86
24. 4. 2009 18:55 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Ano, ta databáze je tak "blbá" že vám tuto nesmyslnou optimalizaci neprovede. Ono totiž ty dvě podmínky nejsou ekvivalentní.

Některé LIKE dotazy optimalizovat lze (například postfixové dotazy, tj. dotazy "retezec%" lze optimalizovat pomocí indexů), ale většina je bohužel "neoptimalizovatelná" :-(
uživatel si přál zůstat v anonymitě
22. 4. 2009 7:49 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Ovsem forma '%hledaneslovo%' je opravdu silenost nejvetsi
Co to je za plk?
Sten
Sten (neregistrovaný)
22. 4. 2009 12:58 Nový

RE: Úvaha ohledně zneužívání LIKE v databázích

celé vlákno
Ovsem forma '%hledaneslovo%' je opravdu silenost nejvetsi

Co třeba když hledáte Karlovo náměstí (náměstí Karlovo, nám. Karlovo, Karlovo nám. ap.)?

WHERE `ulice` LIKE '%Karlovo%'
Trm
Trm (neregistrovaný)
22. 4. 2009 4:14 Nový

1NF je historicky nesmysl

celé vlákno
Mno, nechci se dotknout pana autora, ktery je urcite znalec, ale 1NF vznikla jako historicky prehmat E. Codda koncem 60. let a od te doby se o ni siri dost bludy. V te dobe to mozna nekomu prislo primocare, ze data jsou pouze integery a retezce (viz Codduv paper), ale prece jen, doba pokrocila a v dnesni dobe neni zasadni problem (technicky ani logicky) mit jako data cokoliv, na cem lze definovat usporadani, coz jde klidne i na serializovanych objektech, mimochodem. Souhlasim s tim, ze LIKE je v podstate na pytel a pro lamy, ale argumentovat pri zduvodneni takovymi brontosaury jako je 1NF je mimo misu.
Pavel Stěhule aura:89
22. 4. 2009 6:31 Nový

Re: 1NF je historicky nesmysl

celé vlákno
Ne tak úplně rozumím Vašemu příspěvku. Data klidně mohu mít serializovaná, ale musím mít bokem další informaci, kde mi co začíná (a případně končí). A teď záleží na tom, zpracovávaná data jsou ro nebo rw. Pokud mám strukturovaná data a odpovídající prostředky, tak jsem vždy schopný snadno vytahnou požadovanou podmnožinu dat a jsem schopný stejně tak snadno provést aktualizaci. Toto je praktický důsledek 1NF. Jde o to, aby se výpočetní síla neztrácela v zbytečném a opakovaném parsování. Pokud jsem schopný těchto činností, pak 1NF neporušují ani "nové" datové typy v SQL jako jsou struktury nebo pole. Vždy jsem tam schopný snadno pracovat jednotlivě (a to ať už s prvkem pole nebo položkou struktury).

1NF je zásadní z pohledu aplikačního vývojáře. Co je hlouběji, je už jiná oblast. Tam dochází k serializaci - a např. u PostgreSQL se serializuje celý záznam, nikoliv jednotlivé položky záznamu. Ale to už je pro programátora transparentní, a stará se o to systém.

Určitě si nemyslím, že by 1NF byla historický nesmysl. Zdaleka ne a nevidím jediný důvod, proč by 1NF měla v dohledné (nebo nějaké) době zaniknout¨¨¨¨¨
uživatel si přál zůstat v anonymitě
24. 4. 2009 23:14 Nový

Re: 1NF je historicky nesmysl

celé vlákno
Přiznávám že jsem na tom stejně jako Pavel Stěhule, taky jsem nějak nepochopil co jste vlastně chtěl sdělit :-(

Naprosto nesouhlasím s tím že by 1. normální forma byla historický přehmat nebo snad nesmysl (ale budu rád pokud mne z mého života v bludu vysvobodíte). Totiž základní definice 1. normální formy říká jen a pouze to že se jedná o relaci, tj. podmnožinu kartézského součinu domén jednotlivých "sloupců". Tudíž 1. normální forma je naprostým základem relačních databází, protože je "spojkou" na relační algebru která je teoretickým základem relačních databází.

E. F. Codd (a další) k této základní definici přidává ještě podmínku atomičnosti dat, tj. to že každý sloupec obsahuje pouze dále "nedělitelné hodnoty" a to v tom smyslu že sloupec například obsahuje nejvýše jednu e-mailovou adresu (a nikoliv několik e-mailových adres oddělených například čárkami).

Poněkud mi také uniká smysl vaší zmínky o datových typech. Původní Coddův článek tu nemám, takže netuším jestli v něm skutečně pracoval pouze s dvěma vámi uvedenými datovými typy (integer a text), ale ani bych se tomu nedivil protože cílem jeho článku nebylo zavést kompletní plejádu datových typů ale definovat relační model dat. No a k tomu ty dva datové typy naprosto bohatě postačují, a celý článek je přehlednější.

Nehledě na to že konkrétní datové typy jsou pro samotnou definici 1. NF zcela irelevantní! Ona je to totiž pouze otázka kódování hodnot - je jedno zda datum uložím jako text v daném formátu, jako unix timestamp (tj. integer) nebo nějak jinak, pořád je to datum. A pořád jde o to jestli jsou hodnoty atomické, tj. dále nedělitelné!

No a vzhledem k tomu že se jedná o relaci a tedy vlastně množinu (která je ze své podstaty neuspořádaná), nechápu váš výrok "mit jako data cokoliv, na cem lze definovat usporadani". Zaprvé uspořádání je vždy definováno vzhledem k něčemu (sloupci, způsobu porovnání hodnot, apod.), zadruhé to s 1. NF nijak nesouvisí.

A je to asi ohraná písnička, ale můžete nám vysvětlit jak to myslíte s těmi serializovanými objekty? Pomiňme otázku koncepčních rozdílů mezi relačním a objektovým modelem dat - zajímá mne co vlastně myslíte tou serializací. Pokud serializujete celý objekt do jediného stringu která následně uložíte do jediného textového sloupce v klasické relační DB, tak hodně štěstí - to je totiž naprosto jasné porušení pravidel 1. NF a nekouká z toho nic dobrého! Pokud ale do databáze uložíte jednotlivé datové property objektu odděleně (tj. do samostatných sloupců), pak splňujete 1. NF a není to nic proti ničemu.

Ostatně přesně tohle dělají různé ORM nástroje (mapují objekty na relační tabulky a jejich property na sloupce), i objektové databáze (které definují "virtuální sloupce" nad serializovanými objekty které víceméně fungují jako ekvivalent řádek tabulky).

Definice a popis 1. NF například viz. http://en.wikipedia.org/wiki/First_normal_form.
Lael Ophir
Lael Ophir (neregistrovaný)
25. 4. 2009 19:28 Nový

Re: 1NF je historicky nesmysl

celé vlákno
Naprosto s vámi souhlasím. Jenže v posledních letech se vyskytla potřeba ukládat do DB například XML. To se dnes řeší tak, že se do jednoho "stringového" pole uloží celé XML. To XML potom indexujete zvlášť. Jde svým způsobem o porušení první normální formy. Ovšem předchozí řečník to zcela nesprávně interpertuje tak, že 1NF je přežitý nesmysl. Taková interpertace nejspíš plyne z nepochopení problematiky.
Petr
Petr (neregistrovaný)
22. 4. 2009 7:08 Nový

opakování je matka moudrosti

celé vlákno
dobrý článek, byť se některým "expertům" zdá triviální, tak já ho považuji za velmi užitečný
Lael Ophir
Lael Ophir (neregistrovaný)
23. 4. 2009 20:59 Nový

Re: opakování je matka moudrosti

celé vlákno
Experti vědí, "experti" se učí, neschopní se nepoučí, a idioti se ani neučí.
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 7:47 Nový

Pocitace vs clovek

celé vlákno
Pocitace by meli slouzit cloveku a ne naopak. Pokud je pozadavek, ze ma byt volne-textova poznamka a v te se ma dat vyhledavat (nebo i vyhledavat napr. podle casti jmena), tak je LIKE zcela na miste.

Popsany priklad je samozrejme prasarna, o tom zadna.

A na konec poznamka: LIKE '%jmeno.prijmeni@firma.cz%' je i tak spatne. Pak to na dotaz na dokumenty uzivatele anna.novakova@firma.cz najde i dokumenty patrici marianna.novakova@firma.cz. To chce mit to ulozene ve forme ;email1@firma.cz;email2@firma.cz;email3@firma.cz; a nasledne hledat '%;jmeno.prijmeni@firma.cz;' :-)
Franta Kučera aura:79
22. 4. 2009 14:02 Nový

Re: Pocitace vs clovek

celé vlákno
„tak je LIKE zcela na miste“
Spíš to vypadá, že selhal analytik dané aplikace a nedokázal objevit uživatelem požadovanou funkcionalitu – uživatel na to pak rezignoval a řeší tím, že si píše poznámky a následně v nich vyhledává (to je ten IS uvnitř IS, o kterém se píše v článku).
Sten
Sten (neregistrovaný)
22. 4. 2009 14:09 Nový

Re: Pocitace vs clovek

celé vlákno
V některých případech, kdy přebíráte data z jedné strany a dotazy z druhé strany a vy jste uprostřed a nemůžete ovlivnit ani jednu stranu, tak vám často nic jiného nezbývá. Samozřejmě pokud děláte IS pro konkrétního uživatele, tak je potřeba to zvážit v návrhu.
Tomáš Vondra aura:86
24. 4. 2009 23:38 Nový

Re: Pocitace vs clovek

celé vlákno
Nehledě na to že uživatelé často nejsou schopni specifikovat co všechno chtějí, a když zjistí že jim tam něco chybí tak si přiohýbají aplikaci za pochodu namísto korektního rozšiřování pomocí change requestů (například právě tím že poznámku zneužívají pro ukládání dalších informací, a úspěšně tak sabotují 1. NF).

Ale pochopitelně existují i aplikace (ať už historické nebo nové) kde to rádobyanalytik takto navrhnul a rádobyvývojář zbastlil.
Xerces
Xerces (neregistrovaný)
22. 4. 2009 19:37 Nový

Re: Pocitace vs clovek

celé vlákno
Nj, když uživatel pořádně neví co chce, tak to analytik moc nezachrání. :-D
Sten
Sten (neregistrovaný)
22. 4. 2009 14:06 Nový

Re: Pocitace vs clovek

celé vlákno
To chce mit to ulozene ve forme ;email1@firma.cz;email2@firma.cz;email3@firma.cz; a nasledne hledat '%;jmeno.prijmeni@firma.cz;' :-)

To je samozřejmě také blbě, správně to chce mít další tabulku s e-maily propojenou s uživatelskou přes cizí klíč.

Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 14:17 Nový

Re: Pocitace vs clovek

celé vlákno
O tom je cely clanek. Mne jen zaujalo, ze reseni, ktere prezentuje, je nespravne nejen pouzivanim LIKE kde se nema, ale celkove. :-)
Pavel Stěhule aura:89
22. 4. 2009 14:24 Nový

Re: Pocitace vs clovek

celé vlákno
dávám jak jsem dostal.
Eddy Neilo
22. 4. 2009 8:09 Nový

Nešlo by to napsat jinak?

celé vlákno
Článek je sice jasný a řeší dobré téma, to je fakt, ale způsob jakým problém prezentuje je hrozný. Jak už tu bylo řečeno článek je zbytečně dlouhý a pocitu arogantniho vyznění článku se taky nemohu ubránít. Jsem ale přesvedčený, že to nebylo cílem. Ale věta "Věřte nebo nevěřte, tento komplikovanější příkaz bude rychlejší (při objemu dat větším než malém)" na mě působí dojmem, wow teďka jsem vám řekl informaci co jste určitě netušili a vyrazí vám dech.

Zajímalo by mě komu je článek prmárně určen? Předpokládám, že v každém kurzu databází ať již na střední nebo na vysoké škole se normální formy, užití spojovací tabulky při vazbě m:n a vhodnost uváženého užití LIKE učí. Já si to prošel na střední i na vysoké a pokaždé to tam bylo. Předpokládám, že to bude i v každé knížce věnované databázím.

V žádném případě to není útok na autora, evidentně ví o čem píše, ani na obsah, ale na formu článku. Nešlo by prostě napsat méně rozsáhlý článek o tom, že takové a takové špatné navržení databáze, dotoho ještě neuvážené použítí LIKE je výpočetně náročná prasárna a přpojit výsledky měření při různých situacích a objemu dat?
Xerces
Xerces (neregistrovaný)
22. 4. 2009 9:11 Nový

Re: Nešlo by to napsat jinak?

celé vlákno
To je právě to, všude se to učí, všude to píší, ale pořád je to prd platný. Jeden článek na tohle téma navíc přeci nemůže uškodit, spíše naopak. A tím stylem psaní se aspoň přes negativní asociaci víc vryje do hlavy :-D
Franta Kučera aura:79
22. 4. 2009 14:04 Nový

Re: Nešlo by to napsat jinak?

celé vlákno
Ono se to sice všude učí, ale do praxe se pak dostanou i zcela nepoznamenaní samouci podle kterých je samozřejmě jakákoli VŠ ztráta času :-D
Lael Ophir
Lael Ophir (neregistrovaný)
23. 4. 2009 21:08 Nový

Re: Nešlo by to napsat jinak?

celé vlákno
Problém je, že učit není totéž co naučit. Pokud takovou věc provede absolvent, měl by spálit diplom, a jeho popel si sypat na hlavu.
kaapo
kaapo (neregistrovaný)
22. 4. 2009 14:30 Nový

Re: Nešlo by to napsat jinak?

celé vlákno
Mne se naopak rozsahlost clanku libi a libi se mi na nem i ty detailni priklady, ktere si hned clovek muze odzkouset aniz by to vymejslel cely sam. A navic pro nekoho mene znaleho to znamena i priklady na ne zrovna caste veci (generovani dat).

V praxi je dulezite se od neceho odpichnout. Ano, ja vim, ze dokumentace k PSQL je opravdu rozsahla a kvalitni, ale kdyz vim, co potrebuju, ale nevim nazvy funkci, tak se to blbe hleda. Tady je funkcni priklad v kontextu jednoducheho testu a to je ten zaklad, ktery je potreba. Pak uz se da v pohode pouzit dokumentace, protoze byl nalezen "vstupni bod" :)
supervisor
supervisor (neregistrovaný)
22. 4. 2009 23:06 Nový

Re: Nešlo by to napsat jinak?

celé vlákno
Jiste. Stacilo napsat: Mrknete se na normalni formy, mnohym by to asi pomohlo. Dekuji a naschle.

Jenze to by si Pan Autor pripadal nejspis malo zajimavy. Cele je to jen zbytece a nesmyslne protazeny bezny zaklad databazovych znalosti a ze dneska kdektery programatora neni dabatabazista snad vsichni vime.
mich
mich (neregistrovaný)
22. 4. 2009 23:53 Nový

Re: Nešlo by to napsat jinak?

celé vlákno
To je dobrý nápad...některé knihy o programování v Javě by pak mohli vypadat následovně: "Spring, Hibernate.".
melkor
melkor (neregistrovaný)
22. 4. 2009 8:27 Nový

Tentokrat se pridam ke kritikum

celé vlákno
To, ze se obcas LIKE pouziva vyznacne blbe, jeste neznamena, ze je na tri veci. Pri vhodnem pouziti je IMHO nenahraditelny. Jen to chce take trosku premyslet ...

Takze ani z ankety jsem si nevybral - spravna odpoved by IMHO mela byt: Podle okolnosti.

Obdobnym zpusobem (jako v clanku) by se daly najit priklady udesneho pouziti takrka na cokoli, vcetne operatoru =. Kuprikladu index case sensitive a vyhledavani case-insensitive SELECT * FROM TBL WHERE UPPER(NAME)=UPPER(jmeno)
Neco podobneho jsem uz videl na vlastni OKi :-(
neutral female gnomish Fl
neutral female gnomish Fl (neregistrovaný)
22. 4. 2009 8:51 Nový

Re: Tentokrat se pridam ke kritikum

celé vlákno
jasně :)

to že je blbě návrh DB ještě neznamená že je nějaký SQL příkaz na prd .)
atarist
atarist (neregistrovaný)
22. 4. 2009 9:05 Nový

Re: Tentokrat se pridam ke kritikum

celé vlákno
a jak bys to napsal jinak? Uznavam, jsem DB ignorant, ale s tim upper mi to prijde koser, i kdyz se samozrejme rozhodi indexy, o tom zadna (ale kdyz je takovy pozadavek...).
Pavel
Pavel (neregistrovaný)
22. 4. 2009 10:09 Nový

Re: Tentokrat se pridam ke kritikum

celé vlákno
Např.
materializovaný pohled s indexem
počítaný sloupec s indexem
funkční index

Záleží na tom, co podporuje DB. V nejhorším případě je možné přidat nový indexovaný sloupec s hodnotou UPPER(NAME) a aktualizovat ho manuálně.
melkor
melkor (neregistrovaný)
23. 4. 2009 8:02 Nový

Re: Tentokrat se pridam ke kritikum

celé vlákno
Nebo (nejjednodussi cesta) dalsi index podle UPPER(NAME)
melkor
melkor (neregistrovaný)
23. 4. 2009 8:04 Nový

Re: Tentokrat se pridam ke kritikum

celé vlákno
Omluva za slepotu - jeste jsem nemel ranni kafe ...
Clock
Clock (neregistrovaný)
22. 4. 2009 9:10 Nový

GOTO je nemetodicke a kazi programy

celé vlákno
Prohlasil Rudolf Kryl.

clock@duke:~/links-current$ fgrep goto *.[ch] | wc -l
1038

Tyhle dogmata osrat.
atarist
atarist (neregistrovaný)
22. 4. 2009 9:23 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Ale jo, goto ma sve pouziti, zejmena v jazycich, ktere nemaji vyjimky a jen omezene moznosti vyskoku ze smycek (jasne, myslim ted cecko). Ono vlastne to goto v cecku tak hrozne neni, je dost omezene, kam se da skakat (narozdil od basicu, kde se da klidne skocit doprostred subrutiny nebo radku s DATA), to takovy longjmp() je zajimavejsi :-)

Jiste, puriste namitnou, ze se goto da nahradit strukturovanym programovanim. Da, ale brano do dusledku by nam dostacoval jen nejaky rekurzivne vycislovany jazyk (bez smycek) nebo simulator Turingova stroje (v podstate se jedna Brainf*ck), tam taky goto neni :-)))
Ksl
Ksl (neregistrovaný)
22. 4. 2009 16:36 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Skuteční puristé namítnou, že goto se dá nahradit tail cally...
JS
JS (neregistrovaný)
22. 4. 2009 19:22 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Chtel bych videt, jak byste psal stavovy automat pres tail cally. Nerikam, ze to nejde, ale otazka je, zda je to citelnejsi.
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 19:56 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Proc bych ho psal zrovna pres tail cally? Jednak ho nemusim psat vubec, protoze na matchovani retezcu regularnim vyrazem jsou knihovny a i kdyby mi to z duvodu optimalizace nevyhovovalo, tak tipuju, ze v RDBMS jsou podstatne obtiznejsi ulohy, nez prevod regularniho vyrazu na konecny automat ;-)
uživatel si přál zůstat v anonymitě
22. 4. 2009 20:20 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Tak zrovna konecny stavovy automat pres tail-cally neni takova hruza. Mate co stav, to funkci a prechod do stavu=volani funkce. Horsi je nahrazeni jinych pouziti goto.
Ksl
Ksl (neregistrovaný)
22. 4. 2009 20:33 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Jednoduše. Každý stav je jedna funkce a každý přechod mezi stavy je jeden tail call. Stavy jsou pěkně pojmenované (jako funkce) a při přechodu z jednoho stavu do druhého se snadno předávají případné parametry (pokud je potřebuju).

Vy byste radši měl smyčku se switchem a měnil stavovou proměnnou, nebo dokonce používal goto? Neříkám, že to nejde, ale otázka je, zda je to čitelnější.
BLEK.
BLEK. (neregistrovaný)
24. 4. 2009 3:51 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Takhle udělaný stavový automat přes tail cally ti bude konzumovat množství zásobníku lineárně závislé na množství projitých stavů. Gcc sice ty tail cally umí optimalizovat na skoky, ale nedělá to vždy (tato optimalizace nejde dělat, pokud se ve funkci vyskytuje pointer na proměnnou zásobníku a není možné dokázat, že ten pointer "neutekl" mimo tu funkci) a navíc to uživatel nemusí kompilovat pomocí gcc nebo nemusí zapnout optimalizace.

Tady není otázka, zda to je nebo není lépe čitelné, tady je problém, že takhle napsaný stavový automat nebude při dostatečně dlouhém vstupu fungovat.
JS
JS (neregistrovaný)
24. 4. 2009 5:27 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Taky jsem si to myslel, ale nebyl jsem si jisty. Diky.
Ondra "Satai" Nekola aura:82
22. 4. 2009 11:32 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Od kdy je links prikladem hodnym nasledovani?
Clock
Clock (neregistrovaný)
22. 4. 2009 12:28 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Nemyslim, ze by se to dalo takhle kategorizovat, jestli je Links hodny nebo nehodny nasledovani. Links ma urcite dobre a spatne vlastnosti. Pro nekoho jsou dulezitejsi ty dobre vlastnosti pro nekoho zas ty spatne. Nasledovanihodnost tak zavisi na pozorovateli.
mtd aura:38
mtd
22. 4. 2009 11:38 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
no, ono to dogma o nepouzivani goto pochazi z jednoho clanku, kteri nekteri ctenari pochopili opacne nez byl myslen a pak zacli ten nazor sirit.

je to vlastne takove legracni, protoze ve zkompilovanem programu ty skoky stejne jsou, i kdyz ve zdrojaku nejsou. to same plati pro javu a pointery. java jako jazyk nenabizi pointery, ale javovy bytekod je pouziva.
Clock
Clock (neregistrovaný)
22. 4. 2009 12:26 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Vsak zkompilovany jazyk je nemetodicky. Proto je treba pouzivat interpretovane jazyky.
melkor
melkor (neregistrovaný)
23. 4. 2009 8:07 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Prikaz GOTO bych prirovnal k airbagum.
Za jistych okolnosti je nutne a nenahraditelne, ale rozhodne bych ho nepouzival denne.
IO
IO (neregistrovaný)
23. 4. 2009 11:13 Nový

Re: GOTO je nemetodicke a kazi programy

celé vlákno
Jestli je links splácaný tak strašným způsobem, jako je splácaná elektronika Ronji, tak se ani nedivím :)
Bobrnautus
Bobrnautus (neregistrovaný)
22. 4. 2009 9:16 Nový

To teda čumím.....

celé vlákno
to Vám na rootu emigrovali všichni autoři, že pouštíte i toto? Tvrdit, že like je špatný a kdo ho používá je blb mi příjde hodně arogantní, pokud má autor - expert největší - jinou metodu, jak v databázi najdu slova obsahující slovo bobr, rád si ji poslechnu.
atarist
atarist (neregistrovaný)
22. 4. 2009 9:26 Nový

Re: To teda čumím.....

celé vlákno
no vsak je to v clanku popsano ne? Pokud je pozadavek na extremne rychle vyhledavani, musi se puvodne nestrukturovany text rozsekat do navazbenych tabulek. Predpokladam, ze napriklad takovou adresu mas v databazi rozsekanou na ulici, mesto, PSC ne? Nebo se snad ma vyhledavat stylem select * from address where addr like '%110 00%', kdyz hledam vse s PSC 110 00? Samozrejme jeste lepsi je mit ulice a mesta zase v dalsich tabulkach.
Bobrnautus
Bobrnautus (neregistrovaný)
22. 4. 2009 10:32 Nový

Re: To teda čumím.....

celé vlákno
Ok, svůj předchozí příspěvek jsem trochu přehnal, autorovi se omlouvám, v mnoha ohledech je článek velmi použný a dobře napsaný, ale tvrdit, že kdo používá LIKE je principiálně lempl, což z článku tak trochu vyplývá, to mi nepříjde OK...
Jirka
Jirka (neregistrovaný)
22. 4. 2009 9:32 Nový

Re: To teda čumím.....

celé vlákno
Cetli jsme stejny clanek?

Clanek preci nerika, ze LIKE je spatny, ale ze se pouziva i tam, kde se pouzivat nema. Jinymi slovy, nejde o to, jak najit bobra, ale o to, ze ho casto ani nikdo hledat nema.
Honza
Honza (neregistrovaný)
22. 4. 2009 10:12 Nový

Re: To teda čumím.....

celé vlákno
Clanek preci nerika, ze LIKE je spatny? Já bych řekl, že říká.

...tvrdím, že programátor, který použije LIKE, si koleduje o to nebýt programátorem...
Z mého pohledu operátor LIKE podporuje šlendrián v programování...
...SQL tomu jakoby samo nahrává - obsahuje datový typ varchar (případně text) a operátor LIKE...
Dovolím si předpokládat, že bez operátoru LIKE by se o toto uživatel nesnažil....
Jirka
Jirka (neregistrovaný)
22. 4. 2009 11:48 Nový

Re: To teda čumím.....

celé vlákno
Clanek jsme tedy asi stejny cetli. Ted jeste ho stejne pochopit a nehledat v tom za kazdou cenu neco, co v nem neni.
melkor
melkor (neregistrovaný)
23. 4. 2009 8:10 Nový

Re: To teda čumím.....

celé vlákno
Tak ja tedy nevim, ale i na mnoho dalsich clenek zapusobil dojmem, ze autor zcela a uplne odmita operator LIKE a kazdeho, kdo ho pouzije, dava do klatby :-)
Pavel Stěhule aura:89
22. 4. 2009 10:35 Nový

Re: To teda čumím.....

celé vlákno
Netvrdím, že kdo používá like je blb, ale tvrdím, že neumí programovat nebo kašle na to, co dělá. Asi jako truhlář, který vyrobí křivý stůl, židle, kde každá noha je jinak dlouhá. K vyhledávání slov v databázi je tu fulltext, což je uvedeno v závěru článku.
Bobrnautus
Bobrnautus (neregistrovaný)
22. 4. 2009 11:45 Nový

Re: To teda čumím.....

celé vlákno
Rád bych se Vás zeptal na řešení následujícího problému: Na serveru je databáze popisů výrobků, hezky zindexovaná, hodnota ft_min_word_len nastavena na klasickou 4... Správce je trochu paranoidní a tak máte SQL účet s právy, které Vám nedovolí úpravy databáze. Vy jakožto programátor máte udělat jednoduché vyhledávání v textu těch popisů, fulltext se pro to krásně hodí, stačí jeden match .... against dotaz a je vymalováno. Ale co když příjdu já a začnu hledat výrazy OKI, LG, AEG, RAM, pošlete mě do jiného e-shopu? Netvrdím, že like není nadužíváno, rozhodně je, ale ne vždy je jiné elegantní řešení a to že ho občas někdo použije neznamená, že neumí programovat nebo kašle na to, co dělá. Nebo byste toto nějak vyřešil bez like? Pokud ano, tak jste borec. :-)
Pavel Stěhule aura:89
22. 4. 2009 13:44 Nový

Re: To teda čumím.....

celé vlákno
kde nic není ani smrt nebere. Pak Vám nic jiného nezbyde.
Ksl
Ksl (neregistrovaný)
22. 4. 2009 16:35 Nový

Re: To teda čumím.....

celé vlákno
Co bych udělal? Použil třeba tsearch2? ;-)
Tomáš Vondra aura:86
24. 4. 2009 23:51 Nový

Re: To teda čumím.....

celé vlákno
No, paranoia je v případě adminů spíš dobrá vlastnost ;-) A na příliš paranoidní adminy kteří si myslí že kolem nich se svět točí většinou platí management, tj. jděte za businessákem, prezentujte mu problém (Strašný průser! Když budu hledat "LG" tak mi to vůbec nic nenajde! Miliónové ztráty! Nebude na nové Porsche! Ale věděl bych jak to opravit!)

No a pak buď můžete nasadit tsearch2 s lepšími parametry, vytvořit nějaký alternativní fulltext (sám jsem jeden takový dělal, včetně podpory pro skloňování/časování apod. a není to až tak hrozné), a nebo použít něco mimo DB (například Lucene).
Honza
Honza (neregistrovaný)
22. 4. 2009 9:39 Nový

šlendriánský neprogramátor

celé vlákno
Prozradil by pan autor, mistr databáze, mně, pouhému šlendriánskému neprogramátorovi, říci, co je špatné na tom, když uživatel chce např. přes webový formulář najít v tabulce článků o programování všechny, které obsahují třeba slovo 'volatile' nebo třeba podřetězec 'like je na', a co je špatné na tom, když se na to použije LIKE, a jak by to bez LIKE napsal mistr databáze?
atarist
atarist (neregistrovaný)
22. 4. 2009 9:57 Nový

Re: šlendriánský neprogramátor

celé vlákno
fulltext search? nevim, ale pokud by treba Root skutecne vyhledaval ve vsech clancich pomoci operatoru LIKE, asi bysme se vysledku nedobrali :-(

A propo: treba by nam to mohli prozradil sami tvurci Roota, jak je resene vyhledavani
LENIN POWER! aura:41
22. 4. 2009 10:05 Nový

Re: šlendriánský neprogramátor

celé vlákno
ale dobrali. Root ma pocet clanku limutujicich k nule, to by projelo LIKE jedna dve. Krom toho taky lidi tu moc casto asi nevyhledavaji ja tu nevyhledavam ani 1x za mesic.
uživatel si přál zůstat v anonymitě
22. 4. 2009 10:00 Nový

Re: šlendriánský neprogramátor

celé vlákno
No predsa by VOLALITE rozsekal na pismenka a hladal tak :)
Pavel Stěhule aura:89
22. 4. 2009 10:21 Nový

Re: šlendriánský neprogramátor

celé vlákno
Přesně od toho je fulltext. Zkuste např. v 3G databázi mailů včetně attachmentů vyhledávat LIKEm. Uživatel může jít na kafe, a skoro totéž mohou udělat všichni ostatní uživatelé daného systému. A to i v express databázi jako je MySQL. Špatné je na tom to, že se sekvenčně čte velká tabulka, což má za následek zahlcení IO, druhak přepíše Vám to obsah cache, a do třetice - pokud se nepoužije sofistikovanější algoritmus a prohledávají se delší texty, tak to utluče i procesor.
LENIN POWER! aura:41
22. 4. 2009 11:07 Nový

Re: šlendriánský neprogramátor

celé vlákno
v inteligentnich db vam to cache nezahlti ponevadz pokud je velikost tabulky vyrazne vetsi nez velikost buffer cache, tak se jede tablescan nocache prefetch. Podivejte se na execution plan co leze z Oracle nebo db2.
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 11:09 Nový

Re: šlendriánský neprogramátor

celé vlákno
A co kdyz vim, ze v tabulce bude maximalne nekolik desitek zaznamu a text bude dlouhy maximalne nekolik set znaku. To mi taky zahlti IO a utluce procesor? ;-)
Pavel Stěhule aura:89
22. 4. 2009 11:15 Nový

Re: šlendriánský neprogramátor

celé vlákno
tam pak výsledek bude stejný - planner použije sekvenční čtení. Rozdíly začnou být nad 1000 řádků, markantní pak nad 10000 řádků. Pokud mám malý úzký číselník, tak pak bez problémů (pokud nepoužijete ilike).
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 12:14 Nový

Re: šlendriánský neprogramátor

celé vlákno
Ale ja se neptal, jestli se pouzije sekvencni cteni, ale jestli se zahlti IO a CPU.

Takze chcete rict, ze i kdyz mam maly uzky ciselnik (viz moje specifikace vyse), ze pouziti LIKE zahlti IO a CPU??? Nebo je v tomto pripade jeho pouziti bezproblemove?
Pavel Stěhule aura:89
22. 4. 2009 14:14 Nový

Re: šlendriánský neprogramátor

celé vlákno
Odpověděl jsem Vám - planner zvolí sekvenční čtení - z toho plyne stejná zátěž IO a +/- stejná zátěž CPU. Na krátkém řetězci LIKE nebude ani v nejhorším případě extrémně náročný, nicméně porovnávají se řetězce, na druhé straně fulltext bude mít určitou režii s tokenizací, převodem na lexémy, ale pak se porovnávají pouze celá čísla.

PostgreSQL 8.4 umí fultext i na prefixech. Což má pak ještě jednu výhodu. Nevím jestli sledujete stanici Leonardo. Jeden z jejich autorů má příjmení Hora Hořejší. Pak Like 'Hoř%' by Vám nepomohl - uznávám, že se jedná o výjimku. Spíš to uvádím jako ukázku rozvijejících se možností fulltextu, který LIKE částečně eliminuje.

Občas je nutné kombinovat fulltext a LIKE. Fulltext má vyšší selektivitu a pak na vybranou množinu se jako filtr aplikuje LIKE. Pak je to košer.

Vzpomněl jsem si ještě na jeden odstrašující případ. V případě, že máte dohledat například kombinaci tří slov - X, Y, Z .. uživatel do vyhledávacího políčka napíše Praha Soukenicka Smlouva. Takové ty univerzální vyhledávací generující dialogy vyrobí dotaz typu

WHERE
subject ILIKE '%Praha%' AND subject ILIKE '%Soukenicka%' AND subject ILIKE '%Smlouva%' AND body ILIKE '%Praha%' AND body ILIKE '%Soukenicka%' AND body ILIKE '%Smlouva%'

Vidíte problém?
teni
teni (neregistrovaný)
22. 4. 2009 21:33 Nový

Re: šlendriánský neprogramátor

celé vlákno
Taky poslouchám Leonardo, je to príma rádio!
:)
//R
//R (neregistrovaný)
22. 4. 2009 11:35 Nový

Re: šlendriánský neprogramátor

celé vlákno
V některých firmách používajících mysql je to denní chleba. InnoDB fulltext neumí a myisam se často poškodí. Mluvím o cca 20M řádcích.
backup
backup (neregistrovaný)
22. 4. 2009 11:45 Nový

Re: šlendriánský neprogramátor

celé vlákno
zajimalo by me (ze statistickych duvodu) jak velka firma, co dela a jake je to tabulka, co ma 20 M zaznamu.
//R
//R (neregistrovaný)
22. 4. 2009 12:07 Nový

Re: šlendriánský neprogramátor

celé vlákno
Firma je to malá, má odhadem 50 zaměstnanců, programátorů je zlomek. Zmíněná největší tabulka by šla nejlépe popsat jako katalog produktů e-shopu.
Pavel Stěhule aura:89
22. 4. 2009 12:10 Nový

Re: šlendriánský neprogramátor

celé vlákno
cca 300 lidí cca 10 let archiv, poradenství
Pavel Stěhule aura:89
22. 4. 2009 12:13 Nový

Re: šlendriánský neprogramátor

celé vlákno
beru zpět, odpověď na otázku někomu jinému.
Franta Kučera aura:79
22. 4. 2009 14:12 Nový

Re: šlendriánský neprogramátor

celé vlákno
„Zkuste např. v 3G databázi mailů včetně attachmentů vyhledávat LIKEm. Uživatel může jít na kafe“
Soudě podle rychlosti, toto řešení použili v MS Outlooku :-D A to ta schránka měla nějakých ubohých pár set mega, žádné gigabajty :-)
Marv
Marv (neregistrovaný)
22. 4. 2009 10:20 Nový

Drobné rýpnutí

celé vlákno
...a napsat špatné program...

Zato články píše kvalitné. A nebo je z Moravé :-)

Petr
Petr (neregistrovaný)
22. 4. 2009 10:32 Nový

Psáno z pohledu kodéra

celé vlákno
Článek je psán z pohledu kodéra. (To, že se kodér považuje za mistra světa a všechny ostatní považuje za blbce, to je konstanta. To není potřeba vyzdvihovat, takoví jsou všichni.) Kodér neuvažuje nad potřebami uživatele. Kodér neuvažuje nad ekonomií projektu. Kodér neuvažuje nad skutečným fungováním velké firmy, jak dodavatelské tak zákaznické.

Zazlívat systému, že si v něm uživatel udělá víc, nežli bylo původně navrženo ... je krátkozraké. Uživatel potřebuje víc. Udělat to "správně" znamená: vytvořit požadavek; obhájit business case pro přidělení rozpočtu; vyžádat si od dodavatele cenovou nabídku; znovu obhájit business case; zadat dodavateli; počkat na příští řádné doručení. Tohle trvá asi tak rok. A stojí to hodně peněz.

Pokud uživatel na druhou stranu může "zneužít" systém a udělat si tam, co potřebuje, bývá to výhodnější. Stojí to jen nový hardware, at to jen v nejhorším případě (a navíc nákup hardware bývá snadnější - problém výkonnosti je viditelnější a investice se snadněji schvaluje).
backup
backup (neregistrovaný)
22. 4. 2009 11:32 Nový

Re: Psáno z pohledu kodéra

celé vlákno
presne z takovych duvodu existuji cela ucetnictvi v excelu. Na prvni pohled je to vyhodnejsi. Z dlouhodobeho hlediska je to nesmysl. Ale mate zcela presne pravdu, ty procedury pro to, aby se to udelalo spravne se tahnou.

Ulohou managementu je hledat cesty, jak to udelat spravne. Tim, ze se orazitkuje pan Stehule jako koder, ktery ma svuj uzky zorny uhel se nic nevyresi. Uvaha pana Stehuleho je tu prave take pro ten management, aby si tito zodpovedni dali 2 a 2 dohromady a zeptali se, jestli je koupe hardware skutecne levnejsi.
Pavel Stěhule aura:89
22. 4. 2009 11:37 Nový

Re: Psáno z pohledu kodéra

celé vlákno
Pan Werich se v jednom ze svých velkolepých filmů (Byl jednou jeden král) vyjádřil takto: "Teď už vím,co jsem dříve nevěděl. Že totiž na odbornou práci musí být odborníci."
Miloš
Miloš (neregistrovaný)
22. 4. 2009 16:25 Nový

Re: Psáno z pohledu kodéra

celé vlákno
Článek není psán z pohledu kodéra, protože návrh vhodných datových struktur (o který jde především) je záležitostí analytickou, nikoliv kodérskou. Wirthovo tvrzení, že program=datové struktury+algoritmy platí stále. Databáze značnou část algoritmů sice řeší za nás ale na správném návrhu datových struktur záleží o to více. Pokud dodržíme doporučení autora na správnou atomizaci a normální formy, pak není problém splnit dostatečně efektivně i takové požadavky zákazníků, se kterými původně počítáno nebylo a navíc lze databázi snadno rozvíjet. (O tom jsem se přesvědčil mnohokrát).

Problém nastává, když zákazník začne do sloupců ukládat jiné informace než tam patří, protože je to "levnější", než jeden sloupec přidat. Takový zákazník JE blbec! Znám případ, kdy do čísla střediska (které nevím proč mělo rozsah až 16 míst) zamontoval zákazník jakýsi typ materiálu a číslo odpovědné osoby a pak si ztěžoval na nečitelnost sestav. Jistě, bylo to levnější, než požádat o přidání dvou slouců ale současně velmi krátkozraké.

A pokud případné změny prosazujete tak, jak píšete, pak musíte být velice těžkopádnou organizací. (Přitom se vsadím, že nakoupit řediteli repre bourák za x melounů je u vás záležitostí pěti minut).
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 16:53 Nový

Re: Psáno z pohledu kodéra

celé vlákno
No, pokud zakaznik ke konci vyvoje prijde se zmenou arity vztahu, tak to byva problem :-) Ale jinak souhlasim, kvalitne provedena analyza - dobre zobrazena realita v datovem modelu hodne pomaha.

Takovy postup zmen je bezny v kazde vetsi / velke organizaci. A ono by to asi i jinak neslo. Ani nakup bouraku pro reditele tam neni zalezitosti peti minut :-)

Ja to znam z druhe stranu a pro zmenu obcas dostanu chutovku - nacenit nejakou zmenu, u ktere 80% pracnosti predstavuje analyza problemu, ale bez analyzy neni mozne rict, jak dlouho to bude trvat :-D
Petr
Petr (neregistrovaný)
22. 4. 2009 22:56 Nový

Re: Psáno z pohledu kodéra

celé vlákno
To, co píšete, se dá zjednodušeně parafrázovat jako "nejlepší je to od začátku udělat správně". To je sice pravda, leč platónovský ideál. Ve skutečném světě se to skoro určitě správně neudělá.

Trochu mě zde napadá ono cimrmanovské "... ale chodili mu tam lidi!". Největším nepřítelem toho tak úžasně navrženého IT systému je uživatel, který ho chce používat podle sebe a ne podle idealizovaných konstrukcí analytika.
melkor
melkor (neregistrovaný)
23. 4. 2009 8:21 Nový

Re: Psáno z pohledu kodéra

celé vlákno
No jo, kdyz uzivatel [skoro] nikdy nevi, co vlastne chce, ale neda pokoj, dokud to nedostane. A nejzavaznejsi pripominky zacina mit ve fazi prechodu na novy SW ...
Miloš
Miloš (neregistrovaný)
24. 4. 2009 2:54 Nový

Re: Psáno z pohledu kodéra

celé vlákno
Právě analytik je tu od toho, aby domýšlel návrhy zadavatele do důsledku a projekt "odidealizoval". Z mnoha spoluprací se zadavatelem mám několik základních zkušeností. Za prvé: Zadavatel je líný přemýšlet. (Musíte tedy přemýšlet za něho). Za druhé: Zadavatel vám neřekne nic, na co se přímo nezeptáte. (Musíte tedy pátrat, na co se ptát). Za třetí: Nikdy nevěřte zadavateli, tvrdí-li, že něco se nemůže změnit. (Obvykle se to změní ihned po nasazení do rutinního provozu). A konečně za čtvrté: O potřebných datech a funkcích vědí nejvíce ti, kteří s nimi denně pracují. Komunikovat pouze s jejich nadřízenými nestačí. Má-li program práci ušetřit a ne přidat, musíte sejít "do suterénu".

Největší naději na úspěch má projekt, který je nasazován do provozu už v průběhu svého vývoje a průběžně kontrolován uživatelem. Pak je tu jistá naděje, že skutečně bude vykonávat to, co uživatel potřebuje. Časté tvrzení, že programátor se pohybuje v jakýchsi andělských svérách a na běžného uživatele kašle, je blud. Nemůže ovšem vyhovět takovým přáním, které si protiřečí.

Zásady správného datového návrhu, o kterých se autor článku zmiňuje, byly vymyšleny právě proto, aby se projekt mohl snadno obohacovat, rozvíjet a měnit. Vycházel z letitých zkušeností, osvědčil se a jeho autoři nebyli žádní hlupáci. Je smutné, že se mu vysmívají právě ti, kteří se mohou nejvíce přiučit.
LENIN POWER!
LENIN POWER! (neregistrovaný)
24. 4. 2009 9:26 Nový

Re: Psáno z pohledu kodéra

celé vlákno
Presne tak. Moje zkusenosti to dokazuji taky. Ony byt dobrym IT zakaznikem se taky musite naucit. Normalni predstava: dam vam par desitek mega a za 2 roky si prijdu pro aplikaci je dost najivni.

> Nemůže ovšem vyhovět takovým přáním, které si protiřečí.
proto musi u zadavatele existovat osoba ktera ma konecne slovo nad tim co se bude ci nebude delat.
Lael Ophir
Lael Ophir (neregistrovaný)
24. 4. 2009 17:06 Nový

Re: Psáno z pohledu kodéra

celé vlákno
Souhlas s vámi i předřečníkem.
Petr
Petr (neregistrovaný)
24. 4. 2009 17:57 Nový

Re: Psáno z pohledu kodéra

celé vlákno
Asi pracujete s jinými zákazníky, nežli já. Business logika je vše, jen ne logická. Změny v ní se udělat nedají, protože jsou již podepsané smlouvy a v nich jsou ty protimluvy vytesané do kamene; a smlouvy se změnit nedají protože druhá strana, zákazníkův klient, by se mohla vyzout ze svého závazku.

Kromě toho, projekt na zelené louce dnes už snad nikdo nedělá, ať už bohužel nebo bohudík. V každém současném projektu se navazuje na stávající systémy se všemy jejich chybami (které je nutno považovat za vlastnosti, neboť instalace jejich opravy stejně bude trvat přes rok) a téměř jistě se nějaký systém nahrazuje, tj. musí se data z něj zmigrovat a musíme nějakou dobu umět běžet side-by-side. Už jsem viděl hodně architektur, které musely být z těchto důvodu zprzněny.

A pořád se pohybujete v idealizovaném kruhu "předpokládejme, že se aspoň ten náš projekt od začátku udělal správně".
Tomáš Vondra aura:86
25. 4. 2009 0:01 Nový

Re: Psáno z pohledu kodéra

celé vlákno
No, a právě proto se nejede z jedné vody na čisto ale dělají se prototypové implementace apod. A zákazníkovi se dávají podepisovat analýzy a specifikace, a vysvětluje se mu že pokud se vy**re na jejich kontrolu / validaci tak ho to bude stát další (potenciálně nemalé) peníze.
Tomáš Vondra aura:86
24. 4. 2009 23:58 Nový

Re: Psáno z pohledu kodéra

celé vlákno
Jo, takových "zneužitých" systémů jsem viděl několik. Většinou to skončilo tím že na opravu toho zneužitého systému (resp. v něm skladovaných dat) padlo odhadem 10x víc peněz než kolik by stála ta úprava (plus nepřímé náklady na penále z prodlení apod.). A byly to většinou drobnosti jejichž uvedení do praxe by trvalo tak asi měsíc, jenomže uživatelé holt byli kteativní ...
Cestmir Hybl
Cestmir Hybl (neregistrovaný)
22. 4. 2009 10:43 Nový

Na prefix matching LIKE (+ jednoduchy index), na ostatne FTI

celé vlákno
Na prefix matching je LIKE 'prefix%' v zasade v poriadku, vacsina DBMS dokaze pouzit jednoduchy index.

(pgsql index pouzjie tusim len pri lc_collate/lc_ctype C, co je v praxi dost na staru mater, kedze by to muselo byt globalne pre cely cluster. Tuzobne ocakavam, kedy bude mat PostgreSQL collation/ctype podporu plne nezavislu od libc locales a nastavitelnu na jemnejsej urovni...)

Na ostatne pripady je vhodne (resp. nevyhnutne, ked je zaznamov radovo tisice a viac) pouzit fulltext index (FTI). Kazda trochu normalna implementacia FTI ma totiz aj dalsie vyhody, vyplyvajuce z tokenizacie textu: ignorovanie vsetkeho nezaujimaveho (whitespace, non-word chars), normalizacia slov (case, diakritika, pripadne aj stemming).

Treba si len uvedomit, ze prave kvoli tokenizacii textu FTI matching nemoze byt evivalentny LIKE/ILIKE matchingu, ktory pracuje na urovni znakov (a v idealnom pripade je dokonca binary-safe).
Pavel Stěhule aura:89
22. 4. 2009 11:06 Nový

Re: Na prefix matching LIKE (+ jednoduchy index), na ostatne FTI

celé vlákno
Manky
Manky (neregistrovaný)
22. 4. 2009 11:03 Nový

Nadavate na like a select * vam nevadi

celé vlákno
Vsichni tady nadavate na like %xyz% a select * from vam nevadi. Chapu, ze autor chtel udelat co nekratsi dotaz, ale pro ty, co je clanek urcen, je to jen potvrzeni, ze nedelaji chybu, kdyz pouziji tento zpusob vyhledani v DB.
Lojza
Lojza (neregistrovaný)
22. 4. 2009 11:23 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
select * není prohledávání, ale projekce. :-)
Ksl
Ksl (neregistrovaný)
22. 4. 2009 16:42 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
Projekce? Projekce by ubrala nějaké ty sloupce, případně přidala nové. Leda že bychom o každém dotazu prohlásili, že provádí minimálně tzv. "identitní projekci".
Pavel Stěhule aura:89
22. 4. 2009 11:24 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
Ju to je moje chyba - je to prohřešek proti dobrým mravům, který snad omluví to, že jsem se zaměřil úplně na něco jiného.
hulo
hulo (neregistrovaný)
22. 4. 2009 15:45 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
A co je za problem se select *? T ma byt jako obecne chybne nebo jen nejaky konkretni priklad z kodu v clanku (nestudoval jsem ho)?
Sten
Sten (neregistrovaný)
22. 4. 2009 16:04 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
Když se změní sloupce v tabulce (někdo přidá další sloupec nebo třeba jen v jiném pořadí provede ALTER TABLE ... ADD COLUMN), tak SELECT * najednou začne vracet něco jiného, než vaše aplikace čeká.
hulo
hulo (neregistrovaný)
22. 4. 2009 16:25 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
No to mi ovsem nevadi, * pouzivam prave kdyz chci vsechno, jinak by to samozrejme byl problem.
Ne ze by to bylo extra caste, ale pouziti se obcas najde - typicky pokud chci vsechny sloupce z tabulky, ktera ma 20 sloupcu, tak je prece nebudu vypisovat.
Samozrejme je treba brat v uvahu, ze muzu napriklad zbytecne prijit o moznost vyrizeni dotazu primo z indexu pokud nepotrebuju vsechny sloupce.
Sten
Sten (neregistrovaný)
22. 4. 2009 16:59 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
Ano, hvězdička se někdy hodí (třeba do phpMyAdmina), ale v aplikaci, která ta data nějak dále zpracovává, by se neměla vyskytovat, i kdyby to znamenalo těch dvacet sloupců vypsat a to včetně PHP, kde se sloupce odkazují jménem - zbytečně můžete tahat spoustu dat, které nepotřebujete, nebo naopak nemusíte odhalit, že nějaký sloupec chybí.
Pavel Stěhule aura:89
22. 4. 2009 18:00 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
* má jednu nehezkou vlastnost. Neodrazuje od širokých tabulek. Relativně častý dotaz je, jak vypsat jen některé sloupce z tabulky, přičemž by člověk určil, ty co nechce vidět. Takže, když databáze má široký tabulky, a někde se člověk dočte o tom, že není dobrý používat *, tak rychle zjistí, že mít široké tabulky je docela opruz. Jinak samozřejmě čím dříve se v dotazu odfiltrují nepoužívané sloupce, tím líp. Už jsem viděl, že dotaz z * byl o 30% pomalejší než dotaz s explicitně určenými sloupci.
hulo
hulo (neregistrovaný)
23. 4. 2009 9:49 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
No to jsou takove rekl bych trochu akademicke uvahy. V tabulce mam hodne sloupcu, pokud tam hodne sloupcu patri - kdyz udelam normalni formu a vyjde mi do tabulky 20 sloupcu (nebo co vlastne znamena hodne?), tak to budu jen proto nejak delit?. Samozrejme ze dotaz na vice sloupcu muze trvat dele, ale pokud opravdu chci vsechny sloupce, tak to je irelevantni. select * ma v produkcnim kodu omezene vyuziti a byva casto pouzit chybne (coz byva tim ze programuje kazdy kdo ma ruce), ale ma ho.
Tomáš Vondra aura:86
25. 4. 2009 0:07 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
V zásadě máte pravdu - většinou nemá cenu dělit tabulku jenom proto že "má moc sloupců" ale ono je to často příznakem toho že jsou v ní redundance (tj. není v dostatečné normální formě). A pak už se její rozdělení vyplatí.
hulo
hulo (neregistrovaný)
23. 4. 2009 9:33 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
Hm to je casty problem - skodlive zevseobecnovani nejakeho pozorovani. Taky jsem videl desive pouziti "select * into a, b, c", ale chybne lze pouzit cokoliv, kdyz se to neumi.

Napriklad tato funkce k vyzvednuti radku z tabulky pro dalsi zpracovani v PLSQL je zcela spravna, robustni, elegantni...
function fetch_account(account_id in account.id%type) return account%rowtype is
  acc_row account%rowtype;
begin
  select * into acc_row 
    from account 
    where id = acc_id;
  return acc_row;
end fetch_account;

Kdyby toto nekdo prepsal na jednotlive sloupce (i kdyby jich bylo treba jen 5), tak mu urazim pracky :-) Takto funkce dela presne to co chci a bude to delat i kdyz z tabulky sloupce uberu, pridam nebo prejmenuju, cehoz s vyjmenovanim sloupcu nemohu dosahnout. Proste select * neni spatny, spatni mohou byt pouze programatori, kteri ho neumi pouzivat.
Zdenek Kotala
Zdenek Kotala (neregistrovaný)
22. 4. 2009 21:18 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
Jenze pokud pouzijete *, tak tusim ze nemate zarucene poradi sloupecku. Takze pokud chcete opravdu 20 sloupecku, tak je vhodne je vypsat. Jinak se pak nemusite divit. Stejne vhodne je vypisovat sloupecky v INSERTU.
hulo
hulo (neregistrovaný)
23. 4. 2009 9:38 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
Samozrejme zalezi na tom, jak to udelam (viz muj prispevek o kousekl vyse). Proste kazda konstrukce ma nejake vlastnosti, ktere je treba znat a brat je v uvahu. Moudra typu "select * je spatny" a podobna jsou spatna, protoze zjednodusujici.
Tomáš Vondra aura:86
25. 4. 2009 0:09 Nový

Re: Nadavate na like a select * vam nevadi

celé vlákno
Máte pravdu - například pokud sloupec zrušíte a pak zase přidáte apod. tak se pořadí změní. Ale záleží na tom co s tím dotazem následně děláte, resp. pokud na pořadí sloupečků záleží či nikoliv. Pokud to bude součástí insertu, například.:

INSERT INTO ... SELECT * FROM ...

tak máte celkem problém. Ale pokud k těm sloupečkům přistupujete přes názvy (například v PHP přes pg_fetch_assoc) tak vám to vadit nemusí.
Lojza
Lojza (neregistrovaný)
22. 4. 2009 11:13 Nový

Uff (ale stejně tleskám)

celé vlákno
K tomu úvodnímu odstavci - to, že uživatel cpe věci do poznámky je školní ukázka toho, že software dělal blbec a ignorant, který si nebyl vědom toho, že dělá software pro lidi. Absolutní většina programátorů nemá ponětí o tom, že dobré UI je věda sama o sobě.
Tomáš Vondra aura:86
25. 4. 2009 0:13 Nový

Re: Uff (ale stejně tleskám)

celé vlákno
No, to je trochu troufalé tvrzení. On to ten analytik vůbec nemusel tušit třeba proto že se požadavky na funkčnost změnily během života aplikace ... což je celkem časté.
pavol
pavol (neregistrovaný)
22. 4. 2009 11:16 Nový

Pripomienka

celé vlákno
Dobry den, dufam, ze nebudem pososbit ako hnidopich, ale mimo inych veci mi udrelo do oci
"Ano, takovému prznění originálních IS se říká customizace - aneb jak naučit IS, který prodáváme, dělat to, co nikdy neuměl a neměl umět, ale co naši obchodníci naslibovali a prodali. O co má programátor silnější prostředky, o to větší zrůdnost dokáže vytvořit. V některých případech dokonce i ke spokojenosti zákazníků.".

Takze podla autora je spatne ked programator upravi IS tak, aby vyhovoval potrebam zakaznika a zakaznik si dokonca dovoli byt spokojny? No to je nehoraznost, ze sa vsetko nerobi na 100% podla zasad, ktore funguju hlavne na papieri. No a co ze je to o 40% lacnejsie? Ale nieje to ciste riesenie! A pozor! Ciste riesenie je az o 50ms rychlejsie! Ti dnesni programatori su strasni bastlici, ked to o tych 50ms nedokazali zoptimalizovat.

IS sa v dnesnej dobe optimalizuje az v momente, kedy sa zisti, ze optimalizacia je potrebna. Inak povedane: nepchajme prachy do niecoho, co v konecnom dosledku nebudeme potrebovat. Najlepsi su frajeri, ktori su schopni spalit nehorazne mnozstvo prostriedkov na tom, ze nacitanie obrazovky zrychlili o 100ms.
Autorove vedomosti z oblasti PG SQL su obdivuhodne, ale clanok je podla mojho nazoru trosku nestastne podany.
Pavel Stěhule aura:89
22. 4. 2009 11:33 Nový

Re: Pripomienka

celé vlákno
Mám jinou zkušenost - a to z obou stran, jak jako zaměstnanec zadavatele IS, tak jako zaměstnanec dodavatele IS. Téměř vždy jsme museli řešit problémy s výkonem - určitě se nejednalo o 50ms (spíš o desítky vteřin), a téměř vždy za tím byla nevhodná customizace systému.

Optimalizace by měla být základní částí dodávky systému, což bohužel často není (považuji to za okrádání zákazníka) a provádí se v okamžiku, kdy systém je neúnosně pomalý. Optimalizace není o tom honit každou ms, ale o odstranění hrdel, ke zvýšení komfortu uživatele - a i jeho produktivity. To co jsem viděl ať už od českých nebo zahraničních dodavatelů bylo otřesné - a je to bohužel pravda, že zákazník je v It, za těžké peníze okrádán.
LENIN POWER! aura:41
22. 4. 2009 11:55 Nový

Re: Pripomienka

celé vlákno
optimalizace nemuze byt soucasti zakladni dodavky. Cena by pak musela byt vyssi a nekonkurenceschopna a taky ne kazdy zakaznik optimalizaci bude potrebovat.

Proc by byl zakaznik okradan? Jakou smlouvu si s dodavatelem dohodnete takovou mate. Nemusite prece pristoupit na jakekoliv jeho podminky.

Vy si treba porad jeste myslite ze treba oracle okrada lidi protoze by mohli pouzivat pgsql?
Pavel Stěhule aura:89
22. 4. 2009 12:20 Nový

Re: Pripomienka

celé vlákno
Označuje se to jako skrztá vada - a já bych to nazval nedodělek. Řada zákazníků si bohužel nechá nabulíkovat modré z nebe a sedne na lep - a nepřidá si do smluv doložku o třeba minimálních reakčních dobách na spec. hw a podobně.

Z mého pohledu je to ovšem čistě nedodělek - poctivou práci si představuji jinak.

Oracle lidi nekrádá, to jsem nikdy neřekl - pouze implementátoři jsou pijavice.
LENIN POWER! aura:41
22. 4. 2009 12:31 Nový

Re: Pripomienka

celé vlákno
oracle je ale snad nejkomplexnejsi db co kdy byla vytvorena. Skupina lidi co v ni umi dobre delat je dost mala. To proste nemuze byt levne.

MSSQL je levnejsi a i lidi jsou levnejsi. Dodavat primarne mssql je ale blbost, velka konkurence - nevydelate si. DB2 zase neni popularni mezi malymi podniky. Proto se vsude cpe zakaznikum Oracle; zakaznici i dodavatele to miluji.

Neni snad cilem podnikani maximalizovat zisk?
Pavel Stěhule aura:89
22. 4. 2009 12:47 Nový

Re: Pripomienka

celé vlákno
Maximalizace zisku je fráze tupých hlav z VŠE. Který mají jen ****** a kalkulačku místo mozku. Obyčejná krádež je např. maximalizací zisku. Nevěřím, že je to dlouhodobě udržitelná strategie. Navíc tahle víra generuje zmrdy. Já věřím v poctivý řemeslo. Nemám milión, ale na mým hrobě si lidi neodplivnou. To mi stačí. Časem na to možná přijdou i ostatní, že myslet jen na peníze je cesta do pekel.
pavol
pavol (neregistrovaný)
22. 4. 2009 13:02 Nový

Re: Pripomienka

celé vlákno
Tento Vas prispevok je vykrik do tmy. Zakaznik si ale o Vas nebude mysliet, ze ste odviedli poctive remeslo. Bude si mysliet, ze ste blbec :)
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 13:02 Nový

Re: Pripomienka

celé vlákno
V tom pripade vezte, ze tenhle clanek rozhodne "poctivy remeslo" neni.
LENIN POWER! aura:41
22. 4. 2009 13:10 Nový

Re: Pripomienka

celé vlákno
Jenomze pro byznis kalkulacku misto mozku potrebujete. Kdyz nevydelate pujde vas byznis do kytek. Musite neustale pocitat co je pro vas lepsi. Kdyz jste liny nebo z ideovych duvodu nepocitate naklady verte tomu ze vase konkurence pocitat bude.

Musite proto pouzivat to, co realne funguje a ne to o cem si zde lidi na rootu pisi ze by bylo idealni davat SW uplne zdarma a pak prodavat levne support. To proste nefunguje.

Podnikani == penize, s tim nic nenadelate. Kdyz budete prodavat svoji praci levneji nez ostatni tak se zbytecne budete okradat a nic tim neziskate. Vdek? Zakaznici to rozhodne neoceni. Obema stranam jde v obchodu o prachy ja je chci vydelat stejne tak jako je chce zakaznik usetrit. Jde tedy kdo z koho; souboj na ferovku.

Vsem idealistum rikam at mi poradi jak podle nich mam delat byznis, ja si to opravdu rad poslechnu.

Kdyz mluvime o db. Mame me tu 3 db - oracle db2 mssql. Maly zakaznik by nejradsi mssql, ale na ten oracle se vetsinou da ukecat. na db2 ho neukecate pokud uz db2 nekde nema, coz mali zakaznici nemaji.

Co podle vas mam delat? Delat jim to na mssql protoze si to preji s tim ze ja vydelam malo? Proc bych za stejnou praci mel dostat mene, kdyz muzu dostat vice? Nikdo takhle nejedna. Kdyz vam reknu muzete pro mne delat stejnou praci za $75k nebo za $60k co si vyberete? Kde je ta moralka s kterou mi tady machrujete?

Proste chceme jako vsichni ostatni legalnim zpusobem vydelat penize. My delame IT, jini lidi nam uklizeji kancelare. Ale vsichni si chceme vydelat. Tak tenhle svet funguje.
Pavel Stěhule aura:89
22. 4. 2009 13:42 Nový

Re: Pripomienka

celé vlákno
Já svou práci nedávám lacino, ale snažím se ji dělat tak nejlíp jak umím, a snažím se u ní přemýšlet, nešidit ji. Někdo na to má, někdo ne, a někdo si to třeba nemůže dovolit. Jsem stavař, když něco ošidíš na stavbě, tak ti spadne, nebo ti tam bude zatékat, bude to promrzat, nebo se ti tam prostě bude špatně bydlet. Nejsem zvyklý nic šidit. Je celkem paradox, že domy, které se postavili teď za posledních pět let jsou kvalitativně o dost horší než ty, co se stavěly za komunistů - důsledek strategie maximalizace zisku. Každý ať si žije, jak chce, ty máš svůj byznys, já svůj - jen nechtěj, abych si tě vážil - já si žiju po svém, a v byznysu se snažím aby profit měli oba - já i můj zákazník.
pavol
pavol (neregistrovaný)
22. 4. 2009 13:47 Nový

Re: Pripomienka

celé vlákno
Nieje to pravda s tymi domami. Rozdiel je totiz ked si kupim skladany dom za miliom korun a rozdiel je ked si dam postavit tehlu s kvalitnymi materialmi za 7 milionov. Pokial kupim nieco lacne, nemozem cakat 100% kvalitu. Pokial si dam postavit za 7 mega dom a ten nebude v 100% stave, zazalujem firmu a vyhram.
A presne o tom je - co si zaplatim, to mam.
JS
JS (neregistrovaný)
23. 4. 2009 0:45 Nový

Re: Pripomienka

celé vlákno
Jestli to ovsem nebude signalovanim. Kdyz si koupite dum za 7 milionu, nebude pro vas patrne problem utratit dalsi milion za soud s nimi, a proto si daji vetsi pozor. Ne tak kdyz si koupite za milion.

Osobne mam o teorii, ze kdyz nekomu "jen tak" zaplatite vic, ze automaticky dostanete vyssi kvalitu, silne pochybnosti.
Tomáš Vondra aura:86
25. 4. 2009 0:54 Nový

Re: Pripomienka

celé vlákno
Problém je v tom že spousta "profesionálů" vám za 7M prodá ten dům za 1M, ale bude vám tvrdit že to má přesně ty samé vlastnosti. Důležité je že když někomu něco dodávám, musím mu přesně specifikovat co to bude umět a co nikoliv.
Lojza
Lojza (neregistrovaný)
22. 4. 2009 13:17 Nový

Re: Pripomienka

celé vlákno
Jenže jak říká majitel jednoho lokálního serveru - i programátor musí platit hypotéku.
Ale to pochopíte, až budete mít rodinu s dětmi.
kaapo
kaapo (neregistrovaný)
23. 4. 2009 7:22 Nový

Re: Pripomienka

celé vlákno
Ja myslim, ze se stale nechapete. Tady nejde o to delat zamalo/zadarmo pripadne veci ochcavat, ale kdyz uz neco delam, tak se snazim celek optimalizovat i z dlouhodobeho hlediska. Takze pokud neco oseru ted (aby to trvalo o 10% kratsi dobu), tak se mi to i s uroky vrati, az to budu muset upravovat/rozsirovat a sezere to daleko vic penez. A kde pak jsme s obchodovanim a povesti?

Chapu ale, ze to je hodne o zkusenostech. Spousta poustupu se da aplikovat uz automaticky a nic moc navic to nesezere. Jen je o nich potreba vedet.
BLEK.
BLEK. (neregistrovaný)
24. 4. 2009 4:27 Nový

Re: Pripomienka

celé vlákno
Jeden člověk, co databázové aplikace dělá, mi tvrdil, že přesně tohle je "orientace na zákazníka" --- řešit pouze problémy, které zákazník má teď a tady. Klidně mu to osrat, ať mu to z dlouhodobého hlediska nestačí --- a pak si nechat zaplatit za ty úpravy. (naproti tomu "orientace na produkt" je klasický postup, kdy se člověk snaží produkt udělat dlouhodobě rozšiřovatelný).

> "tak se mi to i s uroky vrati, az to budu muset
> upravovat/rozsirovat a sezere to daleko vic penez."

Paradoxně, pro tebe jako vývojáře je to pozitivní. A ten zákazník nepozná, že jsi mu to schválně osral.
Petr
Petr (neregistrovaný)
24. 4. 2009 18:06 Nový

Re: Pripomienka

celé vlákno
Bleku, pokud máš křišťálovou kouli a přesně víš, co bude zákazník potřebovat za rok, tak už se na to teď připrav. Já to třeba nevím, já věštit neumím. Ale moje zkušenost, podpořená i odbornou literaturou, je ta, že v průměru tohle odhadujeme špatně. Že je větší šance vyplýtvat přípravou na budoucnost, která nenastane, než ušetřit přípravou na budoucnost, která nastane. To je jako si do hor s sebou vzít zapalovací svíčky k vrtulníku XWV-3. Co když se mi tam náhodou něco stane, poletí mě zachránit horská služba vrtulníkem XWV-3, naloží mě, pak jim najednou odejdou svíčky - jak já budu rád, že je mám! A navíc stejně skoro nic neváží, co...

Každá rozšiřitelnost systému je náklad, každá položka v konfiguračním systému, každé další konfigurovatelné nepřímé volání, to jsou všechno náklady. Protože musím uživatele naučit, aby je uměl používat (zdokumentovat to nestačí, a navíc zdokumentovat to dobře je taky drahé). A protože to musím podporovat i v budoucích verzích. Protože musím řešit další defect reporty na to, že ta přidaná věc nefunguje. A protože to je další místo pro security assessment. A protože se nakonec v systému pro jeho obludnost prase nevyzná, i když ten systém určitě umí úplně všechno. Viz /etc/sendmail.cf a celý "průmysl" následných aplikací na jeho vytváření a údržbu a na nekonečné root exploity přes něj vedoucí.
Lael Ophir
Lael Ophir (neregistrovaný)
24. 4. 2009 19:00 Nový

Re: Pripomienka

celé vlákno
To záleží na třídě aplikace. Levné triviality jsou zpravidla napsané dost natvrdo (a často prasácky, viz článek). Výrobci SW ale před mnoha lety zjistili, že mohou jeden produkt prodat více zákazníkům. Stačí napsat SW modulární, a dát mu nějaký customizing layer. Jednou napíšete, mnohokrát prodáte. U každého zákazníka pak nastavíte co je třeba, případně doděláte nějaký modul. Jen ve výjimečných případech je třeba změna v aplikaci jako takové. A i tehdy ji lze udělat správně a systémově, aby rozšiřovala možnosti celého produktu, a ne jen jedné implementace.

Díky tomu třeba dnes policie zpracovává přestupy v Lotus Notes. Nebylo třeba psát novou aplikaci, nebylo třeba měnit kód Lotus Notes. Prostě se customizovalo, a něco málo se dopsalo. Ty samé Lotus Notes používá Allianz pro správu kontraktů. Projekční kanceláře zase často používají AutoCAD, výkresy zakládají do DMS systémů, a tam je verzují a schvalují. Opět není třeba žádná změna v AutoCADu.

Když to shrnu: nemá smysl psát pořád dokola jedny a ty samé věci. Naučte se psát tak, aby se minimálně kód dal použít na dalším projektu. Ideálně tak pište celé aplikace.
Petr
Petr (neregistrovaný)
27. 4. 2009 18:27 Nový

Re: Pripomienka

celé vlákno
Produkt se vyplati jen od urcite velikosti trhu vyse. Lotus Notes ma stovky tisic implementaci? Miliony implementaci?

Pracuji ve firme, ktera ma po svete zhruba desitku implementaci softwaru. Myslite si, ze je opravdu ekonomicke vyvinout produkt, jehoz velikost trhu je radove deset zakazniku, kazdy navic s jinou sadou ucetnich a danovych zakonu?
LENIN POWER!
LENIN POWER! (neregistrovaný)
27. 4. 2009 18:58 Nový

Re: Pripomienka

celé vlákno
Lotus Notesy maji 80 milionu prodanych licenci.
Lael Ophir
Lael Ophir (neregistrovaný)
30. 4. 2009 18:01 Nový

Re: Pripomienka

celé vlákno
To záleží od produktu. Obecně to můžete dělat i takhle:
- Produkt není modulární, kód připomíná špagety.
- Každý zákazník má svoji verzi zdrojáku aplikace.
- Features se implementují na míru konkrétnímu zákazníkovi, bez ohledu na možnost užití feature jinými zákazníky (bez zobecnění problematiky, oddělení do modulu atd)
- Znovu-použitelnost kódu je nulová.
- Aplikační logika je na straně klienta, nejlépe rovnou v kódu grafického interface.

Pak se ale bude postupně prodražovat údržba a rozvoj produktu, novému zákazníkovi budete muset vždy upatlat zvláštní verzi, a dříve či později to budete muset shodit ze stolu a přepsat. Viděl jsem to tolikrát... Přitom stačilo včas trochu přemýšlet, a teprve pak začít něco psát.
BLEK.
BLEK. (neregistrovaný)
24. 4. 2009 4:21 Nový

Re: Pripomienka

celé vlákno
Hypotéku nemám, rodinu taky nemám, jsem totiž psychopat a nejsem schopen vztahu se ženou.
Tomáš Vondra aura:86
25. 4. 2009 0:51 Nový

Re: Pripomienka

celé vlákno
No, trochu ze zaplétáme do cenové politiky jednotlivých firem ...

V podstatě se asi dá souhlasit že Oracle je nejkomplexnější DB, i když teda nevím jestli to je pozitivum nebo negativum. Ono totiž spousta té komplexnosti je tam z historických důvodů a je to spíš koule na noze (pro zákazníky i vývojáře Oracle) než nějaká super výhoda. Každopádně Oracle prezentuje svoji db jako klenot, úměrně tomu nastavuje finanční podmínky.

Co se týká MSSQL, tak tam je historie trochu jiná - MS cítil že mu v oblasti DB ujíždí vlak, a tak udělal to jediné co umí - koupil kvalitní hotový produkt od třetí firmy (v tomto případě Sybase) a začal ho tlačit ve svém balíčku produktů a v souladu s tím pochopitelně nastavil cenovou politiku.

A k té maximalizaci zisku - jasně, ale Viktor Kožený také maximalizoval zisk ;-) Každopádně co si se zákazníkem ujednáte to máte, ale i u nás už si zákazníci umí udělat ROI analýzu a když zjistí že návratnost je nerealistická tak to od vás prostě nekoupí. A pokud chcete business provozovat delší dobu tak musíte dbát i na dobré vztahy a reference - pokud oškubete jednoho zákazníka, vězte že ostatní se to velmi rychle dozví.
LENIN POWER!
LENIN POWER! (neregistrovaný)
25. 4. 2009 1:05 Nový

Re: Pripomienka

celé vlákno
Ja jsem nikdy na dobre vztahy se zakaznikama nedbal - Jedine co mne zajimalo jsou prachy. Chces zaplatit malo? Tak si jdi jinam.

Ja se zakaznikama nesmlouvam, ja jim proste oznamuju kolik zaplati a vubec nemam moralni zabrany preprodavat sluzby indickych PHP patlalu s 1000% ziskem. Ja tomu rikam dobry obchod.
pavol
pavol (neregistrovaný)
22. 4. 2009 12:40 Nový

Re: Pripomienka

celé vlákno
Akym sposobom robite u nas vo firme ponuku(Cesky nabidku)? U nas dostane zakaznik presne vypocitane na com sa stravi kolko hodin, pripadne MD. Pokial chcem riesenie aj optimalizovat, musim na to niekde tie MD ziskat. Spravna optimalizacia je draha, a skutocne je hlupost ju riesit pocas vyvoja aplikacie pred prvou iteraciou nasadenia v ostrej prevadzke, pretoze casto neviete, kde tie bottlenecky budu - resp. kde budu zakaznikovi vadit.
Optimalizovat obrovsky bottleneck, ktory sa spusti raz za den su vyhodene prachy, ale dolezite je, ze v case vyvoja aplikacie neviete, ktore casti budu ako pouzivane. Uzivatel moze deklarovat pocas vyvoja, ze vlastnost X je pre neho najdolezitejsia, a nakoniec zistite, ze kym aplikaciu nasadite, danu vlastnost uz vobec pouzivat nebude. Namiesto toho vyuziva vlastnost Y, ktoru pri podpise zmluvy skoro odmietol financovat. Po nasadeni mozte skoncit s vlastnostou X ktora bezi uplne bez problemov, ale usage je 2%, naproti tomu budete mat vlastnost Y, ktora pocas vyvoja nebola dolezita a usage je 10-15%. Toto su mimo ine skutocne velke nastrahy optimalizacie, kvoli ktorym sa ziadnej serioznej IT biznis entite nechce ist do velkych optimalizacii pred nasadenim IS.
BoneFlute aura:66
23. 4. 2009 11:28 Nový

Re: Pripomienka

celé vlákno
Jenom bych poznamenal, že Pavel nehovořil o optimalizaci, ale o návrhu. S optimalizací máte bezpochyby pravdu. Ale něco jiného je odbýt návrh (zbytečně nedodržené normalizační pravidla například) s pocitem, že to funguje.
To, že se hranice mezi návrhem a optimalizací v praxi často stírá je smutná realita.
Tomáš Vondra aura:86
25. 4. 2009 1:02 Nový

Re: Pripomienka

celé vlákno
Během úvodního sběru požadavků a analýzy se rozhodně dají získat alespoň základní informace o způsobu používání systému včetně informací o počtu uživatelů a podobně. A netvrďte mi že ne, protože potom to není kvalitně udělaná analýza.

Na základě toho se dá pravidelně dělat alespoň jednoduchý benchmark, který zjistí jestli to vyhovuje požadavkům nebo ne. To není žádná raketová věda, stačí skutečně celkem triviální test.

Další věc je pochopitelně nastavení prostředí (aplikační server, connection pooly apod.) během nasazování do akceptace a produkce. To už je naprosto standardní věc kterou lze fakturovat, i když zákazníci na to často mají vlastní tým lidí (ale i ti budou potřebovat support od lidí kteří znají vnitřnosti).
Tomáš Vondra aura:86
25. 4. 2009 0:37 Nový

Re: Pripomienka

celé vlákno
Mám dojem že mluvíte jeden o koze a druhý o voze. Nevím jestli Pavlovi rozumět prostě nechcete a slovíčkaříte, nebo jestli neznáte proces specifikace "větších" systémů ...

Součástí dodávky pochopitelně není ladění produktu na nejvyšší možný výkon, protože to zákazník většinou nepotřebuje a ani nechce. U každého většího systému (tj. víc než pár desítek člověkodní) by ale součástí specifikace a akceptačních podmínek mělo být SLA, tj. "service level agreement" tj. něco jako "Služba X při současné práci 100 uživelů dokáže 95% požadavků vyřídit do 5s, 99% do 15s a vyřízení žádného požadavku nebude trvat déle než 30s." To samozřejmě pro všechny hlavní součásti / služby systému, a vázané na konkrétní hardware.

Bohužel většina zákazníků o tomhle buď neví nebo na to dlabe, takže sice mají systém se specifikovanou funkčností (a procházející akceptací) ale s nevyhovujícím výkonem, a nemají páku jak dodavatele donutit.

A k tomu že optimalizace je "drahá" - ano, pokud se provádí na poslední chvíli tak často vyžaduje značné zásahy do architektury a to pochopitelně není levná věc. Ale to je chyba dodavatele, protože správný vývojový cyklus zahrnuje (byť třeba zjednodušené) testování výkonu už od ranných fází kdy se ještě architektura dá upravit relativně levně.
pavol
pavol (neregistrovaný)
22. 4. 2009 12:26 Nový

Re: Pripomienka

celé vlákno
Zakaznik dostane to, co si zaplati. Bezny programator podla mojho nazoru nieje schopny efektivne optimalizovat, specialisti nieco stoja. Ked stojim pred zakaznikom s projektom za radovo miliony CZK, a sam sa kruti aby co najviac usetril, nemozem mu navysit cenu este za optimalizaciu. Optimalizaciu si zaplati povedzme za rok, vtedy uz bude jasne kde su hrdla a vide to v konecnom dosledku lacnejsie, ako keby sme freneticky optimalizovali cely kod pocas vyvoja.
A modelovy priklad:
Pokial pri vyvoji IS stoji funkcionalita "prehladavanie emailov" u mna 500 tisic CZK a u konkurenta 600 tisic CZK, co myslite, kto dostane vo vacsine pripadov zakazku? Konkurent zakaznikovi nevysvetli, ze jeho riesenie bude rychlejsie, pretoze ho niekto bude optimalizovat.
Mne by vyhovovalo, aby si zakaznik u m na optimalizaciu zaplatil uz pri vyvoji, ale sme v trhovej ekonomike a zakaznik tu dostane do bodky to, co si zaplati.
Tomáš Vondra aura:86
25. 4. 2009 1:06 Nový

Re: Pripomienka

celé vlákno
Problém je v tom že zatímco dodavatel chápe smlouvu stylem "co v ní není to nedodáme" tak zákazník to má přesně opačně, tj. "co v ní není to dostaneme automaticky."

Takže pokud tam přesně nespecifikujete SLA ani neuvedete že důkladná optimalizace není součástí projektu, tak bude automaticky předpokládat že je. A bude se na vás vozit dokud to nedostane. Pokud tam dáte SLA, zákazník bude to samé chtít i po konkurenci. Pokud tam uvedete že důkladná optimalizace není součástí dodávky tak se zákazník zamyslí jestli to tak je dobře.
backup
backup (neregistrovaný)
22. 4. 2009 11:35 Nový

Re: Pripomienka

celé vlákno
...clanok je podla mojho nazoru trosku nestastne podany. ...

krucinal, neumi uz nikdo dneska poradne cist - stoji tam ____ U V A H A _____
Jan Seifert
22. 4. 2009 11:43 Nový

Re: Pripomienka

celé vlákno
Ne, tady nejde jen o zrychlení dotazu o 50ms. Tady jde o to, že z vylepšování IS stylem dolepování tabulek a atributů "teď to musíme rychle nějak udělat, zákazník to chce" se stává postupně časovaná bomba, která v budoucnu může napáchat hodně starostí nebo škod samotnému zákazníkovi, který ono vylepšení tak rychle potřeboval.
backup
backup (neregistrovaný)
22. 4. 2009 11:48 Nový

Re: Pripomienka

celé vlákno
ale musite priznat, ze na te casovane bombe se podili cely IT prumysl, protoze to spravne je mnohdy velmi trnite. Neni podle me spravne ukazovat na uzivatele, kteri ze zoufalstvi hledaji reseni, chybu je hledat v arogantnim IT prumysl, ktery nedokazal za poslednich 40 let najit adekvatni odpoved na pozadavky uzivatelu
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 12:17 Nový

Re: Pripomienka

celé vlákno
Ne, na te casovane bombe se podili vetsinou uzivatel, ktery uprednostni levne napraseni pred korektni implementaci, ktera je samozrejme drazsi.
Tomáš Vondra aura:86
25. 4. 2009 1:08 Nový

Re: Pripomienka

celé vlákno
Nesouhlasím s tím "samozřejmě". Ono to naprasení může být levnější v krátkodobém horizontu, ale když se k tomu připočtou náklady na řešení vzniklých problémů tak je to většinou výrazně dražší.
pavol
pavol (neregistrovaný)
22. 4. 2009 12:19 Nový

Re: Pripomienka

celé vlákno
Ano, stava sa casovana bomba, ale dolezite je to spojenie "zakaznik to chce". Pokial to zakaznik chce, tak mu to predam za konkurencieschopnu cenu, ak by som to tak neurobil, som blbec - okradam sam seba.
Tomáš Vondra aura:86
25. 4. 2009 1:10 Nový

Re: Pripomienka

celé vlákno
Pokud to zákazník chce tak se mu snažím vysvětlit všechny konsekvence, včetně základní analýzy nákladů, a když to chce i potom tak si nechám podepsat glejt že za to vůbec nemůžu.
LENIN POWER! aura:41
22. 4. 2009 11:51 Nový

Re: Pripomienka

celé vlákno
mam podobny nazor na optimalizace. Optimalizovat by se melo az kdyz je to potrebne.

Navic pozadavky zakazniku na rychlost jsou znacne rozdilne, nekterym nevadi ze se mene caste dotazy zpracovaji nekolik minut, protoze jich za den spusti minimum.

Ja treba zastavam nazor ze se maji pouzivat levnejsi reseni. Pokud je treba mozne pridat dalsi qcore procesor do masiny a zbavit se tak problemu s vykonem na nekolik let protoze se nepredpoklada narust pozadavku na vykon tak to vyjde ve finale vyrazne rychleji nez zamestnat lidi na optimalizaci, ktera navic muze zanest do dobre fungujiciho projektu bugy.

Optimalizace na urovni db (indexy navic, locking execution planu) je obvykle bugfree. Taky se daji dobre zrychlit websphere aplikace pouzitim pureQuery runtime ktery se nacpe mezi jdbc driver a databazi. Umi zmenit SQL z dynamickeho na staticke a zamknout execution plany. Tim vyresi i problem SQL injekci.
Tomáš Vondra aura:86
25. 4. 2009 0:22 Nový

Re: Pripomienka

celé vlákno
No, ona je customizace a "customizace" - pokud ten IS umožňuje například doplnění vlastních workflow, políček k formulářům apod. tak je to zcela v pořádku. Problém nastává ve chvíli kdy se systém přiohýbá takovým způsobem o kterém se jeho autorům nesnilo ani v nejhorších nočních můrách (například právě to používání políček k různým účelům, apod.).

A jak bylo řečeno, někteří obchodníci slíbí klidně i faktorizaci v lineárním čase jenom aby to prodali (aniž by věděli co to faktorizace vlastně je).

A s touhle optimalizací "až když je potřeba" (rozuměj "Během vývoje se na to vy**rem a pak si budeme účtovat za služby.") mám celkem bohaté zkušenosti. U jednoho našeho klienta takhle "experti" už rok optimalizují CRM systém s ďábelským návrhem, a snaží se aby to na celkem nabušeném stroji mohlo používat aspoň 10 lidí naráz.

Čímž netvrdím že se má všechno honit přes profiler jenom proto aby to bylo o 1ms rychlejší, ale alespoň základní úvahy o architektuře
backup
backup (neregistrovaný)
22. 4. 2009 11:42 Nový

ultimativni reseni

celé vlákno
v komentarich jsme se opet mohli od nami cteneho POWER diskutera dovedet, ze vsechny takove problemy se daji resit velmi jednoduse - kupte si Oracle.
LENIN POWER! aura:41
22. 4. 2009 12:04 Nový

Re: ultimativni reseni

celé vlákno
Nekupujte si Oracle ale kupte si hotove reseni. My ho dodame sakumprask i se zelezem. Musim rici ze to zakaznici ocenuji.
Marek Chlup
Marek Chlup (neregistrovaný)
22. 4. 2009 11:48 Nový

základní vyhledávání v číselnících

celé vlákno
Rád bych se dozvěděl, jak by měl vypadat například dotaz, který má vrátit z tabulky obsahující jména lidí všechny lidi u kterých příjmení začíná na 'ch'. Já jsem dosud žil v domnění, že "like 'ch%'" je dobré řešení.

Je to tedy špatné řešení? A jaké je správné?
Pavel Stěhule aura:89
22. 4. 2009 12:08 Nový

Re: základní vyhledávání v číselnících

celé vlákno
např. between :).

I v tomto případě je like to pravé, ještě si pak můžete ověřit, jestli se chytne index nebo nikoliv. Problémový je LIKE %neco%.
Marek Chlup
Marek Chlup (neregistrovaný)
22. 4. 2009 12:34 Nový

Re: základní vyhledávání v číselnících

celé vlákno
Problematičnosti LIKE %neco% rozumím a jsem tedy rád, že LIKE je někdy dobře:-)

Jak však řešit případ, když si matně vzpomínám, že hledám nějakého člověka Sněhule či Uhule či Stěhule - jo jo tuším, že ve jménu se mu vyskytuje "hule". To se radši nemám ptát a nebo si mohu dovolit položit dotaz LIKE '%hule%' (samozřejmě s tím, že databázoví stroj se trochu zapotí)?
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 12:56 Nový

Re: základní vyhledávání v číselnících

celé vlákno
A vedel jste, ze, pokud neni na sloupecku index, tak LIKE '%neco%' je asymptoticky stejne narocne jako = 'neco2'? ;-)

Ptat se muzete vzdycky :-) To, zda si to muzete nebo nemuzete dovolit zavisi na spouste dalsich faktoru, zejmena velikosti prohledavanych dat.
yossarian
yossarian (neregistrovaný)
22. 4. 2009 13:05 Nový

Re: základní vyhledávání v číselnících

celé vlákno
o rly? ja doted zil v tom, ze porovnani ma slozitost O(n), kdezto vyhledani podretezce ma samo o sobe v nejlepsim pripade slozitost O(n.log n).
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 13:09 Nový

Re: základní vyhledávání v číselnících

celé vlákno
rly :) Ono se z hledaneho retezce (resp. obecne regularniho vyrazu) da sestavit automat a tim se pak da prohledava O(n). Sestaveni automatu neco stoji, ale vzhledem k typicky male delce jehly proti kupce (za kupku je treba povazovat vsechny texty v danem sloupecku vsech databazovych zaznamu) je to mozno brat jako konstantu.
yossarian
yossarian (neregistrovaný)
22. 4. 2009 13:22 Nový

Re: základní vyhledávání v číselnících

celé vlákno
V tom pripade v poradku, dekuji za rozsireni obzoru :-)
Marek Chlup
Marek Chlup (neregistrovaný)
22. 4. 2009 13:16 Nový

Re: základní vyhledávání v číselnících

celé vlákno
Nerozumím přesně co jste chtěl poznamenat.

Já jsem se snažil o upozornění, že i like '%neco%' prostě svůj smysl má a to i přesto, že jeho vykonání je prostě hodně neefektivní (index mi tu nepomůže) na rozdíl od ='neco' či like 'neco%' (kde index hraje významnou roli).

Je naprosto legitimní umožnit uživateli provádět dotazy (zejména u číselníků) typu like '%neco%'. Mou snahou je však, aby prioritu mělo hledání typu like 'neco%' a pokud chce uživatel like '%neco%' musí to systému říci (například zadáním '*neco'). V praxi jsou pak zejména časté dotazy 'neco%' a pak třeba like 'neco%dodatek%' (kde index roli hraje).

Tvrdit, že užití like '%neco%' koresponduje se špatně navrženou databází není pravda.
Michal Kára
Michal Kára (neregistrovaný)
22. 4. 2009 13:24 Nový

Re: základní vyhledávání v číselnících

celé vlákno
Pisete to zcela spravne. Ta moje odpoved patrila spis o prispevek vys ;-)
Pavel Stěhule aura:89
22. 4. 2009 13:50 Nový

Re: základní vyhledávání v číselnících

celé vlákno
Pokud je to implementováno. Nejsem si jistý, zda-li něco takového podporuje MySQL. V případě PostgreSQL je efektivnější algoritmus až ve verzi 8.4. Těch metod je víc, ale to podstatné jste zmínil "asymptoticky".
Cestmir Hybl
Cestmir Hybl (neregistrovaný)
22. 4. 2009 12:11 Nový

Re: základní vyhledávání v číselnících

celé vlákno
Prefix matching (LIKE 'prefix%) je specificky pripad pouzitia LIKE a vacsina databaz sa snazi ho realizovat efektivne.

V pripade vacsieho poctu zaznamov (cokolvek ine nez "konstantny" ciselnik o par 10/100 riadkoch) sa len treba ubezpecit, ze db naozaj pouzije index (zavisi od konkretneho DBMS, pouziteho collation, case (in)sensitivity). Inak to povedie k seq scanu s podobnou cenou ako vseobecny neprefixovy pripad.
Franta Kučera aura:79
22. 4. 2009 13:28 Nový

Souhlas

celé vlákno
LIKE jsem vždycky bral jako velmi primitivní fulltextové vyhledávání a tak ho taky občas používám, pokud nic lepšího není (takže na anketu nedokážu moc dobře odpovědět). Ale použít ho na cokoli jiného většinou znamená špatně navržený datový model. Ale vysvětluj to lidem, kteří serializují pole do textového řetězce a ten vrazí do databáze :-D

Měl bych dotaz k umělým primárním klíčům: je nutné používat všude číselné ID? Proč nepoužít jako PK e-mailovou adresu (viz příklad v článku)? Jde mi o to, že není moc dobré mít v tabulce víc unikátních sloupců (adeptů na primární klíč). Dejme tomu, že nebudeme předpokládat změnu e-mailové adresy (nebo ji budeme předpokládat tak málo často, že nám nebude vadit nutnost aktualizovat závislé tabulky – ON UPDATE CASCADE). Dá se čekat, že práce s textovými klíči a indexy bude pomalejší, ale kde je ta hranice, kdy se dají ještě použít a usnadnit si tak práci (nevytvářet zbytečné umělé klíče – což je jen technická pomůcka k propojení relací, nikoli něco, co by existovalo v reálném světě)?
Pavel Stěhule aura:89
22. 4. 2009 14:23 Nový

Re: Souhlas

celé vlákno
Těžko říct. Dejme tomu, že budu mít tabulku uživatelů. V ní sloupeček email_addr. Pravděpodobně budu mít nad tímto sloupcem unikátní klíč. Pokud by byl zároveň primárním klíčem, pak musím určitou podmnožinu adres zkopírovat do dalších tabulek (tam, kde jsou cizí klíče). A pokud bych měl nad FK ještě index, tak dojde k dalšímu zkopírování email adres. Z toho důvodu je praktičtější (úspornější) používat umělé klíče.

Delší klíč vám zabírá více místa v paměti, o něco déle se natahuje.. Vím ale, že jsou teoretici, kteří se umělým klíčům brání jak čert kříži. Já osobně mám raději číselné PK, případně pokud to lze, tak PK, které lze převést na číslo.
Franta Kučera aura:79
22. 4. 2009 14:48 Nový

Re: Souhlas

celé vlákno
Ideální by bylo, kdyby programátor pracoval s „přirozenými“* klíči a SŘBD by si to v pozadí převáděl na čísla – protože tohle je implementační záležitost, kterou se nechci zabývat, stejně jako když píši deklarativní SQL, místo abych psal procedurálně výběry dat z databáze.

*) třeba uživatelské jméno není přirozené, ale můžeme ho tak brát, protože je prostě dané, přichází k nám např. z jiného nadřízeného systému, nebo e-mailová adresa, kterou nám zadá uživatel, např. když chce vydat x509 certifikát pro svůj e-mail.
melkor
melkor (neregistrovaný)
23. 4. 2009 12:16 Nový

Re: Souhlas

celé vlákno
Duvod pro pouzivani ciselnych PK je i snadna moznost automatizace - v extremnim pripadku autoinkrement.
Franta Kučera aura:79
23. 4. 2009 13:07 Nový

Re: Souhlas

celé vlákno
Smyslem „autoinkrementu“ je nějak jednoduše označit vkládaný objekt, protože pro něj nemáme jinou identifikaci – tzn. neexistuje přirozený primární klíč → musíme použít umělý → nebudeme si ho vymýšlet v aplikaci, ale použijeme „autoinkrement“. Pokud ale přirozený PK, můžeme použít ten a „autoinkrement“ vůbec nepotřebujeme. Pokud nám jde o výkon (rychlost porovnání, velikost indexů), tam má smysl zavést umělé PK, ale jinak k tomu důvod moc nevidím.
atarist
atarist (neregistrovaný)
22. 4. 2009 14:29 Nový

Re: Souhlas

celé vlákno
prvni odstavec - v jednom informacnim systemu je tak 30% informaci ulozeno v takzvanych "strukturovanych poznamkach", tj. do aplikace se dobastlily dalsi atributy tak, aby se nemuselo menit GUI, uzivatele to proste cpou do poznamek - chutovka s tim dal pracovat, kazdy uzivatel si vymysli trosku neco jineho :-)

druhy odstavec - cisla (zvlast pokud jsou "mala", nejaky ten small int, int ci numeric(8)) se daji porovnat jednou operaci, zatimco u retezcu je slozitost prohledani vetsi. V tabulce o "n" zaznamech bude v nejhorsim pripade prohledavani ciselnych ID mit slozitost O(n), u retezcu je to O(n*m), kde m je prumerna delka retezce. Take (podle mych zkusenosti - ale nejsem uplne kovany databazista) se mi zda, ze je lepsi pouzivat "nemluvici" klice, protoze se DB potom lepe rozsiruje - treba vazba 1:n se da jednoduse zmenit na m:n.

Mam jeden priklad z praxe: u jedne energeticke spolecnosti je primarnim klicem v jejich databazi cislo SIPA, ze ktereho se za energie plati (na to se vazbi cislo elektromeru nebo odberniho mista). Proto je problem z jednoho uctu platit za vice odbernych mist - to jejich db nezvladne, protoze vse vazbi na SIPO, coz je blbost. Kdyby tam byl nemluvici klic, tak by klidne mohli vazbu rozsirit na m:n a vse by (po par upravach) fungovalo.
Franta Kučera aura:79
22. 4. 2009 15:17 Nový

Re: Souhlas

celé vlákno
1) To už mi přijde lepší tuhle „customizaci“ postavit na XML – v DB bude jeden sloupeček pro uživatelská XML data. To umožňuje celkem libovolné přizpůsobení ze strany uživatele a přitom jsou data strukturovaná – i když na jiném principu než je relační.

2) Jak jsem psal výše – nejradši bych, aby tuhle optimalizaci dělala databáze a já tyhle implementační detaily jako databázový modelář / programátor nemusel řešit

3) Tohle je chyba analýzy, někdo se prostě „zapomněl“ zeptat, jestli je možné platit z jednoho účtu více elektroměrů. Radši mám přirozené klíče a ty umělé beru jako nutné zlo z důvodu výkonnosti.
logik
logik (neregistrovaný)
22. 4. 2009 15:47 Nový

Re: Souhlas

celé vlákno
3) Ono v době tvorby aplikace to třeba možný nebylo. Jakmile je klíč "významovej", tak vždycky hrozí to, že si uživatel bude chtít aplikaci rozšířit a nepůjde to.

Libovolnej "mluvící" klíč požaduje, aby relace vůči němu byly 1:n. A u libovolný vlastnosti osoby jde vymyslet případ, kdy tý osobě těch vlastností přiřadím více než jednu.
Sten
Sten (neregistrovaný)
22. 4. 2009 16:12 Nový

Re: Souhlas

celé vlákno
1) Správně navrženou databázi nebývá problém rozšiřovat, důležité je, že vaše klíče musí jít snadno nahradit (= je výhodnější použít ordinální typy). Pro XML můžete rovnou použít XML databázi.

2) Jenže pokud provedete deset dotazů do databáze, tak byste to řešit měl i jako programátor: buď pošlete desetkrát nějaký string s velkou složitostí vyhledávání nebo ten string pošlete jednou a potom už posíláte ordinální typ. Stejně tak se pomocí ordinálních typů daleko snáze (a rychleji) dělají multi-tier aplikační architektury, protože ordinální typy se daleko snáze zpracovávají (např. jako klíče pro statistiky nebo cache v RAM).
LENIN POWER!
LENIN POWER! (neregistrovaný)
22. 4. 2009 16:37 Nový

Re: Souhlas

celé vlákno
db2 9 umi XML i relacni data. Ty data xml uklada ve stromove strukture a nerosekava je do tabulek. Jsou to v podstate 2 databaze v jedne. Otvira to radu novych moznosti ve vyvoji aplikaci. Kuprikladu schema evolution je velice hezke.

http://www.ibm.com/developerworks/wikis/display/db2xml/Home
Radek Tondra
Radek Tondra (neregistrovaný)
22. 4. 2009 14:36 Nový

rychlý fulltext za pět minut

celé vlákno
Operátor LIKE se možná v uvedených příkladech nehodí, ale já takhle dělám rychlý fulltext na většinu firemních stránek, kde klient nechce platit zvláštní peníze za kvalitní vyhledávání.

Stačí rozsekat dotaz pomocí whitespace a pak hledat WHERE text like '%slovo1%' and text like '%slovo2%'...

Funguje to a klienti jsou spokojení, jak to krásně hledá. Samozřejmě je seznámím s nevýhodami, ale oni sami si radší vezmou tohle za 500 než kvalitní hledání za 20 000
mig
mig (neregistrovaný)
22. 4. 2009 16:06 Nový

Re: rychlý fulltext za pět minut

celé vlákno
A co takhle použít fulltext index? To mi přijde jako podobně jednoduché, ale efektivnější řešení.
hacko
hacko (neregistrovaný)
22. 4. 2009 16:42 Nový

Re: rychlý fulltext za pět minut

celé vlákno
Za 500 jsem si nedavno nechal vykourit pero. Myslim ze to byly lepe vynalozene penize.
Franta Kučera aura:79
22. 4. 2009 17:49 Nový

Re: rychlý fulltext za pět minut

celé vlákno
:-D
LENIN POWER! aura:41
22. 4. 2009 21:45 Nový

DB2 COBRA 9.7 announced

celé vlákno
http://www-03.ibm.com/press/us/en/pressrelease/27279.wss

nejsou tam popsany vsechny nove features jen namatkou:

- Oracle PL/SQL kompatibilita
- Oracle datatype kompatibilita
- SQLplus kompatibilita
- MVCC isolation level ala Oracle - statement level snapshots. Bez pouziti rollback tablespaces nebo vacuum ala pgsql! Jeste ze to nenakodili jako to ma pgsql to vacuum by byl fakt opruz, ten rollback segment by zas tak nevadil
- Oracle builtin packages, oracle style packages a Oracle style temporary tables
- vsechen mozny SQL bordel a paskvil join syntax co podporuje Oracle podporujeme taky.
- Shrnuto - nyni 98% Oracle kompatibilni
- SQL*Loader asi podporovan zatim neni, nic o tom nepisi. Dost skoda, snad kazda
aplikace ho pouziva.
- komprese indexu (3 druhy, automaticky to vybere nejlepsi) jde to i nad XML
- komprese temporary tables
- komprese XML
- inline storage pro LOBs
- online vytvareni indexu nad XML daty
- truncate table na urovni SQL (tezko rict jak moc je to kompatibilni s truncate table v DB2/ZOS).
- statement concetrator - pro mysql like workload. Sdileni access planu mezi podobnymi dynamickymi dotazy. preklada: update X where x = 2 na update X where x = ? aby se zvysila pravdepodobnost trefeni se do statement cache.
- synchronizovane scany dorazili z zOS verze i na operacni systemy pro socky
- online presouvani tabulek mezi tablespaces - nakodili lidi ze SAPu.

Vse se stihlo za pouhe 2 roky vyvoje. V OSS softu by jste se k tomu nedopracovali ani za 10 let. A to jsme se na linuxexpu dozvedeli ze my co delame komercni soft jsme pry desne neefektivni.

ke stazeni http://www.ibm.com/developerworks/data/db2preview/
Franta Kučera aura:79
22. 4. 2009 22:14 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
Pěkné, má to jen jednu vadu – nejsou k tomu veřejné zdrojáky :-)
Ale uznávám, že než orashit, to radši DB/2.
LENIN POWER!
LENIN POWER! (neregistrovaný)
22. 4. 2009 23:15 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
zdrojaky by vam stejne k nicemu nebyly. Programatori aplikaci potrebuji dokumentaci, ne zdrojaky.
Ksl
Ksl (neregistrovaný)
22. 4. 2009 22:23 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
- Oracle PL/SQL kompatibilita
Několik let po jedné z komerčních odnoží Firebirdu? :-)
"- MVCC isolation level ala Oracle - statement level snapshots. Bez pouziti rollback tablespaces nebo vacuum ala pgsql! Jeste ze to nenakodili jako to ma pgsql to vacuum by byl fakt opruz, ten rollback segment by zas tak nevadil"
Jasně, a můj disk při každém smazání souboru přepisuje uvolněné místo nulami, zatíco OS od IBM tohle dělat nemusí. :-) To je mi ale argumentace.
"Vse se stihlo za pouhe 2 roky vyvoje. V OSS softu by jste se k tomu nedopracovali ani za 10 let. A to jsme se na linuxexpu dozvedeli ze my co delame komercni soft jsme pry desne neefektivni."
Jste děsně neefektivní co do ceny vývoje každé jednotlivé fíčury. Absolutní čísla nikdo nezpochybňuje. Samozřejmě že vrhnutím dostatečného množství peněz do vývoje produktu X dosáhne firma čehokoli (třeba i Vista se tak dá vyvinout :-)), ale pak hrozí riziko, že ta firma začne připomínat komunistický stát à la Microsoft, kdy ti, co si koupí Windows a Office, subvencují méně úspěšné projekty, o které třeba ani nestojí (IE? XBox?). (Ó ano, tvrdím, že ne FLOSS, ale spíš MS připomíná komunistický stát, nebo přinejmenší vládu socanů. :-))
LENIN POWER!
LENIN POWER! (neregistrovaný)
23. 4. 2009 0:28 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
- Oracle PL/SQL kompatibilita
Několik let po jedné z komerčních odnoží Firebirdu? :-)

Interbaze jeste zije? Kolik ze ma market share? Pro tu jsme nic nedelali asi uz 9 let. To by si nas zakaznik jako soucast reseni nevzal.

Jasně, a můj disk při každém smazání souboru přepisuje uvolněné místo nulami, zatíco OS od IBM tohle dělat nemusí. :-) To je mi ale argumentace.

DB2 je overwriting db. Stary radek prepisuje novym aby se zachovalo rowid a nemuseli se zbytecne aktualizovat indexy. Dela to dokonce az prilis dusledne a to i kdyz se novy radek nevejde do stejneho bloku tak tam flakne pointer na novou lokaci misto toho aby zaktualizovala indexy na nove umisteni.
Ksl
Ksl (neregistrovaný)
23. 4. 2009 17:12 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
DB2 je overwriting db. Stary radek prepisuje novym aby se zachovalo rowid a nemuseli se zbytecne aktualizovat indexy. Dela to dokonce az prilis dusledne a to i kdyz se novy radek nevejde do stejneho bloku tak tam flakne pointer na novou lokaci misto toho aby zaktualizovala indexy na nove umisteni.
No třeba Firebird také řádek při jeho změně přepisuje a na index nehrabe, pokud nemusí. Já měl na mysli hlavně to, že čištění řádků se dá poladit tak, aby se odložilo do doby, kdy se stejně s místem, které řádek zabírá, musí provést nějaká jiná operace. O luxování v PostgreSQL toho moc nevím, ale že by Firebirdí luxování nějak blokovalo provoz, to si moc lidí nestěžuje.
LENIN POWER!
LENIN POWER! (neregistrovaný)
23. 4. 2009 18:57 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
pokud databaze musi luxovat tak neni prepisujiciho typu protoze ma v db bloku ulozeny ruzne verze jednotlivych radek. Dela to treba pgsql.

Oracle, mssql a DB2 tohle nemaji, Oracle si zapisuje kazdy modifikovany blok do rollbacksegmentu. MSSQL si tam zapisuje jen radku. Db2 zapisuje do logu starou i novou hodnotu radky aby mohla v pripade rollbacku tam vratit tu starou.

Proto jsou treba Oracle transakcni logy tak male jelikoz je tam jen nova a ne stara hodnota. Kdyz jsou tam obe dve tak se zase da delat rollbackward recovery, coz taky neni nekdy uplne od veci. Nejnenazranejsi logy ma pgsql ten tam zjevne misto radek flaka hned cely stranky.
Ksl
Ksl (neregistrovaný)
23. 4. 2009 20:23 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
Firebird přepisuje řádek in-place a stejně je má verzované. :]
LENIN POWER! aura:41
23. 4. 2009 0:33 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
koukam ze cobra umi cpat retezce '3451' do integer sloupecku. To je fakt nechutny, takhle podlejzat uzivatelum mysql...

Kompatibilita s oraclem ma i sve plusy - nyni mame po 25 letech v db2 konecne boolean data typ!
Pavel Stěhule aura:89
23. 4. 2009 7:48 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
Jestli to není kompatibilita s PostgreSQL - http://www.rttnews.com/Content/TopStories.aspx?Id=920420
LENIN POWER! aura:41
23. 4. 2009 11:02 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
crawler=> create table test1(i integer);
CREATE TABLE
crawler=> insert into test1 values('33');
INSERT 0 1

musim se priznat ze jsem mel o pgsql vetsi mineni jak dodrzuje standardy.
Pavel Stěhule aura:89
23. 4. 2009 12:30 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
'33' je uknown konstanta, ktera je přetypovatelná na cokoliv u čehož znám typ, je to adekvátní zápisu

postgres=# insert into foo values(integer '33');

tzv. string literal. Pokud si ovšem vynutím typ - tak se pg ozve:

postgres=# insert into foo values(varchar '33');
ERROR: column "i" is of type integer but expression is of type character varying
LINE 1: insert into foo values(varchar '33');
^
HINT: You will need to rewrite or cast the expression.
postgres=#

něco v apostrofech neznamená automaticky string, viz např. date nebo timestamp.
Pavel Stěhule aura:89
23. 4. 2009 7:47 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
Lenine - nevím nezkoušel jsem, ale nějakým způsobem je to přebandlovaná EnterpriseDB. Docela bych se nedivil, kdyby uvnitř bylo něco z Postgresu nebo nějaký můj kód. http://www.rttnews.com/Content/TopStories.aspx?Id=920420

Ty Oracle LIKE věci jsou určitě z EnterpriseDB. Tudíž přišli k hotovému - na EnterpriseDB se už dělá docela dlouho - a já si lámal hlavu, za co EnterpriseDB dostala tučnou finanční injekci od IBM. Tak už teď je to jasné.

Synchronizovaný scan má PostgreSQL od verze 8.3 - jen tak pro úplnost.
LENIN POWER! aura:41
23. 4. 2009 11:17 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
Precetl jsem si u nich na webu ze to fakt ibm strelili za 10Mega. Nevim zda IBM dostala nejake jejich akcie jako soucast dealu. Na miste IBM bych se s tim ale nesral a projistotu koupil celou jejich spolecnost aby se ta technologie nedostala ms do rukou.

http://www.enterprisedb.com/solutions/ibm_db2_license.do#TabLic

Za 10 Mega to je opravdu zadarmo - vzdyt jen podelany MySQL stalo gigo! To byla nejvetsi pitomost co sun kdy udelal. IBM si namasti kapsu a ti co to udelali utrou hubu. Nekdo umi kodovat, jiny delat obchody.

Ja byt MS tak to okamzite za 10 Mega koupim taky i kdyby se to nikdy nepouzilo, tak je to vynikajici investice. Pro Larryho by nastaly tezke casy kdyby byl MSSQL server Oracle kompatibilni jako cobra. Pokud nemaji v MS v hlave slamu tak to okamzite licencuji taky. Ja bych na miste MS to mel koupeny uz hned ten den co to announcnuly ze chteji tu technologii strelit i dalsim db vendorum. 10 Mega, to je krasna cena.
Franta Kučera aura:79
23. 4. 2009 15:00 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
Když tady tak pořád vyzdvihuješ tu kompatibilitu s Oraclem, jakou má konkrétní výhodu pro zákazníka? Dejme tomu, že mám licence na Oracle 10g – můžu přejít na 11 nebo na DB/2, Oracle se ale bude hodně snažit, abych šel do 11, takže bude mít i konkurenceschopnou cenu, navíc přechod na 11 bude méně bolestný než přechod na DB/2.

Takže to má smysl spíš jen tehdy, když jsem dodavatel, vyvinul jsem soft pro oracle a teď ho chci prodat zákazníkovi, který má DB/2.
LENIN POWER!
LENIN POWER! (neregistrovaný)
23. 4. 2009 16:28 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
U Oraclu se kupuji jednotlive verze db? Ja do tech detailu licenci oraclu moc nevidim. U veskereho ibm softu kdyz mate sw. maint + support tak si tam muzete hodit jakoukoliv podporovanou verzi. Jelikoz u Oraclu miste mit support koupeny povine, tak bych predpokladal ze budou mit to same schema.

Migrace Oracle -> DB2 jsou naprosto v klidu kdyz aplikace podporuje obe db. My jsme takhle premigrovali nas interni SAP s minimalnim downtime. Tyhlety migrace SAPu se naprosto bezne rutine delaji. Beha to tedy o dost rychlejs, hlavne ty velky sestavy. DB2 je primarni db pro sap a kazda verze i fixpak je pred vydanim testovan u SAPu zda tam nejsou nejake regrese. Ten SAP fakt dneska nema cenu behat na necem jinym.

Proc lidi migruji z oraclu -> db2? Je s tou databazi podstatne mene srani s administraci, HADR ~ Oracle Dataguard to ma zdarma v cene, umi velice dobre komprimovat tabulky (30-60%), cobra umi komprimovat i indexy (cca 30-50%), diky tomu ze je rychlejsi tak staci zhruba pulka procesorovych licenci, lepsi shared nothing clustering, multi dimension clustering pro warehouse tablice, vyborna podpora XML, umi staticky SQL, hinting ma taky lepsi - da se tunit bez zasahu do aplikace. Umi ruzne vychytavky jako treba neomezene dlouhe transakce, defered unique key check a tak.

Dalsim duvodem je POWER zelezo, ktere je opravdu s AIXem vynikajici pro databazove servery. To je vyhoda jednoho dodavatele. Mate optimalizovan CPU, HW, OS a databazi.

Pro administraci to nevyzaduje takove bouchace jako oracle, je to mnohem snadnejsi. Adminovat db2 se naucite velmi rychle kdyz uz znate neco lepsiho nez mysql. Ja ji mam radsi, snadneji se pouziva a je stabilnejsi nez oracle. Takovy hovadiny jako ze se v oraclu zase podelaly control filez nebo aby to po shutdown immediate automaticky nenabehlo a chtelo recovery, ty se tam fakt nestavaji.

Taky se mi libi intergrace s TSM, to se pak zalohuje opravdu luxusne. Tezko najdete nekoho kdo ma db2 a nezalohuje pres TSM. Zalohovat tim bastlem v oraclu je dost opruz.

http://www.channeldb2.com/video/db2-is-easy-to-learn
http://www-01.ibm.com/software/data/db2/lowerdatabasecosts/

lidi migruji na db2 zejmena kvuli kompresi, xml a snadnejsimu pouzivani. Jo komprese je fakt dobra na z/OS to meli leta a tam kompresili vsichni vsechno, kdyz to dodelali i do db2 9 na linux tak to byl velky jasot. Zejmena warehouse tablice to znacne smrskne. Celej nas SAP to smrsklo asi na 30% puvodni velikosti v Oraclu, je fakt ze jsme tam meli velky tmp a rollback spaces jinak nam to padalo.
DK
DK (neregistrovaný)
23. 4. 2009 20:18 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
Kdyz si tak ctu vsechny funkce, kteryma se DB2 snazi predstirat, ze je Oracle, tak si tak rikam, jestli neni jednodussi zustat na skutecnem Oracle :-).

Pokud jde o support Oracle, tak v cene je samozrejme i upgrade na libovolnou jinou verzi (vc. prechodu mezi velkymi verzemi tj. 9i->10g->11g) nebo migrace mezi platformami.
O tom, ze by se support na Oracle MUSEL platit nic nevim. Je ale pravda, ze si ho vetsina zakazniku plati. Mit pristup k patchsetum, patchum a prave upgrade se proste hodi. Jedine co nejde, je aby si zakaznik platil support na jeden server a na druhy ne.

Pokud jde o migrace, pochybuji, ze podpora Oracle funkci v DB2 IBMce nejak pomuze.
Je to otazka podpory vyrobcu aplikaci. Zmigrovat SAP z Oracle na DB2 (nebo zpatky) je trifka - kdyz vyrobce aplikace podporuje obe databaze. (Uznavam, na SAP neni nic trifka :-) ).
Jenze zmigrovat aplikaci, kterou vyrobce podporuje jen na Oracle, to znamena, ze zakaznik prijde o podporu od vyrobce aplikace. A IBM muze stokrat slibovat, ze DB2 bude fungovat stejne jako Oracle. A podporovat aplikaci na obou databazich, to zas pro vyrobce znamena mit lidi na oboji a testovat vse na obou databazich. Sam uznate, ze to neni tak jednoduche.
Navic si myslim, ze zakladni problem proc DB2 neni tak pouzivana je jednoduchy - nejsou lidi. Administratora Oracle sice taky nepotkate na kazdy stanici tramvaje, ale administratoru DB2 je jeste radove mene.

Jinak stejne tak jako SAP testuje vse na DB2, tak podobne uz pres 10 let testuje totez i na Oracle. Dokonce udajne primo v SAPu ve Waldorfu sedi lidi z Oracle a delaj support. Uznavam, ze SAP nema posledni dobou moc duvodu se tim chlubit, ale tech 60% SAPich zakazniku, kteri pouzivaji Oracle je dobrym duvodem, aby se SAP snazil na Oracle behat spravne. :-)

Jinak se nechci hadat - urcite najdete spoustu dilcich rozdilu mezi obema databazemi, ktere vas vedou k preferenci DB2, ja jen doplnim pro ostatni to vase srovnani:
- Komprese - v Oracle od 9i, od 11g i pro OLTP aplikace, taky 1:2-1:3 nekdy ale i vyrazne lepsi. Pravda, jen v EE.
- Komprese indexu- pokud vim tak taky
- DataGuard - v cene EE
- Pro zmenu zas lepsi shared disk clustering :-)
- podpora XML - taky
- i Oracle se da ladit bez zasahu do aplikace - Profiles, stored outlines, SQL Plan Management.
- deferred constraints - taky, vc. unique key
- Power servery - uznavam argument jednoho dodavatele, ale i na IBM Power tech Oracle bezi docela dost
- Integrace s TSM -pokud vim, tak do TSM existuje modul i pro Oracle, ale uznavam, ze ho neznam.

Jak jsem rekl, nechci se hadat. Respektuji vasi preferenci a jak tak ctu vase drivejsi komentare vim, ze mate zkusenosti s obojim. Jen jsem si rikal, ze doplnim vas prispevek aby nahodou nevznikl u ostatnich nejaky omyl.
LENIN POWER!
LENIN POWER! (neregistrovaný)
24. 4. 2009 0:59 Nový

Re: DB2 COBRA 9.7 announced

celé vlákno
oracle kompresi cele bloky, db2 dela cele tabulky. Kompresovani celych tabulek dava znatelne lepsi kompresni pomer, proto se treba delaji tzv. solid archivy.

pokud se tyka komprese indexu oracle umi jen prefix kompresi a jeste ma fixed length prefix. db2 umi navic rowid delta kompresi v indexu a pripadne block level dictionary pro ty zakomprimovane prefixy. V oraclu se musi nastavovat jaky sloupecky v indexu to ma kompresit, v db2 pozna sama ktere indexy a jak komprimovat pokud je komprimovana tabulka tak default zakomprimuje i indexy.

XML ala oracle (shred nebo C/B LOB) mela db2 ve verzich 7 a 8. V db2 devitce maji pro ukladani xml stejny engine ktery pouzivaji XMLdatabaze. To je o generaci lepsi technologie. Proto se taky xml databaze pouzivali, cpat xml do relacni db byl dost opruz.

ty aplikace do db2 bude prevadet jejich vyrobce, ne koncovy zakaznik. To da rozum.

Ne vsechny databaze jsou tak tezke na spravu jako oracle, podivejte se na mssql - pouzivaji to male firmy kde maji lidi s minimalnimy znalostmi a zvladaji to. Oracle by nezvladli. Kdyz vezmete cloveka co umi pgsql nebo firebird tak ten po kratkem zauceni db2 adminovat zvladne stejne jako by zvladnul mssql. Podivejte se na to video.

Hlavni duvod proc mam db2 radsi je ze se muzu starat o svuj byznis a nemusim porad hopsat okolo databaze, ktera se seka s naprosto mimo misu chybovyma hlaskama, ke ktery je oficialni dokumentace tak mizerna ze bez knizek se s ni neda rozumne pracovat a Oracle Support? To je kapitola sama pro sebe.

DB2 na nemainframe platformach pred zakazniky tajime. pro nas byznis je lepsi kdyz pojedou na oraclu. Zvlast pro ten data mining co dodavame, tam se Oracle rozhodne nepredre a tak musi mit vice licenci na CPU priblizne dvojnasobek, radsi hned cely cluster, to je pak oslicku otres se. Dobrej for je dodavat jim to na HP-UX a machrovat s TPC-H vysledkama. Je to pomaly jak prase a drahy jak svine. Jo Oracle, ten uz nam vydelal peknejch par mega $$. Licence, skoleni, tuning - to jsou penize co doslova prsi z nebe. Larry vi jak delat byznis.
Jan Michálek aura:44
23. 4. 2009 9:42 Nový

Pro hledání chyb v zabordelené db...

celé vlákno
..je to šikovná věcička, na to, abych na základě toho něco např. updatoval/deletoval to není, ale, abych si udělal představu, co tam vlastně je je to optimál. Například různě zmršenej import češtiny apod.. Například u názvů obcí, měly by tam bejt "černožice", ale nejsou, chybí, nebo je někdo blbě namigroval (s blbým kódováním čj)? potom like '%erno%ice' je snadná cesta z bryndy.
yossarian
yossarian (neregistrovaný)
23. 4. 2009 9:56 Nový

Re: Pro hledání chyb v zabordelené db...

celé vlákno
To ale pocitam nebudete ten dotaz spoustet co 5 sekund po dobu zivotnosti aplikace :)
Jan Michálek aura:44
23. 4. 2009 10:00 Nový

Re: Pro hledání chyb v zabordelené db...

celé vlákno
No, pouzivam to celkem casto, na pripady, jako jsem prave uvedl. Netrvá to sto let (a to naše db je dost velká) a pořád mi to sežere míň času, než vymejšlet sofistikované řešení. Problém je migrace velkých dat od různých dodavatelů, hodně sloupců hodně řádek, to se v ideálním stavu prostě udržet nedá.
db-man
db-man (neregistrovaný)
27. 4. 2009 15:31 Nový

vyhoda myisam

celé vlákno
je v tom, ze se da pouzit grep a vyhleda to v cele tabulce a ne jen v nejakem sloupci.
Pavel Stěhule aura:89
28. 8. 2010 8:11 Nový

Re: vyhoda myisam

celé vlákno

To lze i v pg (pozor na vykon)
SELECT * FROM tab WHERE tab::text like ‚…‘

Zasílat nově přidané příspěvky e-mailem