Большие таблицы MySQL ежедневно обновляются? - PullRequest
2 голосов
/ 27 марта 2012

У меня есть таблица MySQL, в которой содержится информация о ценах на продукты около 2 миллионов продуктов. Каждый день мне приходится обновлять эту информацию для любых продуктов, информация о ценах которых изменилась [огромная боль].

Мне интересно, что лучший способ справиться с этими изменениями, кроме запуска что-то вроде compare and update каких-либо продуктов, которые изменились?

Любите любые советы, которые вы можете дать

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Для массовых обновлений вам определенно следует использовать LOAD DATA INFILE, а не множество небольших обновлений.

Сначала загрузите новые данные во временную таблицу:

LOAD DATA INFILE 'foo.txt' INTO TABLE bar (productid, info);

Затем запустите обновление:

UPDATE products, bar SET products.info = bar.info WHERE products.productid = bar.productid;

Если вы также хотите INSERT новых записей из того же файла, из которого вы обновляете, вы можете SELECT INTO OUTFILE всех записей, которые не имеют совпадающего идентификатора в существующей таблице, затем загрузить этот файл в ваш продукт таблицы с использованием LOAD DATA INFILE.

2 голосов
/ 27 марта 2012

Я поддерживаю механизм сравнения цен с миллионами цен и выбираю каждую строку, найденную в источнике, и обновляю каждую строку отдельно.Если нет строки, то я вставляю.Лучше всего использовать транзакции InnoDB для ускорения этого.

Все это делается с помощью скрипта PHP, который знает, как анализировать исходные файлы и обновлять таблицы.

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