отправка терминала / команды оболочки из mysql на терминал и получение ответа во время зацикливания курсора - PullRequest
0 голосов
/ 20 января 2012

Я использую php с MySQL на macOS. Я хотел бы выбрать большое количество писем из базы данных и выполнить поиск DNS для каждого письма в моем выборе, используя команду dig из терминала / оболочки, что-то вроде: «dig gmail.com». Конечно, я могу зациклить этот выбор через php, но он будет очень медленным по сравнению с зацикливанием курсора на MySQL. Как отправить команды терминала из mysql в терминал и получить ответ на macOS?

Ответы [ 2 ]

0 голосов
/ 20 января 2012

(я предполагаю, что вы действительно имеете в виду ADDR_SPEC, когда говорите об адресах электронной почты)

, но это будет очень медленно по сравнению с циклическим курсором на mysql

Нет, не совсем.Единственное отличие состоит в том, что в зависимости от того, как вы реализуете этот подход PHP, требует, чтобы вы извлекли весь набор результатов, прежде чем начать итерацию по нему.Однако разбить это на меньшие наборы результатов тривиально.

Кроме того, ограничение производительности вашего алгоритма - скорость поиска DNS - и это все о задержке - если ваша цель состоит в том, чтобы сделать это быстрее, товы должны выполнять несколько запросов параллельно.

Следующее, что вы должны учитывать, - это то, что вы, вероятно, получили несколько почтовых ящиков для каждого MX, например, user1@gmail.com, user2@gmail.com ....Хотя, если вы правильно настроили DNS-кэширование, будет меньше затрат, чем каждый раз, когда вы будете обращаться к источнику, если вы работаете с очень большим набором данных или будете делать это более одного раза, это имеет гораздо больший смыслпросто работайте с уникальными значениями хоста MX, например,

 SELECT DISTINCT SUBSTR(addr_spec FROM LOCATE('@', addr_spec)) AS mx2chk
 FROM yourtable
 WHERE addr_spec LIKE '%@%'
 AND (email_checked IS NULL
   OR email_checked<NOW() - INTERVAL 300 DAY )
 ;

Действительно, если вы помечаете данные, вы можете использовать собственную базу данных для проверки MX.

с помощью команды digиз терминала / оболочки

Пожалуйста, не говорите мне, что вы запускаете оболочку из процесса управления PHP для поиска DNS?

0 голосов
/ 20 января 2012

Вы не можете выполнять команды оболочки из SQL-запроса (слава богу), иначе это будет ужасная уязвимость безопасности ... Вам придется делать это с php.

P.S. Однако можно выполнять команды оболочки из утилиты командной строки MySQL

\! ls

... но если я понимаю ваш вопрос, это не поможет решить вашу текущую проблему.

...