贸易网站源码,保定做网站百度推广,怎么创建一个自己的网站,养殖网站模板我正在使用50 Gb MySQL导出文件#xff0c;并对其执行脚本操作列表以转换为SQLite3可加载形式(我从这里得到的线索#xff1a;脚本将mysql dump sql文件转换为可以导入sqlite3的格式D b )。我尚未研究MySQL转储的结构#xff0c;数据是从第三方获得的。我可以看到它具有创建…我正在使用50 Gb MySQL导出文件并对其执行脚本操作列表以转换为SQLite3可加载形式(我从这里得到的线索脚本将mysql dump sql文件转换为可以导入sqlite3的格式D b )。我尚未研究MySQL转储的结构数据是从第三方获得的。我可以看到它具有创建表并插入到语句中的功能但是鉴于其大小很难手动阅读并理解其结构。由于大小原因无法通过管道传输文件。还有一个bash脚本用于加载文件然后逐行处理例如while read line抱怨说它的内存不足。因此我尝试使用awk或sed来选择每一行(两者均起作用)将该行写入文件然后将其通过perl脚本列表。这是我正在使用的awk脚本$ awk -vvar$x NRvar{print;exit} file temp其中x保留行号然后通过perl命令发送temp最后将它们附加到输出文件中。但是尽管最初速度很快但是由于开始必须遍历越来越多的行因此它很快会变慢。大约有40,000行。有没有人像这样工作有更快的方法吗为什么脚本必须遍历越来越多的行我猜您没有40000个文件每个文件仅包含一行但是您能否提供更多详细信息命令$ sed -n 10 {p; q} file将读取前9个并给我第10行并退出sed。随着数量增加到40,000它必须遍历更多行才能给我特定的行。好的我知道了。是否可以选择先将文件分割成50个1Gb文件然后对每个块进行处理最后再次加入这些块。我在超级计算机上可以拥有的文件数量受到限制因此尽管50个文件太多我还是可以尝试获得一个最大数量的文件该数量将好于1个。谢谢您的指导。也许您也可以发布正在使用的脚本 (如果很大您可以尝试将其上传到pastebin.com并在此处提供链接)。如果您给出了所需的MySQL导出数据和SQLite3可加载格式的示例那么这似乎是一个更多人可以帮助的问题。我假设您希望从输入中读取的每一行MySQL都输出一行SQLite数据您链接到的解决方案对我来说似乎很可怕而且我相信它可以用单个Perl程序编写。您正在MySQL中执行SELECT * FROM table INTO OUTFILE table.txt然后在SQLite中执行.import table.txt table我还没有编写MySQL转储也没有完全按照文件的大小来遵循结构。该问题已更新以反映这一点。此外尽管sqlite3仍然抱怨格式但建议将文件拆分为脚本有效。谢谢一次只需处理一行while read -r linedoecho$line temp…process temp with Perl, etc…done file至少这不会表现出二次读取文件的行为这就是您的awk脚本所做的。它只读取一次大文件这是Big-O表示法的最佳性能(在恒定因子内)。如您所说如果这导致bash出现问题则应使用Perl读取每一行。 在50 GiB数据中有40,000行您大约有1个 每行数据的MiB。 尽管可能会导致Bash问题但这不太可能导致Perl出现任何问题。 您可以修改现有的Perl一次读取一行也可以使用简单的包装Perl脚本来完成上述Bash脚本的工作。wrapper.pl假设您当前的处理脚本称为script.pl#!/usr/bin/env perluse strict;use warnings;my $file temp;while (){open my $fh,, $file or die;print $fh $_;close $fh;systemperl,script.pl, $file;}未经测试的代码调用perl wrapper.pl output