我试图导入EPF关系数据库。 Itunes epf关系数据库由所有数据库(应用程序,音乐,电视节目,游戏等)的细节组成。你可以在这里找到更多信息Itunes EPF Relation Database我可以导入除一个未处理的数据库之外的所有数据库。这个文件大约6GB。
$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中完成,它是导入过程的控制器。此代码适用于高达2gb的文件。但是对于尺寸大于它不起作用的尺寸。也许它读取整个文件和内存并不允许它这样做。所以我使用下面的代码来处理更高级的文件。
$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);
}
它甚至适用于8gb文件,导入完成并成功完成。但是对于6gb文件,导入不会继续。这是表
的示例数据1426669253786 | 329704232 | EN | iParrot Phrase越南语 - 意大利语|翻译 越南短语到意大利语接听翻译 iPad / iPhone / iPod Touch |
iParrot Phrase为即时多语言设定了新标准 翻译软件。专为iPad / iPhone / iPod设计 触摸,它有超过20种完美明显的口服 即时使用的语言。 iParrot Phrase按类别分类 例如:问候,交通,购物和寻求帮助 等等,你就可以立即找到你需要的句子了。 有组织的即时访问和轻松,它特别有用 出国旅游。虚拟流利,中文,英文, 日语,俄语,法语,德语,西班牙语,意大利语,韩语, 葡萄牙语,阿拉伯语,泰语和越南语。
- 无需互联网访问!
- 适用于iPad / iPhone / iPod Touch的通用应用程序;
- 随时随地学习外语;
- 在屏幕上聆听并练习发音短语;
- 阿拉伯文,中文,日文,韩文,俄文和泰文的罗马化发音指南(罗马化/拼音);
- 指尖上的400个实用旅行短语;
- 适合学生和商务旅客。| iOS 5支持; UI改进;内容更正;窃听器 固定|。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|320x480|320x480|320x480|http://a2.mzstatic.com/us/r30/Purple/v4/2e/87/2d/2e872d35-d55b-8910-0f2b-bb9042f57537/screen480x480.jpeg|360x480|
这是来自该数据库的样本数据,它是应用程序详细信息(在上面的示例数据中,我用|)替换了新字段的ASCII字符(SOH)。实际上当导入正在使用第二个代码时,当新行将其作为/ n并且导入被破坏时。那么有没有办法绕过这个或任何其他方法来处理这样的大文件(6 GB)进行数据库导入?也许上面的事情有点混乱。有没有需要澄清,那么我会更清楚。寻找一个好的解决方案..谢谢大家。
答案 0 :(得分:0)
我在PHP中没有为您提供直接答案,但问题很可能是您将文件加载到内存中。诀窍是将文件流式传输并以块的形式写入。
在python中,您可以使用requests
library,这样可以很好地执行Auth(您可以更轻松地编写下载逻辑)。
它看起来像这样
username='yourusernamehere'
password='yourpasswordhere'
response = requests.get('https://feeds.itunes.apple.com/feeds/', auth=(username, password), stream=True)
请注意,我使用了stream=True
机制,因为您将下载可能不适合内存的大文件,您应该像这样使用分块:
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()