@Sasha333
Хотел бы получить совет по поводу того, какой наиболее актуальный метод хранения и выборки уникальных за сутки данных.
Немного о нагрузке и данных:
На php скрипт по udp приходят ip адреса каждую минуту около 2х тысяч раз (процентов 80 это всё повторы), необходимо делать в дальнейшем запись в бд только уникальных значений за сегодня. То есть имеется 3 поля id (автогенерируемый), ip, datatime. запускается скрипт и начинается постоянный обмен пакетами.
Как я вижу это, необходимо поставить либо redis либо memcache и заносить все абсолютно адреса в кэш озу, после чего например каждые 5-10 минут вносить только уникальные за сегодня записи ip, datatime.
Немного о нагрузке и данных:
На php скрипт по udp приходят ip адреса каждую минуту около 2х тысяч раз (процентов 80 это всё повторы), необходимо делать в дальнейшем запись в бд только уникальных значений за сегодня. То есть имеется 3 поля id (автогенерируемый), ip, datatime. запускается скрипт и начинается постоянный обмен пакетами.
Как я вижу это, необходимо поставить либо redis либо memcache и заносить все абсолютно адреса в кэш озу, после чего например каждые 5-10 минут вносить только уникальные за сегодня записи ip, datatime.
Решения вопроса 1
@sergiks
Redis вполне подходит для задачи.
К примеру, для каждого ip формировать ключ вида дата:ip
. Например SET "20210205:192.168.1.5" ""
— для каждого ip создавать ключ с пустой строкой.
После полуночи IP начнут сохраняться с новой датой, а PHP скрипт по крону разберёт предыдущие сутки KEYS "20210205:*"
и сохранит собранные IP в БД.
Ещё лучше каждые сутки держать как хэш, где имя это дата, поля ip, и значения счетчики хитов с этого ip. Делать каждый раз HINCRBY "дата" "ip" 1
См. HINCRBY
P.S. ip, если там только IPv4, это 4 байта, можно хранить как целые числа, а не строки – компактнее.
2
комментария
Ответы на вопрос 0