Názory k článku
Úvaha ohledně zneužívání LIKE v databázích
Zbytecne dlouhe
celé vláknoRe: Zbytecne dlouhe
celé vláknoRe: Zbytecne dlouhe
celé vlákno2. ano, existuji legalni pripady, kdy je vhodne pouzit like, ale neni jich mnoho
3. clanek je vyborny a diky za nej
Re: Zbytecne dlouhe
celé vláknoNe ž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.
Re: Zbytecne dlouhe
celé vláknoRe: Zbytecne dlouhe
celé vláknoJj. 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.
Re: Zbytecne dlouhe
celé vláknoRe: Zbytecne dlouhe
celé vláknoPracujem 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.
Re: Zbytecne dlouhe
celé vláknoi LIKE it
celé vláknoPopsaný 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.
Re: i LIKE it
celé vláknoRe: i LIKE it
celé vláknoRe: i LIKE it
celé vláknoRe: i LIKE it
celé vláknoArogantní text bez komplexního přemýšlení
celé vláknoNo, autore bez profilu; neoslnil jsi mne, zatím nedostatečná. Naučte se to ještě jednou a přijďte znovu ...
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoThe 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. :-)
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoA 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoNahoda je blbec ale statistika je ocelova, transakce jsou monstrance dnesni IT doby a plni zejmena tu ulohu, aby mohl management klidne spat.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoA zakon schvalnosti funguje spolehlive: Prevazna vetsina poruch je tesne pred denni zalohou. Je snad lepsi ztratit cely den prace nez pouzivat transakce?
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoPokud 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".
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoFirmy naštěstí nepoužívají MySQL
No jó, ani Google ani Seznam nejsou firmy, to jsou zájmová sdružení :)
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vlákno(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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoSQL 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.
profi db
celé vláknoDalsi 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.
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.
Re: profi db
celé vláknoTo 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.
Re: profi db
celé vláknoPokud 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.).
Re: profi db
celé vláknodb2 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.
Re: profi db
celé vláknoNaví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.
Re: profi db
celé vláknojak se ma nastavit vacuum_cost_* aby to jelo rychle?
Re: profi db
celé vláknoRe: profi db
celé vláknodb2 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.
Re: profi db
celé vláknobez 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.
Re: profi db
celé vláknoA věřte že "pořádného hardwaru" už jsem viděl celkem dost ...
Re: profi db
celé vláknomysql 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.
Re: profi db
celé vláknoNo 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.
Re: profi db
celé vláknoV 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.
Re: profi db
celé vláknoRe: profi db
celé vláknoPro 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.
Re: profi db
celé vláknoTo ž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ě ...
Re: profi db
celé vláknoPokud 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.
Re: profi db
celé vláknoDiví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/
pgsql
celé vláknoINFO: 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.
Re: pgsql
celé vláknoINFO: 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.
Re: pgsql
celé vlákno* 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.
Re: pgsql
celé vláknoDoporuč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.
Re: profi db
celé vláknoKaž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.
Re: Arogantní text bez komplexního přemýšlení
celé vlákno- 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ě)
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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoJistě, 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoNemusíte psát, jak je fyzická bezpečnost důležitá. Dobře to vím.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoVeril 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoNa 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vlákno- 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoReakce 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknomisto 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknohttp://linux.die.net/man/2/vfork
Které konkrétní možnosti máte na mysli u CreateProcess?
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoTak 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é.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknomysql a atomicita statementu
celé vlákno1.
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?
Re: mysql a atomicita statementu
celé vlákno1.
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í. :-)
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoTotiž 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknovelmi slaby clanek.
a je mi uplne jedno, kolik domen autor provozuje, co na ne pise a kam prispiva. hodnotim clanek, nikoli barvu autorovych oci.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoRe: Arogantní text bez komplexního přemýšlení
celé vláknoA 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.
Re: Arogantní text bez komplexního přemýšlení
celé vláknoSamozř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?
Re: Arogantní text bez komplexního přemýšlení
celé vláknoRE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknojinak LIKE je v urcitych pripadech OK, napriklad pokud ma formu napriklad 'hledaneslovo%'. Ovsem forma '%hledaneslovo%' je opravdu silenost nejvetsi
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoRE: Úvaha ohledně zneužívání LIKE v databázích
celé vlákno"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' ??
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoRE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknohttp://sql602.sourceforge.net/helpdir-cs/xml/html/fulltext.html
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoExistuje 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.
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoOvšem z hlediska aplikace je 90% oprávněných použití operátoru LIKE nahraditelných fulltextem.
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoA 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).
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoV praxi to samozřejmě nemá moc význam, datový model musí být slušně navržený.
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoNehledě 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).
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoPoužívat LIKE jako náhradu fulltextu je samozřejmě hrubě špatně.
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoNěkteré LIKE dotazy optimalizovat lze (například postfixové dotazy, tj. dotazy "retezec%" lze optimalizovat pomocí indexů), ale většina je bohužel "neoptimalizovatelná" :-(
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoOvsem forma '%hledaneslovo%' je opravdu silenost nejvetsiCo to je za plk?
RE: Úvaha ohledně zneužívání LIKE v databázích
celé vláknoOvsem 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%'
1NF je historicky nesmysl
celé vláknoRe: 1NF je historicky nesmysl
celé vlákno1NF 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¨¨¨¨¨
Re: 1NF je historicky nesmysl
celé vláknoNaprosto 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.
Re: 1NF je historicky nesmysl
celé vláknoopakování je matka moudrosti
celé vláknoRe: opakování je matka moudrosti
celé vláknoPocitace vs clovek
celé vláknoPopsany 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;' :-)
Re: Pocitace vs clovek
celé vláknoSpíš 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).
Re: Pocitace vs clovek
celé vláknoRe: Pocitace vs clovek
celé vláknoAle pochopitelně existují i aplikace (ať už historické nebo nové) kde to rádobyanalytik takto navrhnul a rádobyvývojář zbastlil.
Re: Pocitace vs clovek
celé vláknoRe: Pocitace vs clovek
celé vláknoTo 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íč.
Re: Pocitace vs clovek
celé vláknoNešlo by to napsat jinak?
celé vláknoZají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?
Re: Nešlo by to napsat jinak?
celé vláknoRe: Nešlo by to napsat jinak?
celé vláknoRe: Nešlo by to napsat jinak?
celé vláknoRe: Nešlo by to napsat jinak?
celé vláknoV 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" :)
Re: Nešlo by to napsat jinak?
celé vláknoJenze 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.
Re: Nešlo by to napsat jinak?
celé vláknoTentokrat se pridam ke kritikum
celé vláknoTakze 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 :-(
Re: Tentokrat se pridam ke kritikum
celé vláknoto že je blbě návrh DB ještě neznamená že je nějaký SQL příkaz na prd .)
Re: Tentokrat se pridam ke kritikum
celé vláknoRe: Tentokrat se pridam ke kritikum
celé vláknomaterializovaný 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ě.
Re: Tentokrat se pridam ke kritikum
celé vláknoRe: Tentokrat se pridam ke kritikum
celé vláknoGOTO je nemetodicke a kazi programy
celé vláknoclock@duke:~/links-current$ fgrep goto *.[ch] | wc -l
1038
Tyhle dogmata osrat.
Re: GOTO je nemetodicke a kazi programy
celé vláknoJiste, 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 :-)))
Re: GOTO je nemetodicke a kazi programy
celé vláknoRe: GOTO je nemetodicke a kazi programy
celé vláknoRe: GOTO je nemetodicke a kazi programy
celé vláknoRe: GOTO je nemetodicke a kazi programy
celé vláknoRe: GOTO je nemetodicke a kazi programy
celé vláknoVy 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ší.
Re: GOTO je nemetodicke a kazi programy
celé vláknoTady 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.
Re: GOTO je nemetodicke a kazi programy
celé vláknoRe: GOTO je nemetodicke a kazi programy
celé vláknoRe: GOTO je nemetodicke a kazi programy
celé vláknoRe: GOTO je nemetodicke a kazi programy
celé vláknoje 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.
Re: GOTO je nemetodicke a kazi programy
celé vláknoRe: GOTO je nemetodicke a kazi programy
celé vláknoZa jistych okolnosti je nutne a nenahraditelne, ale rozhodne bych ho nepouzival denne.
Re: GOTO je nemetodicke a kazi programy
celé vláknoTo teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoClanek 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.
Re: To teda čumím.....
celé vlákno...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....
Re: To teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoRe: To teda čumím.....
celé vláknoNo 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).
šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoA propo: treba by nam to mohli prozradil sami tvurci Roota, jak je resene vyhledavani
Re: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoTakze 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?
Re: šlendriánský neprogramátor
celé vláknoPostgreSQL 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?
Re: šlendriánský neprogramátor
celé vlákno:)
Re: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoRe: šlendriánský neprogramátor
celé vláknoSoudě 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 :-)
Drobné rýpnutí
celé vláknoZato články píše kvalitné. A nebo je z Moravé :-)
Psáno z pohledu kodéra
celé vláknoZazlí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).
Re: Psáno z pohledu kodéra
celé vláknoUlohou 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.
Re: Psáno z pohledu kodéra
celé vláknoRe: Psáno z pohledu kodéra
celé vláknoProblé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).
Re: Psáno z pohledu kodéra
celé vláknoTakovy 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
Re: Psáno z pohledu kodéra
celé vláknoTrochu 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.
Re: Psáno z pohledu kodéra
celé vláknoRe: Psáno z pohledu kodéra
celé vláknoNejvě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.
Re: Psáno z pohledu kodéra
celé vlákno> 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.
Re: Psáno z pohledu kodéra
celé vláknoRe: Psáno z pohledu kodéra
celé vláknoKromě 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ě".
Re: Psáno z pohledu kodéra
celé vláknoRe: Psáno z pohledu kodéra
celé vláknoNa prefix matching LIKE (+ jednoduchy index), na ostatne FTI
celé vlákno(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).
Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoNe 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.
Re: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoNapriklad 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.
Re: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoRe: Nadavate na like a select * vam nevadi
celé vláknoINSERT 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í.
Uff (ale stejně tleskám)
celé vláknoRe: Uff (ale stejně tleskám)
celé vláknoPripomienka
celé vlákno"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.
Re: Pripomienka
celé vláknoOptimalizace 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.
Re: Pripomienka
celé vláknoProc 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?
Re: Pripomienka
celé vláknoZ 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.
Re: Pripomienka
celé vláknoMSSQL 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?
Re: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoMusite 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.
Re: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoA presne o tom je - co si zaplatim, to mam.
Re: Pripomienka
celé vláknoOsobne mam o teorii, ze kdyz nekomu "jen tak" zaplatite vic, ze automaticky dostanete vyssi kvalitu, silne pochybnosti.
Re: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoAle to pochopíte, až budete mít rodinu s dětmi.
Re: Pripomienka
celé vláknoChapu 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.
Re: Pripomienka
celé vlákno> "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.
Re: Pripomienka
celé vláknoKaž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í.
Re: Pripomienka
celé vláknoDí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.
Re: Pripomienka
celé vláknoPracuji 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?
Re: Pripomienka
celé vláknoRe: Pripomienka
celé vlákno- 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.
Re: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoV 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í.
Re: Pripomienka
celé vláknoJa 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.
Re: Pripomienka
celé vláknoOptimalizovat 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.
Re: Pripomienka
celé vláknoTo, že se hranice mezi návrhem a optimalizací v praxi často stírá je smutná realita.
Re: Pripomienka
celé vláknoNa 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).
Re: Pripomienka
celé vláknoSoučá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ě.
Re: Pripomienka
celé vláknoA 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.
Re: Pripomienka
celé vláknoTakž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.
Re: Pripomienka
celé vláknokrucinal, neumi uz nikdo dneska poradne cist - stoji tam ____ U V A H A _____
Re: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoRe: Pripomienka
celé vláknoNavic 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.
Re: Pripomienka
celé vláknoA 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
ultimativni reseni
celé vláknoRe: ultimativni reseni
celé vláknozákladní vyhledávání v číselnících
celé vláknoJe to tedy špatné řešení? A jaké je správné?
Re: základní vyhledávání v číselnících
celé vláknoI 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%.
Re: základní vyhledávání v číselnících
celé vláknoJak 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í)?
Re: základní vyhledávání v číselnících
celé vláknoPtat se muzete vzdycky :-) To, zda si to muzete nebo nemuzete dovolit zavisi na spouste dalsich faktoru, zejmena velikosti prohledavanych dat.
Re: základní vyhledávání v číselnících
celé vláknoRe: základní vyhledávání v číselnících
celé vláknoRe: základní vyhledávání v číselnících
celé vláknoRe: základní vyhledávání v číselnících
celé vláknoJá 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.
Re: základní vyhledávání v číselnících
celé vláknoRe: základní vyhledávání v číselnících
celé vláknoRe: základní vyhledávání v číselnících
celé vláknoV 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.
Souhlas
celé vláknoMě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ě)?
Re: Souhlas
celé vláknoDelší 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.
Re: Souhlas
celé vlákno*) 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.
Re: Souhlas
celé vláknoRe: Souhlas
celé vláknoRe: Souhlas
celé vláknodruhy 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.
Re: Souhlas
celé vlákno2) 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.
Re: Souhlas
celé vláknoLibovolnej "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.
Re: Souhlas
celé vlákno2) 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).
Re: Souhlas
celé vláknohttp://www.ibm.com/developerworks/wikis/display/db2xml/Home
rychlý fulltext za pět minut
celé vláknoStačí 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
Re: rychlý fulltext za pět minut
celé vláknoRe: rychlý fulltext za pět minut
celé vláknoDB2 COBRA 9.7 announced
celé vláknonejsou 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/
Re: DB2 COBRA 9.7 announced
celé vláknoAle uznávám, že než orashit, to radši DB/2.
Re: DB2 COBRA 9.7 announced
celé vláknoRe: DB2 COBRA 9.7 announced
celé vlákno- Oracle PL/SQL kompatibilitaNě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ů. :-))
Re: DB2 COBRA 9.7 announced
celé vláknoNě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.
Re: DB2 COBRA 9.7 announced
celé vláknoDB2 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.
Re: DB2 COBRA 9.7 announced
celé vláknoOracle, 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.
Re: DB2 COBRA 9.7 announced
celé vláknoRe: DB2 COBRA 9.7 announced
celé vláknoKompatibilita s oraclem ma i sve plusy - nyni mame po 25 letech v db2 konecne boolean data typ!
Re: DB2 COBRA 9.7 announced
celé vláknoRe: DB2 COBRA 9.7 announced
celé vláknoCREATE TABLE
crawler=> insert into test1 values('33');
INSERT 0 1
musim se priznat ze jsem mel o pgsql vetsi mineni jak dodrzuje standardy.
Re: DB2 COBRA 9.7 announced
celé vláknopostgres=# 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.
Re: DB2 COBRA 9.7 announced
celé vláknoTy 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.
Re: DB2 COBRA 9.7 announced
celé vláknohttp://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.
Re: DB2 COBRA 9.7 announced
celé vláknoTakž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.
Re: DB2 COBRA 9.7 announced
celé vláknoMigrace 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.
Re: DB2 COBRA 9.7 announced
celé vláknoPokud 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.
Re: DB2 COBRA 9.7 announced
celé vláknopokud 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.
Pro hledání chyb v zabordelené db...
celé vláknoRe: Pro hledání chyb v zabordelené db...
celé vláknoRe: Pro hledání chyb v zabordelené db...
celé vláknovyhoda myisam
celé vláknoRe: vyhoda myisam
celé vláknoTo lze i v pg (pozor na vykon)
SELECT * FROM tab WHERE tab::text like ‚…‘

