Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 6 měsíci

Peter
Člen
Registrovaný: 28. 7. 2010
Příspěvky: 12

vysoká režie dibi u jednoduchých dotazů

Překvapuje mě, jak vysokou režii má dibi u triviálních dotazů, které ale pracuje s mnoho záznamy.
Takže například

<?php
dibi::fetchAll('SELECT col FROM table'); // vrátí stovky záznamů
?>

mi na lokálním stroji trvá kolem 20ms, zatímco stejná verze v php (mysql_query()) jen kolem 2ms, dibi kolem toho přílš tancuje a přitom si vystačim s jednoduchym polem.

Je nějaký jednoduchý způsob, jak to v dibi vyřešit, nebo mi nezbývá než forknout dibi a přidat něco jako dibi::rawQuery()?

Nebo ještě lépe použít PDO driver a v případě potřeby se ptát přímo PDO?

 

#2 před 6 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: vysoká režie dibi u jednoduchých dotazů

To je režie za „syntactic sugar“. Takže pokud potřebuješ něco jednoduššího, s nulovou bezpečností, tak klidně používej mysql_query() :)

Editoval HosipLan (26. 11. 2011 11:29)


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#3 před 6 měsíci

Peter
Člen
Registrovaný: 28. 7. 2010
Příspěvky: 12

Re: vysoká režie dibi u jednoduchých dotazů

No cukr to sice je, ale převod na DibiRow či hádání datových typů s bezpečností nemá nic společného, obvzláště u selectu. Takový věci jako přeložení sql dotazu (escapování, …) v tom hraje zanedbatelnou roli. Já hledám řešení rychlé a bezpečné. :)

 

#4 před 6 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: vysoká režie dibi u jednoduchých dotazů

Tohle bude rychlejší

/* @var IDibiResultDriver $resultDriver */
$resultDriver = $connection->getDriver()->query('SELECT col FROM table');
while ($row = $resultDriver->fetch(TRUE)) { // TRUE znamená, načíst associativní pole
        var_dump($row);
}

Ale proč používat knihovny, když věříš svým SQL, že je napíšeš bezchybně :)


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#5 před 6 měsíci

Peter
Člen
Registrovaný: 28. 7. 2010
Příspěvky: 12

Re: vysoká režie dibi u jednoduchých dotazů

Tys mě asi špatně pochopil, já psal, že překlad dotazu má v tom, tj. v rychlosti, zanedbatelnou roli — tedy sestavení SQL dotazu nechám na dibi, ale samotnej fetch chci udělat bez cukru…

takže kdybych lehce upravil tu tvou verzi:

<?php
$query = $connection->translate('SELECT col FROM table');
$resultDriver = $connection->getDriver()->query($query);
while ($row = $resultDriver->fetch(TRUE)) {
        var_dump($row);
}
?>

Vidíš v tom nějakou potencionální potíž (bezpečnostní, …)?

 

#6 před 6 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: vysoká režie dibi u jednoduchých dotazů

Je to víc psaní :) Ale pokud opravdu potřebuješ zrychlit, tak to chápu.

Editoval HosipLan (26. 11. 2011 12:08)


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#7 před 6 měsíci

Peter
Člen
Registrovaný: 28. 7. 2010
Příspěvky: 12

Re: vysoká režie dibi u jednoduchých dotazů

Super, děkuju. :)

 

Zápatí