Im пытается импортировать данные json в mysql.My json-файл почти 3.7Mb и имеет почти 17k строк (тестовые данные действительных данных будут составлять около 65k строк). Но с моим скриптом очень медленно и требуется почти 8-9мин. Есть ли какой-либо быстрый способ импорта json-данных в mysql с интерфейсом прогресса php? И я пытаюсь добавить функцию выполнения и ее работы на данный момент.Большие данные Json для mysql
$veri=json_decode(file_get_contents('auctions.json'));
$sayi=count($veri->alliance->auctions);
$a=$veri->alliance->auctions;
$yuzde=round($sayi/100);
echo "<div id='tasiyici'>";
$sql=$db->prepare("INSERT INTO auctions (id, auc, item, owner, bid, buyout, quantity, timeLeft) VALUES ('',?,?,?,?,?,?,?)");
for ($i=0;$i<=$sayi;$i++){
$sql->execute(array($a[$i]->auc,$a[$i]->item,$a[$i]->owner,$a[$i]->bid,$a[$i]->buyout,$a[$i]->quantity,$a[$i]->timeLeft));
if($i%$yuzde=='0'){
$y=$i/$yuzde;
if(($y*4+4)>"180"){$pos=40-(($y*4+4)-180); $color="color:#fff";}
if(($y*4+4)>=220){$pos=0;}
echo "<div class='rakam' style='background-position:-".$pos."px 0;".$color."'>%".($y+1)."</div>";
echo "<div class='yuzde' style='width:".($y*4+4)."px;'></div>";
ob_flush();
flush();
}
}
echo "</div>";
echo "<br> $sayi data added.";
CSS коды
<style>
body {
font-family:Arial;
}
#tasiyici {
width:400px;
height:17px;
display: block;
position: relative;
margin:50px auto;
background:#e3e3e3;
border-radius:5px;
overflow: hidden;
border:1px solid #ccc;
}
.yuzde {
height:17px;
display: block;
width:1px;
background:url("progressOverlay.png");
position: absolute;
top:0;
left:0;
z-index:1;
}
.rakam {
width:40px;
height:16px;
display: block;
line-height:17px;
position: absolute;
left:50%;
top:0;
margin-left:-20px;
z-index:9999;
background:url("progressOverlay.png") -40px 0 #e3e3e3 no-repeat;
font-size:11px;
}
</style>
Вы можете попробовать вставить более одной строки для каждого исполнения, но я скептически отношусь к этому, если это будет иметь большое значение для подготовленных операторов. Я попытался бы вставлять по крайней мере 1% ваших данных за выполнение. Повторное использование «INSERT INTO» не будет иметь большого значения, так как ваша бутылочная горловина - это объем данных. Другой способ - преобразовать ваши JSON-данные и сделать массовый импорт, например http://stackoverflow.com/questions/2811096/mysql-bulk-insert-from-csv-data-files – Basti
Значит, '$ sayi' может быть 65 000? Если это так, то 65 000 запросов выполняются. Возможно, вместо этого попробуйте выполнить запросы в партиях по 100 или 1000. Я не уверен, как это сделать с подготовкой/выполнением, но я бы просто начал с «вставлять в таблицы (ключи) значения (значения), (значения), (значения) ...' и т. Д. И продолжать добавлять »(значения), 'до тех пор, пока у вас не будет 100 или 1000 или что-то еще, а затем выполните это. Должно быть немного быстрее, потому что будет меньше соединений mysql (в зависимости от вашей настройки). партии 1000 сократят это до 65 запросов – Benno
Спасибо, ребята, я попробую 1000 строк для 1 запроса. Я добавлю результаты здесь. – xuma