Мне нужно провести анализ одновременных событий, когда есть только время начала и продолжительность каждого события.
Детали
У меня есть стандартная запись о вызове CDR, которая содержит, среди прочего:
- calldate (время начала каждого звонка
- длительность (int, секунды длительности звонка)
- канал (строка)
Что мне нужно придумать, так это какой-то анализ одновременных вызовов на каждую секунду в течение заданного периода времени. Например, график одновременных звонков у нас был вчера.
(проблема та же, если у нас есть журналы посетителей с продолжительностью на веб-сайте и мы хотим получить одновременных клиентов для группы веб-страниц)
Каким будет ваш алгоритм?
Я могу перебирать записи за заданный период и заполнять массив, где каждый сегмент массива соответствует 1 секунде в общем периоде. Это работает и кажется быстрым, но если период времени велик (скажем, 1 год), мне потребуется много памяти (3600x24x365x4 байта ~ 120MB приблизительно).
Это для интерактивного веб-приложения, поэтому мой объем памяти должен быть достаточно маленьким.
Редактировать
Под одновременным я подразумеваю все вызовы в данную секунду. Второй будет мой минимальный блок. Я не могу использовать что-то большее (например, час), потому что все звонки в течение часа не нужно удерживать одновременно.