Open
Conversation
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.
Как интересно - метаинформация о данных - ровно почти то же что я понял о данных из предыдущего задания
Основной код встаки здесь
Для загрузки - все запускается так же: bin/setup
По умолчанию грузится фаил small.json
Для загрузки другого файла: bin/setup 1M.json
Для начала я просто попытался загрузить фаил 1M используя решение из задания 4
Он загрузился
Общее время: 56.74s
Загрузка JSON: 14.237619999796152
Парсинг JSON: 5.96524399984628
Импорт JSON: 65.6413819999434
Для интереса проделал то же самое с вторым вариантом решения задания 4
Загрузка JSON: 13.79
Парсинг и импорт данных: 76.85
Буду отталкиваться от первого варианта с полной загрузкой батчами.
Буду двигаться в направлении указанном в ридми - чтение понемного и вставка потоком.
Попробовал на большом файле просто прочитать его в память и потерпел фиаско.
Сразу решил внедрить прогрессбар, хоть он и замедляет работу.
Буду получать размер файла в байтах, размер каждого символа в байтах и строить прогресс.
Запустил просто посимвольное чтение с прогрессбаром.
Ожидаемое время окочания чтения - более 2х часов
Это очень долго
Попробовал читать фаил побайтово, частями по 32МБ
Весь фаил читался быстро - большой за 5s
Но возникали проблемы с парсингом (нужно учитывать частичное чтение), проблемы с кодировкой и тд
Другой путь использовать стриминговый парсинг JSON
Решил попробовать стриминговый парсинг.
Библиотеку Oj уже использовал, и она самая быстрая, позволяет делать стриминговый парсинг JSON.
Простое чтение с парсингом JSON файла 10M занимает - 23s
При оптимизации памяти буду стремиться к размеру ~100M
Так же понял свой недочет в 4м задании - можно сделать импорт проще.
Тк у нас, при импорте каждый раз обнуляется БД - то можно не получать id импортируемых данных, а генерировать их самостоятельно.
Это упростит код.
Выяснилось что возможны дубли по номерам автобусов (это не очень ясно из задания),
поэтому изменил уникальный ключ на [номер автобуса, модель автобуса]
После всех оптимизаций:
10M
Время загрузки: 200.40s
Потребление по памяти: 118Mb
1M
Время загрузки: 23.89s
Потребление по памяти: 115Mb