Senior
Hoe kun je efficiënt grote hoeveelheden gegevens uit de database in het geheugen exporteren, een bestand genereren en aan de frontend leveren? Kan compressie worden gebruikt?
sobes.tech AI
Antwoord van AI
Чтобы эффективно выгрузить большой объём данных из базы, не перегружая память, стоит использовать потоковую обработку (streaming) или пагинацию, то есть загружать данные порциями (batch) и сразу писать их в файл, не держа весь объём в памяти.
Пример подхода:
- Использовать курсор или пагинацию для выборки данных по частям.
- Для каждой порции данных сразу записывать в файл (например, CSV или JSON).
- По возможности использовать сжатие на лету, например gzip, чтобы уменьшить размер файла и снизить нагрузку на сеть при отдаче фронту.
Да, сжатие можно и рекомендуется использовать, особенно для больших файлов. Это уменьшит трафик и ускорит передачу данных. Например, можно создавать gzip-архив в процессе записи файла, не сохраняя несжатый вариант на диск.
Пример на Python с использованием генератора и gzip:
import gzip
import json
def fetch_data_in_batches(cursor, batch_size=1000):
while True:
batch = cursor.fetchmany(batch_size)
if not batch:
break
yield batch
with gzip.open('output.json.gz', 'wt', encoding='utf-8') as f:
for batch in fetch_data_in_batches(db_cursor):
for record in batch:
f.write(json.dumps(record) + '\n')
Таким образом, память используется эффективно, а файл сразу создаётся в сжатом виде.