У меня есть рабочий процесс, который раскручивает кучу параллельных лямбда-функций для быстрой пакетной обработки данных, которые запускают службу, а затем записывают ответ JSON в корзину S3.В результате у меня могут быть тысячи файлов JSON размером более 5 МБ.
Теперь мне нужно объединить все эти файлы в один файл JSON, который можно вернуть запрашивающей стороне.
Я былпытаясь сделать это с помощью MultiPart Upload , поэтому мне не пришлось загружать, обрабатывать и повторно загружать файлы.Вместо этого я мог сделать все это исключительно в S3, скопировав детали в окончательный файл.Это на самом деле прекрасно работает, но проблема в том, что результат больше не является допустимым JSON, потому что он буквально просто склеивает файлы и не объединяет массивы JSON (см. Ниже).
Например:
Файл 1:
[
{
"foo": "bar1"
},
{
"foo": "bar2"
}
]
Файл 2:
[
{
"foo": "bar3"
},
{
"foo": "bar4"
}
]
Результат многоэтапной загрузки:
[
{
"foo": "bar1"
},
{
"foo": "bar2"
}
][
{
"foo": "bar3"
},
{
"foo": "bar4"
}
]
Как вы можете видеть выше, теперь у меня есть недопустимый JSON с конечной скобкой для одного файла и начальной скобкой для другого вместо запятой.
Результат, который я хочу:
[
{
"foo": "bar1"
},
{
"foo": "bar2"
},
{
"foo": "bar3"
},
{
"foo": "bar4"
}
]
Теперь я застрял на том, что делать.Ограничение в 3 ГБ ОЗУ означает, что я не могу просто открыть каждый файл и создать конечный результат в памяти, а затем записать в S3, поскольку он может легко составлять> 3 ГБ.
Есть ли какие-то варианты, которые я пропускаю, или мне просто нужно написать какой-нибудь неприятный код, чтобы переборщили его?
Единственное, о чем я могу думать (что я действительно не хочу делать), это отформатировать первый файл без конечной скобки, средние файлы без скобок и последний файл без начальной скобки.
Head file
[
{
"foo": "bar1"
},
Any middle files
{
"foo": "bar2"
},
Final file
{
"foo": "barN"
}
]
, чтобы, когда я делаюсоединение через Multipart Copy будет правильным ...
[
{
"foo": "bar1"
},
{
"foo": "bar2"
},
{
"foo": "barN"
}
]