-
Notifications
You must be signed in to change notification settings - Fork 115
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
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this 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, то умеем работать еще и с архивами |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Хорошо получилось, кратенько, понятно и производительно, ещё и с возможностью не распаковывать архив 👍
|
||
По автобусам - можно было еще проводить проверку, что если есть такой number, то пропускать импорт такой записи. А по городам можно было убрать проверку на наличие пробелов. | ||
|
||
Если мои способы(добавление уникальности по двум полям и избавление пробелов у всех городов) решения этих моментов не являются корректными, то я изменю это, например, на вариант с разрешением городов с пробелами и проверка number автобусов перед их созданием (либо ловить exception уникальности) |
There was a problem hiding this comment.
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. Это позволяет удобнее тестировать, а также возможность использовать в нескольких места, если такое потребуется. Плюс так удобнее запускать из консоли и дебажить |
There was a problem hiding this comment.
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. Было создано два сервиса - Один работает в обычном варианте (берет и грузить все в память), другой в потоковом. |
There was a problem hiding this comment.
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 я тоже не стал избавляться. Надеюсь, не засчитают это минусом) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Подвох с паршлами в том, что они рендерятся циклом. Лучше их оставить и рендерить коллекцией.
|
||
 | ||
|
||
А работа с файлом 1M.json заняла чуть больше минуты |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 💪
Также, удалось оптимизировать отображение самих рейсов в представлении | ||
|
||
А также научился пользоваться PGHero, ощутил его мощь и пользу. | ||
А еще узнал про потоковую запись и чтение в postresql и даже есть где это использовать в реальном проекте =) |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Плюсик за составной индекс 👍
No description provided.