Domanda

Sto cercando di ottimizzare il mio sito e ho trovato questo piccolo doc Django: Access Database Optimization , che suggerisce la definizione di profili seguito indicizzazione e la selezione di campi appropriati come punto di partenza per l'ottimizzazione del database.

Normalmente, la documentazione Django spiegare le cose abbastanza bene, anche le cose che i programmatori più esperti potrebbero considerare "ovvio". Non così in questo caso. Dopo una spiegazione della indicizzazione, il doc continua a dire:

Si assume che avete fatto le cose ovvie sopra.

Uhhh. Aspettare! Cosa diavolo è indicizzazione?

Ovviamente non riesco a capire cosa l'indicizzazione avviene tramite google, la mia domanda è: che cosa è che ho bisogno di sapere per quanto roba del database va al fine di creare un sito web scalabile? Che cosa devo essere a conoscenza circa il quadro Django specifico? Quali altri "ovvie" le cose dovrebbero so? Dove posso imparare?

Sto cercando di ottenere in una direzione qui. Non ho bisogno di imparare qualsiasi cosa e tutto ciò che riguarda SQL, voglio solo essere informato abbastanza per costruire la mia app nel modo giusto.

Grazie in anticipo!

È stato utile?

Soluzione

Io vi incoraggio a leggere tutto quello che le altre risposte suggeriscono e quant'altro si può trovare su questo argomento, perché è tutte le informazioni bene sapere e farò di te un programmatore migliore.

Detto questo, una delle cose belle di Django e altri framework simili è che per la maggior parte non c'è bisogno di sapere cosa sta succedendo dietro le quinte nel DB. Django aggiunge indici automaticamente per i campi che ne hanno bisogno. L'incoraggiamento di aggiungere più si basa sui casi di utilizzo della vostra applicazione. Se si continua query basata su un campo particolare, è necessario assicurarsi che quel campo è indicizzato. Potrebbe essere già (se si tratta di una chiave esterna, chiave primaria, ecc), ma anche altri campi aleatori in genere non lo sono.

C'è anche varie ottimizzazioni che sono database client-specifica. Django non può fare molto qui perché è obiettivo è quello di rimanere indipendente dal database. Quindi, se si sta utilizzando PostgreSQL, MySQL, qualsiasi cosa, letto di ottimizzazioni e le migliori pratiche in materia di quei clienti particolari.

Altri suggerimenti

Wikipedia progettazione di database, e la normalizzazione dei database http://en.wikipedia.org/wiki/Database_design e http://en.wikipedia.org/wiki/Database_normalization sono due molto importanti concetti, oltre ad indicizzazione.

In aggiunta a questi, avere una conoscenza di base del database di scelta è necessario. Essere in grado di aggiungere utenti, impostare le autorizzazioni, e creare un database sono cose fondamentali che si deve sapere.

Imparare a backup dei dati è anche una cosa importante.

La lista continua sempre più a lungo, si dovrebbe anche essere consapevoli delle relazioni db che Django maniglie per voi, OnetoOne, ManyToMany, ManyToOne. https://docs.djangoproject.com/en/dev/topics/db/ modelli /

L'impatto sulle prestazioni di join non dovrebbe essere ignorato. L'accesso a proprietà modello Django è così facile, ma capire che alcune delle relazioni di chiave esterna potrebbe avere enormi impatti prestazione è una cosa da considerare troppo.

Una volta che avete una conoscenza di base di queste cose si dovrebbe essere ad un buon punto di partenza per la creazione di un app Django non banale!

Wikipedia ha un bel articolo su indici di database, sono simili (ish ) per un indice in un libro cioè voi (il computer permette) trovare le cose più veloce perché basta guardare l'indice (probabilmente un pessimo esempio: -)

Per quanto riguarda le prestazioni ci sono molte cose che si possono fare e presumibilmente in quanto è un argomento molto dettagliato in sé, ed è qualcosa che è particolare per ogni RDBMS allora sarebbe distrarre / irrilevante per loro (Django) per andare in una grande dettaglio. La cosa migliore è davvero a google suggerimenti sulle prestazioni per il vostro particolare RDBMS. Ci sono alcuni consigli generali come l'indicizzazione, limitando le query per restituire solo i dati richiesti, ecc.

Credo che una delle cose principali è un disegno buono, attaccare il più possibile a Normale formare e, in generale, in realtà prendendo il database in considerazione prima di programmare i tuoi modelli, ecc (che chiaramente si sembrano fare). Le convenzioni di denominazione sono anche un grande vantaggio, ricordando esplicito è meglio quindi implicita: -)

Per riassumere:

  • Ulteriori / capire i fondamenti, come il relazionale modello
  • Decidere su una convenzione denominazione
  • Design database magari utilizzando uno strumento di ERM
  • Preferisco di ID surrogata
  • Utilizza il tipo di dati corretto di minima dimensione possibile
  • utilizzare gli indici in modo appropriato e non più di index
  • Evitare unecessary / sopra l'esecuzione di query
  • la sicurezza la priorità e la stabilità sulle prestazioni grezzo
  • Una volta che avete installato e funzionante database 'tune' l'analisi di database / profilatura impostazioni, query, design, ecc
  • di backup e archiviazione regolarmente - cron
  • ragazzo qui : -)
  • Se anticipato in replica (master / slave - Django supporti abbastanza bene anche)
  • Si consideri aggiornare l'hardware
  • non troppo appeso su di esso
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top