FitTech
@FitTech

Как правильно обработать большой JSON файл, расположенный на удаленном сервере?

Здравствуйте! Подскажите, пожалуйста, как правильно с таким работать?

Если на удаленном сервере JSON файл(размером 15ГБ), нужно сделать консольную команду которая будет обрабатываться, то есть получить данные и сохранить в базу.

Понимаю что скачивать на сервер и тд идея плохая, соответственно прошу подсказки каким образом лучше это сделать?

UPD: файл сохранить на сервер можно.
  • Вопрос задан
  • 2430 просмотров
Решения вопроса 4
@remzalp
Программер чего попало на чем попало
JSON такого объема в принципе идея плохая. Встроенная функция json_decode умрёт, придётся писать какой-то парсер.
Потому что эти 15 гигабайт должны будут целиком загрузиться в оперативную память, потом перестраиваться в объект. Итоговое потребление оперативной памяти пророчествую, не меньше 30 гигабайт и то считаю себя наивным.
Ключевая проблема - файл нельзя читать порциями по заранее известному разделителю, получая валидные фрагменты JSON.
Возможно добрые люди уже сделали из этого файла пачку JSON - просто дописывая построчно отдельные объекты, но тут лучше показать фрагмент файла, чтобы предлагать методы оптимизации.

Посмотрите такой вариант для командной строки, запускайте на сервере который не жалко, возможно придётся потом его ронять в перезагрузку - https://stedolan.github.io/jq/

Более цивильный вариант - CSV, читать построчно, копить пакет запросов в БД, пачкой в несколько десятков запросов лить в базу.

UPD: гениальный вариант - а если залить это счастье напрямую в MongoDB, а потом по отдельным записям кромсать - получится?
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Если на сервере есть 15+ гиг - то лучше скачать и далее работать уже с локальным файлом, который можно открывать кусками любого удобного размера. Если такой возможности нет, то сначала надо убедиться что файл на удаленном сервере не будет меняться во время работы с ним(а работа будет не сильно быстрой, учитывая размер файла), далее открывать файл чанками, указывая смещение. Тут придется повозиться, так как нужно будет брать куски, которые кроме того что размером отличаются, так еще и каждый следующий будет считаться от позиции высчитанной из предыдущего, в зависимости от того вытащился ли целый фрагмент json структуры или "битый", в котором есть лишний хвост или кусок в котором не хватает данных до полного элемента.
Ответ написан
Комментировать
ematveev
@ematveev
PHP разработчик / руководитель / писатель
можно на удалённом серваке выбрать нужные данные из файла, сделать компрессию .gz и передать на ваш сервак, где данные разархивировать , а потом уже в базу
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
IgorPI
@IgorPI
Интересно, за каким это **** 15 GB в JSON.
Стандартными средствами не прочитать.

Как минимум нужно разбить данные, по 1 MB, можно чуть больше.

json_decode и file_get_contents не осилят эту задачу.
Я уверен, что у вас недостаточно памяти, для решения этой задачи.
Даже если на сервере 30 GB, всё ровно не хватит, так как в "оперативке" данных будет гораздо больше.

Нужно писать парсер, локально парсить и больше так не делать!

Побайтное чтение файла.
3 строчки кода на delphi.

На данный момент, в одном проекте я работаю с файлом 1,5 GB
И поверьте, что бы подсчитать количество строк в нём, требуется 2 часа как минимум,
Учитывая характеристики ПК, где выполняется эта программа.
Но я себя хорошо чувствую с побайтовым чтеним.
Да хоть 100 GB, если файловая система позволяет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы