Senior
33
Дерекқордан үлкен көлемдегі деректерді тиімді түрде жүктеп, файл жасап, оны фронтэндке беру үшін қалай істеуге болады? Сығу қолдануға бола ма?
Сұралған компаниялар
Позитив Технолоджис
AI-дан жауап
sobes.tech 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')
Таким образом, память используется эффективно, а файл сразу создаётся в сжатом виде.