Это похоже на реляционное соединение. Поскольку ваши временные метки не должны совпадать, это называется non-equijoin.
Sort-Merge - один из нескольких популярных алгоритмов. Для non-equijoins это работает хорошо. Я думаю, что это будет то, что вы называете "предварительным слиянием". Я не знаю, что вы подразумеваете под «слиянием в реальном времени», но я подозреваю, что это все еще простая сортировка слиянием, которая является прекрасной техникой, широко используемой в реальных базах данных.
Вложенные циклы также могут работать. В этом случае вы читаете меньшую таблицу во внешнем цикле. Во внутреннем цикле вы найдете все «совпадающие» строки из таблицы большего размера. По сути, это сортировка слиянием, но с предположением, что в большой таблице будет несколько строк, которые будут соответствовать маленькой таблице.
Это, кстати, позволит вам более правильно назначать значение для связи между данными события и данными окружающей среды. Вместо того, чтобы читать результат массового слияния сортировки и пытаться определить, какая у вас запись, вложенные циклы хорошо справляются с этим.
Кроме того, вы можете выполнять «поиск» в меньшей таблице, читая большую таблицу.
Это сложно, когда вы делаете неравные сравнения, потому что у вас нет подходящего ключа для простого извлечения из простого слова. Однако вы можете легко расширить dict (переопределить __contains__
и __getitem__
) для сравнения диапазонов ключа вместо простых тестов на равенство.