用php处理一个超大sqlite文件(几十G),有什么好方法? 处理的时候 直接死了~~
认证高级PHP讲师
这么大的文件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肯定是处理不了的,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吧,然后优化索引,应该没啥问题了。
参考一下这货