Ruby on Rails

Ottimizzazione delle prestazioni

Database indexing, ottimizzazione delle query, gem Bullet, rack-mini-profiler, concorrenza/Puma, thread-safety, connection pool

26 domande da colloquio·
Senior
1

Qual è lo scopo principale dell'aggiunta di un index su una colonna del database?

Risposta

Un index accelera le query di ricerca creando una struttura dati ottimizzata (di solito un B-tree) che evita di scansionare tutte le righe della tabella. Senza index, il database esegue un sequential scan che può essere molto lento su tabelle di grandi dimensioni. Le colonne usate di frequente nelle clausole WHERE, ORDER BY o nei join sono candidate ideali per l'indicizzazione.

2

Come creare un index composito sulle colonne user_id e created_at in una migration Rails?

Risposta

Il metodo add_index accetta un array di colonne per creare un index composito. L'ordine delle colonne è importante: l'index sarà efficiente per le query che filtrano prima su user_id e poi su created_at, ma non per le query che filtrano solo su created_at. Un index composito è ottimale per le query che usano le colonne da sinistra a destra.

3

Che cos'è il problema N+1 nel contesto di ActiveRecord?

Risposta

Il problema N+1 si verifica quando una query iniziale recupera N record, dopodiché vengono eseguite N query aggiuntive per caricare le associazioni di ciascun record. Ad esempio, caricare 100 posts e poi effettuare 100 query individuali per gli autori. Questo pattern moltiplica il numero di query e degrada gravemente le prestazioni. La soluzione è usare includes, preload o eager_load per caricare le associazioni in una o due query.

4

Quale metodo ActiveRecord usare per risolvere il problema N+1 caricando le associazioni in anticipo?

5

Qual è il ruolo del gem Bullet nell'ottimizzazione delle prestazioni di Rails?

+23 domande da colloquio

Padroneggia Ruby on Rails per il tuo prossimo colloquio

Accedi a tutte le domande, flashcards, test tecnici, esercizi di code review e simulatori di colloquio.

Inizia gratis