Я пытаюсь импортировать реляционную базу данных EPF. Реляционная база данных Itunes epf состоит из деталей всей базы данных (приложения, музыка, телепередачи, игры и т. Д.). Вы можете найти больше об этом здесь База данных отношений Itunes EPF Я могу импортировать всю базу данных, кроме одной, которая не обрабатывается. Этот файл составляет около 6 ГБ.
$field_separator = chr(1);
$record_separator = chr(2)."\n";
$data_appdt=explode($record_separator,file_get_contents('file_path',true));
foreach ($data_appdt as $key => $value)
{
if (substr($value, 0, 1) != '#')
{
if (!empty($value))
{
{
$data_itu_app_dt=explode($field_separator, $value);
$result=$this->admin_model->itunes_app_dt($data_itu_app_dt);
}
}
}
}
Приведенный выше код выполнен в codeigniter, который является контроллером для процесса импорта. Этот код работает примерно до 2 ГБ файла. Но для размера больше, чем это не работает. Возможно, чтение всего файла и памяти не позволяет ему сделать это. Поэтому я использовал приведенный ниже код для обработки более высоких файлов.
$handle = fopen('file_path', "r") or die("Couldn't get handle");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$data_appp=explode($record_separator,$buffer);
foreach ($data_appp as $key => $value)
{
if (substr($value, 0, 1) != '#')
{
if (!empty($value))
{
$data_itu_appp=explode($field_separator, $value);
//print_r($data_itu_appp);
$result=$this->admin_model->itunes_appp($data_itu_appp);
}
}
}
}
fclose($handle);
}
Он работает даже с файлами размером 8 ГБ, и импорт успешно завершен. Но тогда для файла 6gb импорт не происходит. Это пример данных для таблицы
1426669253786 | 329704232 | EN | iParrot Фраза вьетнамский-итальянский | Перевести
Вьетнамский перевод с итальянского на английский
iPad / iPhone / iPod Touch |iParrot Phrase устанавливает новый стандарт для мгновенного многоязычного
программное обеспечение для перевода. Разработан исключительно для iPad / iPhone / iPod
Прикоснись, в нем более 20 видов ярко выраженного орального
язык для мгновенного использования. iParrot Фраза организована по категориям
такие как: приветствия, транспорт, покупки и просьба о помощи
и т.д. Таким образом, вам достаточно мгновенно найти нужные вам предложения.
Организованный для быстрого доступа и простоты, он особенно полезен при
путешествуя заграницей. Виртуальная беглость доступна на китайском, английском,
Японский, русский, французский, немецкий, испанский, итальянский, корейский,
Португальский, арабский, тайский и вьетнамский.
- НЕ ДОСТУП К ИНТЕРНЕТУ!
- Универсальное приложение для iPad / iPhone / iPod Touch;
- Изучай иностранный язык, куда бы ты ни пошел;
- Слушайте и практикуйте произнесение фраз на экране;
- Руководства по произношению (Romanization / PinYin) для арабского, китайского, японского, корейского, русского и тайского языков;
- 400 практических фраз о путешествиях у вас под рукой;
- Идеально подходит для студентов и деловых путешественников. | Поддержка iOS 5; Улучшение пользовательского интерфейса; Корректировка контента; ошибка
исправить. |Http: //www.iparrot.info | HTTP: //www.iparrot.info | HTTP: //a3.mzstatic.com/us/r30/Purple/v4/59/4c/3c/594c3c1d-8081-583a- 0a02-3d07edb41f85 / screen320x480.jpeg | HTTP: //a5.mzstatic.com/us/r30/Purple/v4/ba/36/43/ba3643ff-1316-a689-a422-c67eff2e1639/screen320x480.jpeg | HTTP: // a2.mzstatic.com/us/r30/Purple/v4/5a/17/43/5a174333-d3c7-6ae5-5e25-6539e3d9e62c/screen320x480.jpeg|320×480|320×480|320×480|http://a2.mzstatic.com/ нас / r30 / фиолетовый / v4 / 2e / 87 / 2d / 2e872d35-d55b-8910-0f2b-bb9042f57537 / screen480x480.jpeg | 360×480 |
Это пример данных из этой базы данных, который является подробным описанием приложения (в приведенном выше примере данных я заменил символы ASCII (SOH) для нового поля на |). На самом деле, когда импорт выполняется с использованием второго кода, когда появляется новая строка, он принимает его как / n и импорт прерывается. Так есть ли способы обойти этот или любой другой метод для обработки такого большого файла (6 ГБ) для импорта базы данных? Возможно, вышесказанное немного сбивает с толку. Нужны ли какие-то разъяснения, тогда я сделаю все более ясным. Ищете хорошее решение .. Спасибо всем.
У меня нет непосредственный ответим за вас в php, но проблема, скорее всего, в том, что вы загружаете файл в память. Хитрость заключается в потоковой передаче файла и записи его кусками.
В Python вы можете использовать requests
библиотека например, это хорошо делает Auth (и вы могли бы написать свою логику загрузки, возможно, более простым способом.
Это будет выглядеть примерно так
username='yourusernamehere'
password='yourpasswordhere'
response = requests.get('https://feeds.itunes.apple.com/feeds/', auth=(username, password), stream=True)
Обратите внимание, что я использовал stream=True
Механизм, потому что вы будете загружать огромные файлы, которые, вероятно, не уместятся в памяти, вы должны использовать chunking следующим образом:
with open(local_filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.flush()
Других решений пока нет …