1 milyon satıra sahip MySQL InnoDB tablomuz var ve ihracat için 100K satır seçiyorum. Tabloda yaklaşık 200 sütun var.PHP, MySQL - yaklaşık 100 bin kayıt yükleyin ve bunları xml'ye aktarın
şimdiye kadar ne yaptım:
*
SEÇ sütun1, sütun2 ... my_table GELEN silinmiş = 0 ile tüm seçemezsiniz - Yük 100k kayıtları
- floş
$writer = new XMLWriter(); $writer->openMemory(); $writer->setIndent(true); $writer->startDocument('1.0', 'UTF-8'); $writer->startElement('export'); $iterator = 0; $data = $this->getData(); foreach($adverts as $advert) { $writer->startElement('ad'); $writer->writeElement('id', $data->id); // .. other columns $writer->endElement(); // end ad if (0 == $iterator % 1000) { file_put_contents($this->getFilePath(), $writer->flush(TRUE), FILE_APPEND); } $iterator++; }
kullanarak XMLWriter php kütüphanesi
Ama yine de önemli bir hatam var: İzin verilen bellek boyutu ... bayt bitkin
Bunu nasıl optimize edebileceğiniz başka yollar var mı? Sanırım veriyi başka yollardan yükleyebilirim, örneğin ilk turda sadece ids yükler ve sonra IN'yi (10k_ids) seçebilirim, ama bu fikri henüz test etmiyorum.
Görüşleriniz için teşekkür ederiz.
Ben How to export HTML table with 100K records with number formatting without memory exhaust
gibi çok benzer bir soru var ama düşük bellek tüketimi nasıl ulaşılacağını bir yolu yoktur.
İnsanlar hala XML kullanabilirsiniz? ;-) – Strawberry
Her biri 10k gibi birkaç dosya yazabilir misiniz? – michi
bir dosya olmalı. Benim fikrim veritabanından foreach ile 10k yük oldu, böylece değişken daha küçük veri kaydedildi –