Sobes.tech
Senior

Hoe los je een conflict in vereisten op: vertraging niet meer dan 20 minuten, maar de bestanden moeten groot zijn (512 MB), als er weinig gegevens in het onderwerp zijn?

sobes.tech AI

Antwoord van 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 МБ, если данные позволяют.