У меня возникли проблемы с обработкой огромного файла JSON в Ruby. То, что я ищу, - это способ обработки записи за записью, не сохраняя слишком много данных в памяти.
Я думал, что гем yajl-ruby выполнит эту работу, но он потребляет всю мою память. Я также просмотрел Yajl::FFI и JSON:Stream gems, но там явно заявил:
Для больших документов мы можем использовать объект ввода-вывода для потоковой передачи в парсер. Нам по-прежнему нужно место для анализируемого объекта, но сам документ никогда полностью не считывается в память.
Вот что я сделал с Yajl:
file_stream = File.open(file, "r")
json = Yajl::Parser.parse(file_stream)
json.each do |entry|
entry.do_something
end
file_stream.close
Использование памяти продолжает расти, пока процесс не будет убит.
Я не понимаю, почему Yajl хранит обработанные записи в памяти. Можно ли их как-то освободить, или я просто неправильно понял возможности парсера Yajl?
Если это невозможно сделать с помощью Yajl: есть ли способ сделать это в Ruby через любую библиотеку?