Сравнение больших наборов данных MySQL с PHP - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть набор из примерно 1,1 миллиона уникальных идентификаторов, и мне нужно определить, какие из них не имеют соответствующей записи в базе данных моего приложения. Набор идентификаторов также поступает из базы данных, но не из одного. Я использую PHP и MySQL и у меня достаточно памяти - PHP работает на сервере с 15 ГБ ОЗУ, а MySQL работает на своем собственном сервере с 7,5 ГБ ОЗУ.

Обычно я просто загружаю все идентификаторы в одном запросе, а затем использую их с предложением IN запроса SELECT, чтобы выполнить сравнение в одном кадре.

До сих пор мои попытки привели к созданию сценариев, которые либо занимают невыносимо много времени, либо увеличивают процессор до 100%.

Какой лучший способ загрузить такой большой набор данных и провести это сравнение?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Создайте дамп идентификаторов из первой базы данных в файл, затем повторно загрузите его во временную таблицу во второй базе данных и выполните соединение между этой временной таблицей и второй таблицей базы данных, чтобы идентифицировать те идентификаторы, которые не нет соответствующей записи. Создав этот список, вы можете удалить временную таблицу.

Таким образом, вы не пытаетесь работать с большими объемами данных в самом PHP, поэтому у вас не должно быть проблем с памятью.

1 голос
/ 21 апреля 2011

Предполагая, что вы не можете присоединиться к таблицам, поскольку они не находятся на одном и том же сервере БД, и что ваш сервер может справиться с этим, я бы заполнил массив всеми идентификаторами из одной БД, а затем перебрал бы идентификаторы из другойи используйте in_array, чтобы увидеть, существует ли каждый из них в массиве.

Кстати - согласно this , вы можете сделать in_array более эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...