Ruby on Rails

Optymalizacja wydajności

Database indexing, optymalizacja zapytań, gem Bullet, rack-mini-profiler, współbieżność/Puma, thread-safety, connection pool

26 pytań z rozmów·
Senior
1

Jaki jest główny cel dodania index do kolumny bazy danych?

Odpowiedź

Index przyspiesza zapytania wyszukiwania, tworząc zoptymalizowaną strukturę danych (zwykle B-tree), która unika skanowania wszystkich wierszy w tabeli. Bez index baza danych wykonuje sequential scan, który może być bardzo wolny na dużych tabelach. Kolumny często używane w klauzulach WHERE, ORDER BY lub złączeniach są idealnymi kandydatami do indeksowania.

2

Jak utworzyć złożony index na kolumnach user_id i created_at w migracji Rails?

Odpowiedź

Metoda add_index przyjmuje tablicę kolumn, aby utworzyć złożony index. Kolejność kolumn ma znaczenie: index będzie wydajny dla zapytań filtrujących najpierw po user_id, a następnie po created_at, ale nie dla zapytań filtrujących tylko po created_at. Złożony index jest optymalny dla zapytań używających kolumn od lewej do prawej.

3

Czym jest problem N+1 w kontekście ActiveRecord?

Odpowiedź

Problem N+1 występuje, gdy początkowe zapytanie pobiera N rekordów, a następnie wykonywanych jest N dodatkowych zapytań w celu załadowania asocjacji każdego rekordu. Na przykład załadowanie 100 postów, a następnie wykonanie 100 osobnych zapytań o autorów. Ten wzorzec zwielokrotnia liczbę zapytań i poważnie pogarsza wydajność. Rozwiązaniem jest użycie includes, preload lub eager_load, aby załadować asocjacje w jednym lub dwóch zapytaniach.

4

Której metody ActiveRecord użyć, aby rozwiązać problem N+1 przez wcześniejsze załadowanie asocjacji?

5

Jaka jest rola gem Bullet w optymalizacji wydajności Rails?

+23 pytań z rozmów

Opanuj Ruby on Rails na następną rozmowę

Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.

Zacznij za darmo