MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Qualche motivo dettagliato e specifico per perché MongoDB è molto più veloce dei DB SQL?

Per prima cosa, confrontiamo le mele con le mele:Le letture e le scritture con MongoDB sono come le letture e le scritture singole per chiave primaria su una tabella senza indici non cluster in un RDBMS.

Quindi consente di confrontare esattamente questo:http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html

E si scopre che la differenza di velocità in un confronto equo della stessa operazione primitiva non è grande. In effetti, MySQL è leggermente più veloce. Direi che sono equivalenti.

Come mai? Perché in realtà, entrambi i sistemi stanno facendo cose simili in questo particolare benchmark. Restituire una singola riga, ricercata dalla chiave primaria, in realtà non è molto lavoro. È un'operazione molto veloce. Sospetto che le spese generali di comunicazione tra processi ne siano una parte importante.

La mia ipotesi è che il codice più ottimizzato in MySQL superi gli overhead leggermente meno sistematici di MongoDB (nessun blocco logico e probabilmente altre piccole cose).

Questo porta a una conclusione interessante:Puoi utilizzare MySQL come un database di documenti e ottenere prestazioni eccellenti da esso.

Se l'intervistatore dicesse:"Non ci interessano documenti o stili, abbiamo solo bisogno di un database molto più veloce, pensi che dovremmo usare MySQL o MongoDB?", cosa risponderei?

Consiglierei di ignorare le prestazioni per un momento e guardare la forza relativa dei due sistemi. Per MongoDB vengono in mente cose come il ridimensionamento (verso l'alto) e la replica. Per MySQL, ci sono molte più funzionalità come query avanzate, modelli di concorrenza, strumenti e maturità migliori e molto altro.

Fondamentalmente, puoi scambiare funzionalità per prestazioni. Sono disposti a farlo? Questa è una scelta che non può essere fatta in generale. Se opti per le prestazioni a qualsiasi costo, considera l'ottimizzazione di MySQL prima di aggiungere un'altra tecnologia.

Ecco cosa succede quando un client recupera una singola riga/documento tramite la chiave primaria. Annoterò le differenze tra i due sistemi:

  1. Il client crea un comando binario (lo stesso)
  2. Il client lo invia su TCP (stesso)
  3. Il server analizza il comando (stesso)
  4. Il server accede al piano di query dalla cache (solo SQL, non MongoDB, non HandlerSocket)
  5. Il server chiede al componente B-Tree di accedere alla riga (stessa)
  6. Il server esegue un blocco fisico di sola lettura sul percorso B-Tree che porta alla riga (uguale)
  7. Il server accetta un blocco logico sulla riga (solo SQL, non MongoDB, non HandlerSocket)
  8. Il server serializza la riga e la invia su TCP (stesso)
  9. Il client lo deserializza (uguale)

Ci sono solo due passaggi aggiuntivi per i tipici RDBMS basati su SQL. Ecco perché non c'è davvero alcuna differenza.