È vero che il motore MyISAM è più preferibile di InnoDB quando stiamo costruendo lo storage in cluster? Perché se è così?

StackOverflow https://stackoverflow.com/questions/1647023

Domanda

L'ho sentito oggi durante l'intervista per lo sviluppatore Java. Ho dovuto elencare alcuni vantaggi di MyISAM rispetto a InnoDB e perché è ancora ampiamente utilizzato. E stavano aspettando di ricevere da me la risposta come titolo di questa domanda.

Come ho capito dalla loro stessa risposta: MyISAM non ha chiavi esterne e DB può essere facilmente raggruppato (ad esempio una tabella per server). Ma perché non possiamo semplicemente creare tabelle InnoDB senza chiavi esterne? Questa spiegazione mi sembra strana ..

È stato utile?

Soluzione

Non esiste una risposta al proiettile d'argento qui. È necessario conoscere i pro e i contro di ciascuno prima di prendere una decisione su quale utilizzare per una particolare applicazione.

InnoDB:

  • supporta gli FK
  • supporta le transazioni
  • utilizza un buffer di memoria di grandi dimensioni per l'operazione
  • supporta il blocco a livello di riga
  • Ma ha un costo di manutenzione molto più elevato: è davvero necessario ottimizzare l'utilizzo della memoria, configurare i file della tabella, ecc.

MyISAM:

  • ha un sacco di funzioni speciali per le colonne che InnoDB non ha, come:
    • indici di testo completo
    • colonne spaziali (sono abbastanza sicuro che non funzioni con InnoDB)
  • Molto veloce per casi d'uso di lettura / aggiunta primari (blocchi di tabelle per aggiornamenti, eliminazioni, ma non per inserti)
  • In genere ha anche inserimenti più veloci
  • memorizza nella cache gli indici in memoria (key buffer), ma si affida al sistema operativo per bufferizzare le pagine di dati effettivi

Ad esempio, userei InnoDB per cose come e-commerce, database di utenti o qualsiasi cosa in cui voglio usare le transazioni.

Per i data warehouse, la registrazione, i report, ecc. probabilmente utilizzerei MyISAM.

Altri suggerimenti

  

Ho dovuto elencare alcuni vantaggi di MyISAM su InnoDB

  1. Ricerca FULLTEXT

  2. ...

  3. no, tutto qui.

(OK, ci sono alcuni casi in cui MyISAM è più veloce di InnoDB, ma raramente vale la pena sopportare la mancanza di conformità ACID. Oggi il motivo principale per fare qualcosa con MyISAM è per ottenere una ricerca full text che purtroppo non è supportata in InnoDB.)

Non sono sicuro che ciò non sia più vero MyISAM è più veloce di InnoDB per le letture.

Inoltre, le tabelle MyISAM sono archiviate in file separati e (da quello che posso ricordare) puoi effettivamente trasportare quei file in un altro database MySQL ed è più facile eseguirne il backup.

Per impostazione predefinita, i database InnoDB sono archiviati in un enorme globo nel file system.

Per quanto riguarda il motivo per cui è ancora ampiamente utilizzato, ho sempre pensato che fosse perché è l'opzione predefinita. Personalmente, credo ancora che i vantaggi del trionfo di InnoDB su MyISAM e MyISAM abbiano anche problemi di integrità dei dati in base alla mia esperienza.

Sicuramente potresti creare tabelle InnoDB senza chiavi esterne, ma questo ne sta eliminando uno dei principali vantaggi: l'integrità referenziale. Tuttavia, poiché MyISAM non è stato creato con l'intento delle chiavi della tabella di integrità referenziale, può essere memorizzato in modo diverso e forse in modo più efficiente.

Ci sono anche alcune differenze nel blocco e nell'accesso. InnoDB supporta il blocco a livello di riga, mentre MyISAM supporta solo il blocco a livello di tabella. A seconda delle query che stai eseguendo (SELECTS contro INSERTS / UPDATES), ciò può avere un notevole effetto sulle prestazioni.

Praticamente devi leggere su Mysql Peformance blog .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top