用php处理一个超大sqlite文件(几十G),有什么好方法?

用php处理一个超大sqlite文件(几十G),有什么好方法?
处理的时候 直接死了~~

阅读 8.1k
10 个回答

这么大的文件PHP肯定是处理不了的,PHP处理文件首先要把它读到内存中,而每个脚本能够使用的内存跟PHP配置文件中的memory_limit是相关的。只要你内存足够大,你可以设置它为不受限制,就能够使用系统的最大内存。

推荐的解决方法是先把文件切小,通过shell程序比如sed把文件按一定大小(大小根据你的PHP内存大小确定)切割成若干个小文件,然后再用PHP处理。

逐行读取,php有这个函数,每次读取3行,但是sqlite 是本地数据库,读取是驱动的事情吧,和php没多大关系吧,别一次性全打印就行了吧

应该把数据转到MYSQL再提供给PHP读写。sqlite本来是个小巧的文件数据库,处理巨大数据的能力低下。

震惊!这么大的数据量居然还用sqlite。
再说你一次性把几十G读到内存,除非你的内存真的有几十G,否则一定爆内存。
建议尝试分割这个数据库或转换成其他类型的数据库处理。

PHP对文本的处理并不理想,很慢的。 入mysql后在做处理的方案是可行的,就是比较耗时。

参考 用它查吧

不懂sqlite 但是这么大的文件直接处理一定很难。但是大体上有一个思路。就是拆解。按照库啊。表啊什么的。

既然是sqlite文件,那就按数据库读取->处理->存储就可以了,php默认能直接使用sqlite.

sqlite转Mysql吧,然后优化索引,应该没啥问题了。

PHP内置SQLite引擎,能够通过PDO+SQL读写SQLite数据库.
SQLite引擎读写时并不需要把整个SQLite文件读入内存.

可以试试souce

1.打开cmd
2.进入到MySQL的bin文件夹 (C:softwarephpStudyphpStudyMySQLbin)
如果是在mamp下,则打开终端(Terminal),输入
/Applications/MAMP/Library/bin/mysql -uroot -p
3.输入命令:mysql -u root -p
4.输入密码:root(MySQL的密码)
5.输入命令(采用souce方法导入):. C:/software/phpStudy/phpStudy/MySQL/bin/a.sql(假设你的sql文件为a.sql,它放在bin文件夹下)

推荐问题