Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Prohledavani databaze pro hodnotu

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Prohledavani databaze pro hodnotu

Autor: JiriValerian

16:30:08 01.10.2009

[color=#008000]peta Napsal:
-------------------------------------------------------
> Maaartin
> "spravny VOraclista ti rekne ze 10 GB je malinka
> databazicka"
> :))) Tak, kdyz myslis, pojd nam to nastavit tak,
> aby se to pravidelne nezhroutilo pri zapisech
> predmetu :) Samotny program je tak konsky psany,
> ze se divim, ze to databaze zvlada za bezneho
> chodu :) Soucasne maji podobny problem na vsech
> skolach :)
> Takze si myslim o slavnem Oracle sve :)[/color]

Prakticky žádný složitější SW není zcela bez chyb, ale špičkové softy jako jsou např. databázové stroje Oracle jich mají "relativně" co nejméně. Problém bude spíš v tom, že neefektivně či nevhodně napsaná aplikace byť využívající sebelepší komponenty jako třeba databázi Oracle zůstává stále neefektivně či nevhodně napsanou aplikací podobně jako když si někdo špatně vyrobí či navrhne vlastní závodní auto tak ho moc nevytrhne ani to, že je v něm použit motor třeba z Ferrari ;).

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: JiriValerian

15:05:05 01.10.2009

[color=#008000]peta Napsal:
-------------------------------------------------------
> Tu mame Stag v Oracle, co jsem delal vypis
> tabulek, tak jich bylo snad kolem 1000? Spousta z
> nich ma ale do 100 radku. Tabulka se studenty asi
> 10.000 . Tabulka se znamkami a pod muze mit i
> 1.000.000 . To uz by se dalo povazovat za velke
> :)
> Hlavne bych to povazoval za neoptimalizovane.
> Spousta tect pomocnych tabulek by se dala resit
> jednou s 1000 zaznamy, coz by bylo jiste skoro
> stejne rychle jako spojovat 10 dokupy.
>
> Ten script pro Oracle v PHP vypada asi takt
> o$query = "select table_name from all_all_tables
> ORDER BY table_name ASC";
> $stmt = oci_parse($db_conn, $query);
> $exec = oci_execute($stmt);
> if (!$exec) {$err = oci_error($stmt); echo
> $err['message'];}
> $t.= '

    ';
    > $i=0;
    > while ($res = oci_fetch_array($stmt))
    > {
    > // foreach($res as $key=>$value)
    > // {if ($key==='TABLE_NAME') {$t.=
    > '
  • '.$value.'
  • ';}}
    > foreach($res as $key=>$value)
    > {if ($key==='TABLE_NAME') {$t.=
    > '
  • '.strtolower($value).'
  • ';}}
    > $i++;
    > }
    > $t.= '
';
> $t.= '

'.$i.' tabulek

';
>
> Misto vypisovani tam das SQL prohledavani. A cele
> to obklopis transakcemi, aby to nezdrzovalo.
> Normalne se kazdy dotaz bere jako samostatna
> transakce a SQL resi vselijake uzavirani a
> zamykani. Je pro to nejaky spesl php nebo sql
> prikaz...
>[/color]

[code][color=#000080]...
// parametr [b]OCI_DEFAULT[/b] způsobí, že [b]oci_execute[/b] se nebere jako samostatná transakce
$exec = oci_execute($stmt, [b]OCI_DEFAULT[/b]);
...
// a na závěr potvrdit všechny transakce
[b]oci_commit($db_conn);[/b]
...[/color][/code]

Podrobněji viz odkaz na článek k tomu.

[b]Performing Transactions with Oracle and PHP[/b]
http://www.oracle.com/technology/pub/articles/oracle_php_cookbook/fuecks_transactions.html

    '; > $i=0; > while ($res = oci_fetch_array($stmt)) > { > // foreach($res as $key=>$value) > // {if ($key==='TABLE_NAME') {$t.= > '
  • '.$value.'
  • ';}} > foreach($res as $key=>$value) > {if ($key==='TABLE_NAME') {$t.= > '
  • '.strtolower($value).'
  • ';}} > $i++; > } > $t.= '
'; > $t.= '

'.$i.' tabulek

'; > > Misto vypisovani tam das SQL prohledavani. A cele > to obklopis transakcemi, aby to nezdrzovalo. > Normalne se kazdy dotaz bere jako samostatna > transakce a SQL resi vselijake uzavirani a > zamykani. Je pro to nejaky spesl php nebo sql > prikaz... >[/color] [code][color=#000080]... // parametr [b]OCI_DEFAULT[/b] způsobí, že [b]oci_execute[/b] se nebere jako samostatná transakce $exec = oci_execute($stmt, [b]OCI_DEFAULT[/b]); ... // a na závěr potvrdit všechny transakce [b]oci_commit($db_conn);[/b] ...[/color][/code] Podrobněji viz odkaz na článek k tomu. [b]Performing Transactions with Oracle and PHP[/b] http://www.oracle.com/technology/pub/articles/oracle_php_cookbook/fuecks_transactions.html

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: peta

14:04:53 01.10.2009

Tu mame Stag v Oracle, co jsem delal vypis tabulek, tak jich bylo snad kolem 1000? Spousta z nich ma ale do 100 radku. Tabulka se studenty asi 10.000 . Tabulka se znamkami a pod muze mit i 1.000.000 . To uz by se dalo povazovat za velke :)
Hlavne bych to povazoval za neoptimalizovane. Spousta tect pomocnych tabulek by se dala resit jednou s 1000 zaznamy, coz by bylo jiste skoro stejne rychle jako spojovat 10 dokupy.

Maaartin
"spravny VOraclista ti rekne ze 10 GB je malinka databazicka"
:))) Tak, kdyz myslis, pojd nam to nastavit tak, aby se to pravidelne nezhroutilo pri zapisech predmetu :) Samotny program je tak konsky psany, ze se divim, ze to databaze zvlada za bezneho chodu :) Soucasne maji podobny problem na vsech skolach :)
Takze si myslim o slavnem Oracle sve :)

Liam
Ten script pro Oracle v PHP vypada asi takt
o$query = "select table_name from all_all_tables ORDER BY table_name ASC";
$stmt = oci_parse($db_conn, $query);
$exec = oci_execute($stmt);
if (!$exec) {$err = oci_error($stmt); echo $err['message'];}
$t.= '

    ';
    $i=0;
    while ($res = oci_fetch_array($stmt))
    {
    // foreach($res as $key=>$value)
    // {if ($key==='TABLE_NAME') {$t.= '
  • '.$value.'
  • ';}}
    foreach($res as $key=>$value)
    {if ($key==='TABLE_NAME') {$t.= '
  • '.strtolower($value).'
  • ';}}
    $i++;
    }
    $t.= '
';
$t.= '

'.$i.' tabulek

';
Misto vypisovani tam das SQL prohledavani. A cele to obklopis transakcemi, aby to nezdrzovalo. Normalne se kazdy dotaz bere jako samostatna transakce a SQL resi vselijake uzavirani a zamykani. Je pro to nejaky spesl php nebo sql prikaz...

    '; $i=0; while ($res = oci_fetch_array($stmt)) { // foreach($res as $key=>$value) // {if ($key==='TABLE_NAME') {$t.= '
  • '.$value.'
  • ';}} foreach($res as $key=>$value) {if ($key==='TABLE_NAME') {$t.= '
  • '.strtolower($value).'
  • ';}} $i++; } $t.= '
'; $t.= '

'.$i.' tabulek

'; Misto vypisovani tam das SQL prohledavani. A cele to obklopis transakcemi, aby to nezdrzovalo. Normalne se kazdy dotaz bere jako samostatna transakce a SQL resi vselijake uzavirani a zamykani. Je pro to nejaky spesl php nebo sql prikaz...

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: Maaartin

20:16:16 30.09.2009

> [ital]Dale uznavam, ze vykonani dotazu vytvoreneho tou funkci na databazi o rozsahu nekolika exabyte a distribuovane v mnoha clusterech pocitacu muze trvat o neco dele nez minutu, v krajnim pripade celou vecnost.[/ital]

To by se lehce stat mohlo. Pokud neni index na vsech sloupcich (a na vsech neni skoro nikdy), pak je potreba se tim prohrabat. Bezny disk zvladne rekneme 125 MB/s, takze staci blbych 10 GB a uz je to pres minutu. Samozrejme s RAID-em to muze byt jiny ale kazdy spravny VOraclista ti rekne ze 10 GB je malinka databazicka. :D:D

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: Mi.Chal

13:17:35 30.09.2009

tcesky Napsal:
-------------------------------------------------------
> Napsani funkce ktera pro jmeno tabulky a seznam
> sloupcu vyplivne SQL dotaz ani na hw ani na
> velikosti databaze nezavisi. Uznavam, ze rychlost
> odladeni te funkce by mohlo na hw vyvojoveho
> stroje marginalne zaviset.

nj, blbe jsem si to precetl. Kazdopadne ten dotaz je taky potreba pustit, jinak je k nicemu. A to uz nejakou dobu zabere, to ze se bude generovat chvili to nezachrani.

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: LukeL

10:18:03 30.09.2009

Spíš to dosti závisí na tom jak jsou ty tabulky zaindexovány než na hw a velikosti db (i když taky). Podle mně by se query processor téměř v každém případě rozhodl pro sekvenční sken celé tabulky, protože dotaz WHERE sl1 = X or sl2 = X ... nejde rozumně zpracovat bez indexu na každém sloupci a UNIONování výsledků hledání pro každý sloupec zvlášť. Ale možná se mýlím, těžko vidět do střev každého DBMS - každopádně by to stálo za pokus. Pořád si ale myslím že ty řádové minuty jsou z říše pohádek alespoň na "normálních" databázích jako je Oracle, MSSql, Informix apod.

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: tcesky

9:59:59 30.09.2009

Napsani funkce [ital]ktera pro jmeno tabulky a seznam sloupcu vyplivne SQL dotaz [/ital]ani na hw ani na velikosti databaze nezavisi. Uznavam, ze rychlost odladeni te funkce by mohlo na hw vyvojoveho stroje marginalne zaviset.

Doba exekuce takove funkce bude sice velice kratka, ale o tom rec nebyla.

Dale uznavam, ze vykonani dotazu vytvoreneho tou funkci na databazi o rozsahu nekolika exabyte a distribuovane v mnoha clusterech pocitacu muze trvat o neco dele nez minutu, v krajnim pripade celou vecnost.

Zdravim

TC

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: Mi.Chal

9:35:31 30.09.2009

tcesky Napsal:
-------------------------------------------------------
> Napsani funkce, ktera pro jmeno tabulky a seznam
> sloupcu vyplivne SQL dotaz
> "... WHERE SL1='x' OR SL2='x' ...." trva spise pet
> minut nez celou noc.

to zalezi na velikosti db a vykonosti hw

> Vykonani jednoho SQL dotazu na jedne tabulce asi
> bude trvat mene nez minutu.

jestli ta db bude mit stovky GB a bude to prohledavat i neindexovane sloupce, tak to muze trvat klidne i dele

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: tcesky

8:25:05 30.09.2009

[ital]Pokud máš ale stovky tabulek (což bych ještě obrovským systémem nenazýval, možná velkým:)) plný dat a dotazoval by ses na každý sloupec zvlášť, tak bys to mohl možná tak večer pustit a ráno se podívat, co to vyplivlo.[/ital]

Napsani funkce, ktera pro jmeno tabulky a seznam sloupcu vyplivne SQL dotaz
"... WHERE SL1='x' OR SL2='x' ...." trva spise pet minut nez celou noc.

Vykonani jednoho SQL dotazu na jedne tabulce asi bude trvat mene nez minutu.

Ja v noci spim zpravidla dele nez 2 hodiny.

Zdravim

TC

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: LukeL

23:02:33 29.09.2009

Každá databáze má nějaký systémový katalog, kde jsou tyhle metadata uložený, to nemůže být těžký najít. Pokud máš ale stovky tabulek (což bych ještě obrovským systémem nenazýval, možná velkým:)) plný dat a dotazoval by ses na každý sloupec zvlášť, tak bys to mohl možná tak večer pustit a ráno se podívat, co to vyplivlo. Chce to asi zauvažovat o nějakém omezení..

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: Fredy Pumpicka

21:34:11 26.09.2009

Presne tak. To bude asi nejrychlejsi. Ve starsi verzi SQL Anywhere jsem nasel systemove tabulky SYSTABLE a SYSCOLUMN. Z te prvni se daj zjistit nazvy tabulek a jejich id, a pres ty id tabulek pak jit do SYSCOLUMN a z te zjistit nazvy sloupcu pro danou tabulku. A je to :-)
Myslim, ze pro "sajbejsi" SQL server by to mohlo byt podobne. Ale znovu opakuju, se mam tu mam v tomhle smeru docela stary veci (se Sybase uz dlouho nedelam).

Tak hodne stesti. Fredy "KRUGER" Pumpicka

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: Mi.Chal

17:07:57 25.09.2009

Liam Napsal:
-------------------------------------------------------
> Neco co by tohle delalo pro Sybase?

si to napis, ne? :-) Mozna to bude rychlejsi nez neco najit.

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: Liam

16:12:40 25.09.2009

Neco co by tohle delalo pro Sybase?

Citovat příspěvek

 

Re: Prohledavani databaze pro hodnotu

Autor: funous

16:08:32 25.09.2009

Liam napsal(a):
>
> Dobry den. Casto se setkavam s potrebou prohledat databazi a zjistit ve ktere tablulce zije urcita hodnota...

Podobnou vec dela treba phpmyadmin (pro mysql), zadas hledany retezec a
vypise vsechny tabulky s poctem vyskytu ve vsech sloupcich. Dela to tak,
ze si nacte jmena vsech tabulek a vsech sloupcu a dela dotazy pro kazdou
tabulku s tim, ze pro kazdy sloupec udela sloupec like %hodnota% a
podminky spoji orem.

Příspěvek zaslán emailem

Citovat příspěvek

 

Prohledavani databaze pro hodnotu

Autor: Liam

15:27:18 25.09.2009

Dobry den. Casto se setkavam s potrebou prohledat databazi a zjistit ve ktere tablulce zije urcita hodnota... Ja vim ze to zni asi hloupe. Tak to trochu priblizim. Mame tady obrovsky system s masivni databazi (stovky tabulek, mnoho radku). Databaze toho systemu neni nikterak dokumentovana a nekdy proste potrebuju zjistit kam ten system uklada hodnotu urciteho policka na formulari napr. Potreboval bych program kteremu zadam hodnotu, on prohleda vsechny tabulky v te databazi a vyplivne jmena tabulek a sloupcu kde tu hodnotu nasel. Uz jste se nekdo s necim podobnym setkali? Jak by ste to programovali? dik

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: