Пакетная обработка в массиве с использованием PHP - PullRequest
0 голосов
/ 29 мая 2009

Я получил тысячи данных в массиве, который был проанализирован из xml. Меня беспокоит время обработки моего скрипта. Влияет ли это на время обработки моего скрипта, так как у меня есть сто тысяч записей, которые нужно вставить в базу данных ? Есть ли способ обработки вставки данных в базу данных в пакетном режиме?

Ответы [ 5 ]

1 голос
/ 29 мая 2009

Синтаксис:

INSERT INTO tablename (fld1, fld2) VALUES (val1, val2), (val3, val4)... ;

Так что вы можете написать что-л. вот так (фиктивный пример):

foreach ($data AS $key=>$value)
{
    $data[$key] = "($value[0], $value[1])";
}
$query = "INSERT INTO tablename (fld1, fld2) VALUES ".implode(',', $data);

Это работает довольно быстро для больших массивов данных, и не беспокойтесь о производительности, если ваш набор данных помещается в память.

0 голосов
/ 12 января 2014

Вы думали о array_chunk? У меня сработало в другом проекте http://www.php.net/manual/en/function.array-chunk.php

0 голосов
/ 30 мая 2009

Или с оберткой ADOdb (http://adodb.sourceforge.net/):

// assuming you have your data in a form like this:
$params = array(
             array("key1","val1"),
             array("key2","val2"),
             array("key3","val3"),
             // etc...
          );
// you can do this:
$sql = "INSERT INTO `tablename` (`key`,`val`) VALUES ( ?, ? )";
$db->Execute( $sql, $params );
0 голосов
/ 29 мая 2009

Это для файлов SQL - но вы можете следовать его модели (если не просто использовать его) -

Он разбивает файл на части, которые вы можете указать, скажем, 3000 строк, а затем вставляет их с интервалом <1 секунды до 1 минуты или более. </p>

Таким образом, большой файл разбивается на более мелкие вставки и т. Д.

Это поможет обойти редактирование конфигурации php-сервера и беспокоиться об ограничениях памяти и т. Д., Таких как время выполнения скрипта и т. П.

Новые пользователи не могут вставлять ссылки, поэтому в Google Search "sql big dump" или, если это работает, перейдите: www [точка] озеров [точка] де [слэш] bigdump [точка] php

Таким образом, вы можете даже теоретически изменить приведенный выше скрипт, чтобы он принимал ваш массив в качестве источника данных вместо файла SQl. Это потребовало бы некоторой модификации, очевидно.

Надеюсь, это поможет. -R

0 голосов
/ 29 мая 2009

Это вряд ли повлияет на время обработки, но вам нужно убедиться, что журналы транзакций БД достаточно велики, чтобы построить сегмент отката для 100 тыс. Строк.

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