Sobes.tech
Senior
39

Cum se rezolvă un conflict de cerințe: întârziere de cel mult 20 de minute, dar fișierele trebuie să fie mari (512 MB), dacă în subiect sunt puține date?

Companiile au fost întrebate
OZONOZON

Răspuns de la AI

sobes.tech AI

Чтобы разрешить конфликт требований — задержка не более 20 минут и файлы должны быть большими (512 МБ), даже если данных в топике мало, можно использовать следующие подходы:

  • Буферизация и таймауты: накапливать данные до достижения размера файла или максимального времени ожидания (20 минут), после чего отправлять файл, даже если он меньше 512 МБ.
  • Динамическое формирование файлов: если данных мало, отправлять меньший файл по таймауту, чтобы не превышать задержку.
  • Компромисс по размеру: установить минимальный размер файла, например, 256 МБ, если 512 МБ не набирается за 20 минут.

Пример на Java (псевдокод):

long maxDelay = 20 * 60 * 1000; // 20 минут
long maxSize = 512 * 1024 * 1024; // 512 МБ
long startTime = System.currentTimeMillis();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();

while (true) {
    byte[] data = pollDataFromTopic();
    if (data != null) {
        buffer.write(data);
    }
    long elapsed = System.currentTimeMillis() - startTime;
    if (buffer.size() >= maxSize || elapsed >= maxDelay) {
        sendFile(buffer.toByteArray());
        buffer.reset();
        startTime = System.currentTimeMillis();
    }
}

Такой подход гарантирует, что задержка не превысит 20 минут, а размер файла будет максимально близок к 512 МБ, если данные позволяют.