首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入大型itunes epf数据库不起作用

导入大型itunes epf数据库不起作用
EN

Stack Overflow用户
提问于 2015-04-21 06:01:55
回答 1查看 377关注 0票数 1

我正在尝试导入EPF关系数据库。Itunes epf关系数据库由所有数据库(应用程序、音乐、电视节目、游戏等)的详细信息组成。您可以在这里找到更多的信息,Itunes EPF关系数据库,我可以导入所有的数据库,除了一个没有处理的数据库。这个文件大约是6gb。

代码语言:javascript
复制
$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);
                                            }
                                            }
                                        }
                                    }

上面的代码是在代码点火器中完成的,它是导入process.This代码的控制器,可以工作在2gb左右的文件中。但它的尺寸比那还大,不起作用。也许它读取整个文件和内存不允许它这样做。所以我使用下面的代码来处理更高的文件。

代码语言:javascript
复制
    $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 iParrot短语为即时多语言翻译软件提供了一个新的标准.它专为iPad/iPhone/iPod设计,有超过20种发音完美的口语供即时使用。iParrot短语被分类为:问候、运输、购物、请求帮助等,所以你就可以立即找到你需要的句子了。它是为了方便和方便而组织起来的,在国外旅行时特别有用。中文、英文、日文、俄文、法文、德文、西班牙文、意大利文、韩文、葡萄牙文、阿拉伯文、泰文和越南文的实际流利程度。

这是来自该数据库的示例数据,它是应用程序的详细信息(在上面的示例数据中,我将ASCII字符(SOH)替换为新字段,并使用了application )。实际上,当导入正在进行时,使用第二段代码,当新行出现时,它会将它作为/n,并且导入会中断。那么,是否有任何方法可以绕过此方法或任何其他方法来处理这样大的文件(6GB)以进行数据库导入?也许上面的事情有点令人困惑。有什么需要澄清的吗?那我就把事情说得更清楚。寻找一个好的解决方案。谢谢大家。

EN

回答 1

Stack Overflow用户

发布于 2015-06-11 17:55:39

我在php中没有直接的答案,但问题很可能是将文件加载到内存中。诀窍是将文件流下来,并将其写成块。

例如,在python中,您可以使用requests 图书馆,这很好地实现了Auth (您也可以以更轻松的方式编写您的下载逻辑。看起来就像这样

代码语言:javascript
复制
username='yourusernamehere'
password='yourpasswordhere'
response = requests.get('https://feeds.itunes.apple.com/feeds/', auth=(username, password), stream=True)

请注意,我使用了stream=True机制,因为您将下载可能不适合内存的大型文件,您应该像这样使用分块:

代码语言:javascript
复制
 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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29764116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档