2009-08-20 2 views
11

Docs su creating your database tables dice:Perché rimuovere django DATABASE_OPTIONS "init_command set engine = INNODB" dopo la creazione della tabella?

Un'altra opzione è quella di utilizzare l'opzione init_command per MySQLdb prima di creare le tabelle:

DATABASE_OPTIONS = { 
    "init_command": "SET storage_engine=INNODB", 
} 

Imposta il motore di memorizzazione predefinito al momento della connessione al database. Dopo sono state create le tabelle, è necessario rimuovere questa opzione come aggiunge una query che è necessario solo durante la creazione della tabella per ciascuna connessione database.

Qualcuno sa perché è necessario rimuovere questa opzione dopo la creazione della tabella?

risposta

4

Tipicamente autorizzazioni e le impostazioni sono basato albero. Le tue impostazioni per la sessione saranno un puntatore alle impostazioni predefinite di un livello sopra il tuo. Le impostazioni della sessione verranno già create e basterà fare riferimento alle impostazioni predefinite al primo collegamento.

Quando modifichi un'impostazione, ad esempio impostando il valore di storage_engine, stai creando una nuova copia di tutte le impostazioni e modificando un valore (come in Apache) o aggiungendo un altro livello all'albero che deve check-in quando si risolvono i valori. Non sono sicuro di quale sia il MySQL utilizzato, ma in entrambi i casi, se non hai bisogno di questa impostazione, non dovresti impostarlo su ogni round trip.

Se si ha bisogno relativamente frequente, forse vale la pena il calo di prestazioni. Un problema simile si verifica in PHP. Non vuoi modificare variabili come il percorso di inclusione di PHP nel tuo codice PHP, che usava aggiungere un sacco di overhead.

Jacob

+1

Grazie, ha senso. – ajitomatix

3

Se si dispone di altre opzioni, ad esempio:

DATABASE_OPTIONS = { "init_command": "SET storage_engine = InnoDB, wait_timeout = 30, time_zone = ...", }

quindi non fa male lasciare il set predefinito del motore di archiviazione.

6

sintassi è cambiata di Django 1,2

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.mysql', 
    'NAME': '',      
    'USER': '',  
    'PASSWORD': '', 
    'OPTIONS': { 
      "init_command": "SET storage_engine=INNODB", 
    } 
    } 
} 
4

rimozione di questa opzione per rendere le cose efficiente - non è necessario impostare motore di archiviazione ogni volta che ci si connette al database solo quando si creano le tabelle (cioè syncdb, sud).