Sobes.tech
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')

Таким образом, память используется эффективно, а файл сразу создаётся в сжатом виде.