Skip to content

Igor Platonov. Task 3. Actual #37

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 46 commits into
base: master
Choose a base branch
from
Open

Igor Platonov. Task 3. Actual #37

wants to merge 46 commits into from

Conversation

prog-supdex
Copy link

No description provided.

Copy link
Collaborator

@spajic spajic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Круто, спасибо за хорошую работу 💪

file.rewind

@io =
if first_bytes == GZIP_BYTES # Проверяем, если GZIP, то умеем работать еще и с архивами
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 cool

services << allowed_services[service] ||= Service.create!(name: service)
end
end
end
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хорошо получилось, кратенько, понятно и производительно, ещё и с возможностью не распаковывать архив 👍


По автобусам - можно было еще проводить проверку, что если есть такой number, то пропускать импорт такой записи. А по городам можно было убрать проверку на наличие пробелов.

Если мои способы(добавление уникальности по двум полям и избавление пробелов у всех городов) решения этих моментов не являются корректными, то я изменю это, например, на вариант с разрешением городов с пробелами и проверка number автобусов перед их созданием (либо ловить exception уникальности)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Способы ок. Валидации я добавил в основном для подвоха с тем, что они очень замедлят работу импорта, если импортировать по одной записи и каждую валидировать.

По автобусам - можно было еще проводить проверку, что если есть такой number, то пропускать импорт такой записи. А по городам можно было убрать проверку на наличие пробелов.

Если мои способы(добавление уникальности по двум полям и избавление пробелов у всех городов) решения этих моментов не являются корректными, то я изменю это, например, на вариант с разрешением городов с пробелами и проверка number автобусов перед их созданием (либо ловить exception уникальности)
2. Содержимое rake таски я перевел в service. Это позволяет удобнее тестировать, а также возможность использовать в нескольких места, если такое потребуется. Плюс так удобнее запускать из консоли и дебажить
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

++ всячески поддерживаю, рейк-таски как и фоновые задачи предпочитаю держать минималистичными - просто получить простые аргументы и вызывать сервис с этими аргументами.

Если мои способы(добавление уникальности по двум полям и избавление пробелов у всех городов) решения этих моментов не являются корректными, то я изменю это, например, на вариант с разрешением городов с пробелами и проверка number автобусов перед их созданием (либо ловить exception уникальности)
2. Содержимое rake таски я перевел в service. Это позволяет удобнее тестировать, а также возможность использовать в нескольких места, если такое потребуется. Плюс так удобнее запускать из консоли и дебажить

3. Было создано два сервиса - Один работает в обычном варианте (берет и грузить все в память), другой в потоковом.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 плюсик за потоковый

ImportTrups::ParseStreamJsonService.new(file_path: path_to_very_large_file).call
```
9. Согласно рекомендациям по стилу rails ([rails style guide](https://github.com/arbox/rails-style-guide/blob/master/README-ruRU.md#has-many-through)) рекомендуют использовать `has_many :through`, но в данном учебном проекте я не стал это делать, хотя исключительно `has_many :through` использую в рабочих проектах
10. Если посмотреть во view - то достаточно много partial`s, которые, вроде как, необязательно должны быть, так как не так много там html + неиспользуется в других местах. От partial's я тоже не стал избавляться. Надеюсь, не засчитают это минусом)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подвох с паршлами в том, что они рендерятся циклом. Лучше их оставить и рендерить коллекцией.


![pghero_bonus](https://i.ibb.co/bsfBtf3/bonus-hw3.jpg)

А работа с файлом 1M.json заняла чуть больше минуты
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 💪

Также, удалось оптимизировать отображение самих рейсов в представлении

А также научился пользоваться PGHero, ощутил его мощь и пользу.
А еще узнал про потоковую запись и чтение в postresql и даже есть где это использовать в реальном проекте =)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 отлично

disable_ddl_transaction!

def change
add_index(:buses, [:number, :model], unique: true, algorithm: :concurrently)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Плюсик за concurrently
В учебном проекте конечно не важно, а вот на проде полезно

disable_ddl_transaction!

def change
add_index(:trips, [:from_id, :to_id], algorithm: :concurrently)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Плюсик за составной индекс 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants