rPman, цена меняется в зависимости от курсу, да я так пока и сделал, перед обработкой запускаю процедуру которая подсчитает цены на это вычисление, конечно костыль да ладно, этот вариант взят из oracle, в нормальных базах всё работает без костылей
Индексы по каждому полю а так же составной индекс не помог, вероятно из за MAX в условии функции приходится обходить все строки, на этом этапе индекс не подхватывает
добавил вычисление через WITH избавился двойного вычисления, помогло ускорить на 60%, но это всё равно пока долго ) ~57сек при 147т записей в базе этой категории
Everything_is_not_so_bad, например есть звонок А 8600100 Б 8700100 длительность 50сек время вызова 2024-08-03 12:51:01
Вариант где 100% можно слеить звонок будет такой
1 коммутатор прислал часть А 8600100 Б 8700100 длительность 50сек время вызова 2024-08-03 12:51:00
2 коммутатор прислал часть А 8600100 Б 8700100 длительность 49сек время вызова 2024-08-03 12:51:00
3 коммутатор прислал часть А 8600100 Б 8700100 длительность 50сек время вызова 2024-08-03 12:51:01
В итоге мы собираем части вместе в одну и получаем
А 8600100 Б 8700100 длительность 50сек время вызова 2024-08-03 12:51:01
Как происходит процесс склейки
Приходит часть 1, там ещё есть такая штука как перемычки по которым понятно в какую сторону искать другую часть, пока других частей нету записываю в базу эту часть
Приходит часть 2 мне нужно искать часть которая уже записана в базу, так и 3 часть
Я бы хотел может если так можно обучить нейросеть, даю ей список частей найденных по перемычке + диапазону +-3400мс (т.к эта максимальная разбежка между коммутатарами), а она мне найдёт лучшего кандидата либо с каким процентом из списка может подходить к искомой части
Алексей Уколов, когда звонок проходит через несколько коммутаторов, каждый коммутатор присылает CDR запись об звонке, звонок может состоять из 3 частей, чтобы звонок склеить в единый нужно найти все части этого звонка. т.к время на коммутаторах может отличаться на мс то и время вызова в эти частях может отличаться и продолжительность. Но есть ещё и переадрсация звонка. В каких то частях может быть подставлен другой номер.
я сейчас тестирую может поможет, вычитал, что не правильно
KAFKA_SESSION_TIMEOUT=60000
KAFKA_HEARTBEAT_INTERVAL=3000
эти настройки выставил,
KAFKA_HEARTBEAT_INTERVAL должен быть 1/3 от времени KAFKA_SESSION_TIMEOUT, и KAFKA_SESSION_TIMEOUT был у меня недостаточный т.к операция завершалась позже времени транзации, и всё уходило в перебалансировку, надеюсь поможет )
Everything_is_not_so_bad, каждый инстанс записывает в базу данные пачками по 500 штук, но бывают ошибки Lock wait timeout exceeded; try restarting transaction
Виктор, При записи данных в базу пачками мне точно нужно знать что в этой пачке все уникальные данные, игнорировать ошибки дубликатов или делать апдейт их не подходит вариант