Quali sono le opzioni quando Sql generato da ORM ha bisogno di essere sintonizzato?

6

Sto iniziando a lavorare su un progetto web usando django. Durante la ricerca se usare Sqlalchemy o sql raw quando django orm non è sufficiente, è anche una domanda che ho posto qui Raw Sql vs SqlAlchemy quando Django ORM non è abbastanza

Una domanda mi ha infastidito.

Con l'aumentare del carico sul sito Web, scopriamo che le query SQL eseguite da ORM richiedono una regolazione. Ma non abbiamo alcun controllo su come un ORM esegue query. In tal caso, dobbiamo utilizzare query sql raw perché ci danno il miglior controllo.

Ma se iniziamo a utilizzare query SQL raw, tutti i vantaggi dell'utilizzo di un ORM al primo posto sono andati. Siamo bloccati con entrambi i codici sql e orm che sicuramente comprometteranno la lettura e la manutenibilità del codice.

Mi sembra che stiamo optando per un codice facile al posto di molti problemi dopo. Non c'è dubbio che il nostro codice iniziale sarà veloce e facile da manutenere, ma questo può causare problemi successivi.

Mi piacerebbe conoscere i pensieri degli altri su di esso. Non sto iniziando una domanda di confronto tra orms e sql ma vorrei sapere quali sono le opzioni quando abbiamo creato l'app Web usando ORM e arriva la situazione quando è chiaro che ORM non supporta la nostra causa?

    
posta codecool 26.09.2011 - 11:35
fonte

4 risposte

4

Questo è abbastanza semplice. Due soluzioni:

  1. Sintonizza l'ORM. Questa è l'applicazione della separazione delle preoccupazioni e della soluzione più pulita a lungo termine. Comunque questo ha degli svantaggi.
    • La base di codici ORM potrebbe essere difficile da modificare.
    • Questo potrebbe essere difficile da raggiungere in una determinata scadenza.
    • Il tweak deve essere convertito in altre versioni dell'ORM, altrimenti l'obsolescenza continua si presenterà abbastanza rapidamente. Lavorare con le persone dietro l'ORM è la strada da percorrere, ma alcuni criteri aziendali possono impedirlo.
    • L'ORM può essere impossibile da modificare in questo modo. Può essere un software proprietario o l'organizzazione aziendale potrebbe impedirti di farlo.
  2. Utilizza query eseguite manualmente mappate dall'ORM.
    • Questo è facile e veloce da fare. portare a termine il lavoro.
    • Deve essere unico, o il tuo codice sarà presto condannato con tali hack ovunque.
    • Deve essere confezionato in un'astrazione. Fai sembrare l'uso standard di ORM. Questo limita lo sporco a una piccola porzione di codice.
    • L'ORM potrebbe non fornire questa funzione (e se è il caso, probabilmente hai scelto uno schifoso).

A seconda del conext e delle scadenze, la soluzione 2 è una soluzione reale, anche se non pulita. Il debito tecnico può essere fatto in un progetto con precauzione per limitarlo a una piccola porzione di codice e giustificato da alcuni vincoli tecnici aggiuntivi.

    
risposta data 26.09.2011 - 12:00
fonte
1

Mi piace molto e sono d'accordo con la risposta di deadalnix quindi non mi preoccuperò di ripetere i suoi punti, ma un'altra opzione che ho fatto in passato è stata quella di usare una vista sintonizzata.

Normalmente non mi piace l'uso delle viste, ma se un'operazione di lettura intensiva delle prestazioni o del database dovrebbe essere eseguita in un modo specifico e l'ORM non può essere ottimizzato per questo, può essere più facile scrivere SQL ottimizzato per una visualizzare e mappare un'entità ORM di sola lettura a questo.

Detto ciò, lo vedo come una soluzione rapida e una soluzione più robusta sarebbe probabilmente qualcosa come SQLAlchemy che è stato menzionato sopra.

    
risposta data 26.09.2011 - 13:07
fonte
0

Se il tuo ORM non ti permette di cambiare l'SQL, potresti essere in grado di modificare l'SQL usando le stored procedure. Inoltre, assicurati che il problema sia nell'SQL, le prestazioni possono risentirne a causa della progettazione della tabella o della strategia di indicizzazione. Questi sono al di fuori dell'ambito ORM e il tuo DBA dovrebbe essere in grado di capire cosa fare.

    
risposta data 26.09.2011 - 13:42
fonte
0

Il primo posto che vorrei iniziare è sintonizzare meglio il database per gestire le query: aggiungi gli indici prima di modificare il codice, è scioccante ciò che possono fare per te.

Se hai bisogno di seguire la rotta SQL personalizzata, usa la funzione SQL personalizzata orms se ne ha una. Non penso che l'uso di SQL personalizzati qui e là rimuova tutti i vantaggi di orm, specialmente se rimane all'interno del livello dati.

    
risposta data 26.09.2011 - 14:09
fonte

Leggi altre domande sui tag