Я работаю над сложным сценарием, который может обрабатывать до 500 000 записей. Вот мой вопрос.
В основном мой код будет анализировать текстовый файл, чтобы получить каждую из этих 500 000 записей или около того. Каждая запись будет иметь категорию, мой код должен будет проверить, была ли создана новая запись в таблице categories
для этой категории во время этой конкретной обработки, и если нет, то она создаст эту запись.
Итак, у меня есть 2 варианта:
1) Я храню массив ключей => значений, содержащих имя категории и идентификатор, чтобы я мог сделать это:
if (array_key_exists($category,$allCategories))
$id=$allCategories[$category];
else
{
mysql_query("INSERT INTO categories (procId,category)
VALUES ('$procId''$category')");
$id=mysql_insert_id();
$allCategories[$category]=$id;
}
2) Каждый раз, когда этот текстовый файл обрабатывается, он получает свой собственный идентификатор процесса. Поэтому вместо проверки переменной $allCategories
, которая может вырасти до 100 000 записей, я мог бы сделать это:
SELECT id FROM categories WHERE procId='$procId' AND category='$category'
Недостатком здесь является то, что этот запрос будет выполняться для каждой из 500 000 записей. Принимая во внимание, что недостатком хранения всех категорий в массиве является то, что у меня может быть недостаточно памяти или сервер может аварийно завершить работу.
Есть мысли?