Open
Conversation
spajic
approved these changes
Jun 15, 2021
case-study.md
Outdated
|
|
||
| ## Stack | ||
| 0. Rails 6 | ||
| 1. Grape для написания API |
Collaborator
There was a problem hiding this comment.
Ох, grape кстати тяжкая штука в части мониторинга и оптимизаций.
На каждом проекте приходили к желанию выпилить grape )
case-study.md
Outdated
| Проблема состояла в том что это происходило довольно медленно, особенно на моем компьютере, где стоял простой hdd, | ||
| порой приходилось лезть на сервер где используется ssd что бы проверить как генерируется отчет. | ||
|
|
||
| Мы это долго задумывали и как появилась возможность перевели работу в sidekiq, не знаю как, но он стал работать в десятки раз быстрее, мне так и не удалось выяснить почему синхронно и асинхронно была такая колоссальная разница во времени, возможно держа соединение открытым на время экспорта, что-то замедляло его. |
case-study.md
Outdated
| тогда я решил переключиться на базу данных, начал с pgHero, он мне показал медленные запросы, но их причина не была ясна, переключился на NewRelic, благо теперь он бесплатный для одного юзера, собрал небольшую аналитику и заметил что в запросе часто используется поиск по составному полю, я добавил индекс и удалось добиться ускорения примерно на 30% | ||
| так же я заметил что часто используется связующая таблица, сделал релоад и магическим образом это помогло добиться двухкратного ускорения экспорта. | ||
|
|
||
| До сих пор остается актуальной проблемой то что мы при экспорте грузим все записи в ОЗУ поскольку при выборке используется сложная сортировка, а батчами такую сортировку не выполнить. |
Collaborator
There was a problem hiding this comment.
Если вам это правда хочется исправить, то можно например в postgres создавать временную табличку на время работы этой джобы, где будет два столбца - FK на исходную табличку и значение показателя сортировки, которое считается в ruby.
Батчами заполнить эту табличку.
А далее приджойнить её к основной и отсортироваться по рейтингу.
Ну что-то в этом духе.
case-study.md
Outdated
|
|
||
| Занялся тестами, тесты шли 10 минут в одном потоке, а в parallel_tests ~3 минуты. | ||
|
|
||
| Прогнал test-prof на наличие повторяющихся вызовов let и заменил их на let_it_be, за минимальные усилия удалось ускорить экспорт в два раза до 1.4 минуту(+1905 тестов), там еще есть много чего то можно оптимизировать но пока остановился на этом. |
Collaborator
There was a problem hiding this comment.
Да, 2x минимальными усилиями это кайф 👍
А если учесть ещё параллелизм, то 6x.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.