Я использую CodeIgniter 3, вот код, о котором идет речь:
//now transfer data - this only works for very small to medium tables
$all = 'SELECT * FROM `'.$sourceServer['database'].'`.`'.$table.'`';
if($data = $this->source->cnx->query($all)){
$sqls = [];
foreach($data->result_array() as $v){
$sql = 'INSERT INTO `'.$targetServer['database'] . '`.`' . $targetTable . '` SET ';
foreach($v as $o => $w){
$sql .= "\n\t`" . $o . '`=' .
(is_null($w) ? '' : "'") .
(is_null($w) ? 'NULL' : str_replace("'", "\\'", $w)) .
(is_null($w) ? '' : "'") . ',';
}
$sqls[] = rtrim($sql, ',');
}
foreach($sqls as $sql){
$this->target->cnx->query($sql);
}
}
Обратите внимание, что $this->target->cnx..
и $this->source->cnx..
являются экземплярами подключений CI, но вполне могут быть на двух разных физических серверах в сети.
Кроме того, оба соединения открыты все время обработки, так как я, возможно, захочу выполнить другие межсетевые операции позже (я мог бы закрыть $this->source->cnx
после того, как получил данные, но, возможно, придется открыть их снова).
Я считаю, что это очень медленно; как я могу ускорить это?