Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Ожидание данных |
Автор: admsasha 16.3.2020, 11:32 |
Требуется написать демон, который будет считывать данные с базы и производить определенные действия. Каким образом можно узнать, что в базе есть новые строки не делая ежесекундно запросы типа "select .. where checked=1" ? Использую DBI (mysql). В базу данные попадают через CGI скрипт (с сайта) который находится на том же сервере, что и данный демон. |
Автор: arto 16.3.2020, 15:51 |
а какую задачу вы хотите решить таким образом? |
Автор: admsasha 17.3.2020, 04:18 | ||
Добавлено через 1 минуту и 11 секунд Не понял вопроса. Не тыркать базу лишний раз, не нагружать CPU ненужными запросами. |
Автор: Bulat 17.3.2020, 08:08 | ||
Вот мне самому интересно, как считывать данные с базы, не делая туда запросы? ![]() |
Автор: admsasha 17.3.2020, 09:18 | ||
Вопрос не в том, чтобы вообще не делать, а не делать их постоянно. Как бы ожидать сигнала от второго скрипта, который скажет, что в базу данные поступили, можешь считывать их. |
Автор: Bulat 17.3.2020, 09:24 | ||
Сообщения между двумя скриптами - можно и через сокеты и даже через те же сигналы попробовать.. А если у тебя второй скрипт сам будет почти ежесекундно кидать данные в базу? Мне кажется тут надо саму архитектуру проекта пересмотреть и не "изобретать велосипед".. ![]() |
Автор: admsasha 17.3.2020, 10:04 | ||||
Добавлено через 29 секунд Поэтому я и задал вопрос Добавлено через 3 минуты и 5 секунд
|
Автор: Bulat 17.3.2020, 10:09 | ||
Ну так скрипт, который записывает данные в базу, сам запускает скрипт, который эти данные считывает, не делая регулярных запросов! |
Автор: admsasha 17.3.2020, 10:25 | ||
|
Автор: Bulat 17.3.2020, 10:43 | ||
Тогда CGi-скрипт раз в 30-60 минут запускает скрипт, который записывает данные в базу - если работа скрипта завершена без ошибок - то считаем, что данные успешно записаны и быстро отдаем ответ! |
Автор: alezzz 17.3.2020, 12:16 |
admsasha, держи в memcached ключ "есть/нет данные", читай его ежесекундно, если архитектура сложно меняется. |
Автор: Bulat 17.3.2020, 14:37 |
Так сложно ![]() ![]() |
Автор: alezzz 17.3.2020, 15:34 |
Не, файл - это обращение к диску, мне спокойнее к памяти обращаться. Добавлено через 8 минут хотя... если что-то простое, не сильно замороченое, то можно и файле флаг держать |
Автор: Bulat 17.3.2020, 15:54 | ||
в memcached у тебя ключи, значения и т.п. А мой способ - это даже не "флаг в файле", а "свойство файла как флаг". Есть данные - файл с размером 1 байт, нет данных(по умолчанию) файл с размером 0 байт. Причем для определения свойства совсем не обязательно "открывать" данный файл(хэндл и все такое) - достаточно считать размер файла специальной функцией из файловой системы... memcached еще надо устанавливать и т.п. А здесь все готовое - pure perl |
Автор: arto 17.3.2020, 16:12 | ||
use /dev/shm |
Автор: alezzz 17.3.2020, 16:16 |
Ни разу не пользовался, надо будет попробовать, да и это линоксовые примочки, а у меня и FreeBSD не мало. |
Автор: arto 18.3.2020, 08:37 |
емнимс, у freebsd есть своя имплементация tmpfs |