Database rispetto al linguaggio di scripting lato server [duplicato]

-1

Per mantenere la mia domanda breve e precisa, considera questo:

$relation = $mysql->query("SELECT relation($loggeduser, $requesteduser) AS a")->fetch_assoc()['a'];
if ($relation != BLOCKED)
{
    return $mysql->query("SELECT stuff FROM sometable WHERE powerlevel>9000 LIMIT 39");
} else {
    return '{"error":"not enough jquery"}';
}

Dove relation è una funzione MySQL. Quando questo approccio sarebbe meglio di qualcosa del genere:

$stuff = $mysql->query("SELECT getstuff($loggeduser, $requesteduser) AS a")->fetch_assoc()['a'];
return ($stuff != null) ? $stuff : '{"error":"stop it"}';

Dove getstuff è una funzione MySQL che fa semplicemente tutto ciò che il primo codice farebbe.

In questo scenario, il secondo sembra avere molto più senso. In realtà, la seconda ha senso per tanti altri scenari che posso immaginare al punto in cui si può avere un'app web composta essenzialmente da sole funzioni MySQL che si occupano di quasi tutto ciò che serve (ad esempio getUser, getFollowers, pageInfo, ecc.) .

Tuttavia, mi manca sicuramente qualcosa, e la mia domanda è questa: quando dovrei non usare le funzioni MySQL su operazioni di scripting lato server? Puoi omettere l'ovvio (cioè salvare / elaborare file, ecc.).

    
posta Shahar 23.12.2014 - 19:16
fonte

1 risposta

2

Il primo approccio secondo rende un altro round-trip al database. Suppongo che potrebbe consentire di eseguire elaborazioni complesse sul lato server Web.

Se questa elaborazione aggiuntiva è davvero complessa, spesso è preferibile tenerla fuori dal database. Le lingue delle stored procedure del database spesso non sono le migliori in termini di prestazioni e il codice funzione memorizzato è solitamente più difficile da modulare, testare, controllare e distribuire correttamente.

Se hai già tutta l'elaborazione (ragionevolmente semplice) nella tua funzione relation , è meglio utilizzarla direttamente nella query e salvare un round-trip del database.

    
risposta data 23.12.2014 - 19:27
fonte

Leggi altre domande sui tag