Valutazione del costo di una query nel database

1

Stiamo lavorando a un progetto utilizzando Google App Engine + Google Cloud Datastore. Il linguaggio utilizzato è Python.

In alcuni punti della nostra API, controlliamo se qualche argomento è passato in richiesta, e facciamo qualche query sul database se arg non è nullo.

Esempio:

result = None
if request.name != '':
    result = ndb.Key('Users', request.name).get()
else:
    return "Missing args."

Siamo tutti d'accordo a non effettuare query se non ci sono dati da interrogare. Tuttavia, il metodo get restituisce null se non è stato trovato alcun risultato. In questo specifico scenario, App Engine + Datastore, non potremmo evitare il principio di non effettuare alcune query non necessarie in favore di ridurre complessità ciclomatica del codice? Il mio punto è che tutti i nodi dell'architettura (app server, database, ecc.) Sono in un'infrastruttura bilanciata, il costo di una semplice query è davvero importante?

Esempio:

result = ndb.Key('Users', request.name).get()
if result:
    print 'Keep running...'
else:
    return "User not found."

Ovviamente questa è una parte molto piccola del codice per parlare di complessità.

    
posta Mauro Baraldi 24.10.2016 - 15:25
fonte

2 risposte

1

Il costo di raggiungere attraverso una rete è estremamente costoso rispetto a fare un controllo contro la memoria. La complessità aggiunta di un singolo if e break / return è 1 (la maggior parte dei calcoli in modo non corretto conta il se e il return come 1 ciascuno).

Se non lo fai molto, non importa molto in entrambi i casi, ma lo fai molte volte (ad esempio migliaia di secondi) che può essere sommato. Ciò è più importante quando si paga il numero di accessi al DB, come nel caso di molte offerte cloud. È difficile giustificare questo costo aggiuntivo per una così piccola riduzione della complessità.

    
risposta data 24.10.2016 - 16:28
fonte
0

Il costo di effettuare una query non necessaria può essere davvero significativo. Anche se non è sempre così. Dipende dai tuoi dati, dall'uso previsto dell'app, ecc.

Prestazioni a parte, il secondo esempio è concettualmente peggiore. Il nome mancante sembra essere uno stato di errore, che viene gestito correttamente nell'applicazione anziché trasferito al database.

Se si passa semplicemente il null al database e si interrompe la query, si finisce per fornire informazioni di errore meno utili come output, poiché non è possibile distinguere tra il nome vuoto e il nome fornito ma non trovato.

    
risposta data 24.10.2016 - 16:43
fonte

Leggi altre domande sui tag