Week3 data base optimization#115
Conversation
usernaimandrey
commented
Feb 12, 2025
- Потоковая згрузка данных
- Оптимизация загрузки страници
lib/profiler.rb
Outdated
| send(reporter_type) | ||
| end | ||
|
|
||
| def memeory_prof |
spajic
left a comment
There was a problem hiding this comment.
respect за то что справились с импортом огромного файла и в целом, но вы упустили момент с оптимизацей partials, которые сделаны у меня намеренно ужасно
| @from = City.find_by!(name: params[:from]) | ||
| @to = City.find_by!(name: params[:to]) | ||
| trips = Trip | ||
| .eager_load(bus: :services) |
| Перед оптимизацией программа затрачивает на обработку файла в 50000 строк 335 MB | ||
|
|
||
| ## Гарантия корректности работы оптимизированной программы | ||
| 1. На писан юнит тест гарантирующий корректную работу рейк таски `UtilsTest` |
|
|
||
| ## Гарантия корректности работы оптимизированной программы | ||
| 1. На писан юнит тест гарантирующий корректную работу рейк таски `UtilsTest` | ||
| 2. Написан системный тест который гарантирует сохранность структуры страници `TripsTest` |
|
|
||
|
|
||
|
|
||
| ## Результаты |
There was a problem hiding this comment.
результаты отличные
но с пагиганцией вы упустили тему с оптимизацией partials как я понял - там в моей версии сделано очень плохо, хорошо бы это поправить тоже
There was a problem hiding this comment.
Попробовал сделать через collection в целом работает довольно шустро без пагинации
|
|
||
| ## Защита от регрессии производительности | ||
| 1. Перформ тест проверющий что таска выполняется не более 60 сек | ||
| 2. Тест контроллера - если будет n + 1 запрос тест упадет с ошибкой No newline at end of file |
| # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html | ||
| get "/" => "statistics#index" | ||
| get "автобусы/:from/:to" => "trips#index" | ||
| mount PgHero::Engine, at: "pghero" |
| @@ -1,3 +1,5 @@ | |||
| # frozen_string_literal: true | |||
There was a problem hiding this comment.
я понимаю что это рубокоп, но лучше было бы это не комитить :harold:
| disable_ddl_transaction! | ||
|
|
||
| def change | ||
| add_index :trips, :from_id, algorithm: :concurrently |
There was a problem hiding this comment.
возможно лучше составной индекс [from_id, to_id], потому что поиск постоянно идёт именно по направлению
| BUSES_COMMAND = "copy buses (id, number, model) from stdin with csv delimiter ';'" | ||
| BUSES_SERVICES_COMMAND = "copy buses_services (bus_id, service_id) from stdin with csv delimiter ';'" | ||
|
|
||
| @@city_by_name = {} |
There was a problem hiding this comment.
в книге Polished Ruby недавно прочитал рекомендацию никогда не использовать @@, с ним возможны неприятные приколы
в целом книга от легенды - Jeremy Evans, так что стоит ознакомиться
|
|
||
| Service.import @@services.values | ||
|
|
||
| ActiveRecord::Base.connection.raw_connection.copy_data TRIPS_COMMAND do |
| @@ -0,0 +1,47 @@ | |||
| include make-compose.mk | |||
There was a problem hiding this comment.
У тебя такие файлы как то генерируются или ты вручную делаешь? Или есть какой то шаблон который ты копируешь? Мне лень такое делать, но это так то очень удобно, особенно в команде
There was a problem hiding this comment.
Нет сам делаю)
Мне лень такое делать, но это так то очень удобно
Мне вот лень каждый раз перед вводом команды вспоминать как там она пишется) а тут коротко и ясно make ...
Вообще make это довольно древняя тулза, ее еще использовали для сборки C программ
https://ru.hexlet.io/blog/posts/makefile-as-task-runner
Как альтернатива еще можно гем dip использовать, но он только для контейнерных приложух, а make можно под любое адаптировать
https://github.com/bibendi/dip