php - PHP 从 500k+ SQL 行生成 CSV
问题描述
我自古以来就面临一个问题。我有一个包含 500 000 行的大型数据集,我想将它们打印到 CSV。
在第一种情况下,我需要从一行中的列进行计算以确定“结果”列。我找到了解决方案。我正在使用“获取”并逐行进行计算并逐渐打印到我的 csv
简化示例:
|---------------------------------------|
| ID | type | var1 | var2 | var1 * var2 |
|---------------------------------------|
| 0 | car | 2 | 5 | 10 |
| 1 | moto | 4 | 8 | 32 |
| 2 | car | 0 | 2 | 2 |
|---------------------------------------|
在第二种情况下,我需要从 500k 行中打印涉及这 500k 行中的大量行的计算(最多可以包含 10k+ 行)。
简化示例:
|-----------------------------|
| type | sum var1 * var2 |
|-----------------------------|
| car | 87677670 |
| moto | 3232435 |
|-----------------------------|
但是,计算比乘法的和要复杂得多。翻译:它们不能直接在 SQL 中完成。
我的问题是,如果我让我的所有汽车从我的数据库到我的 php 应用程序循环,我的 php memory_limit 将达到。我怎样才能像第一个例子一样逐渐做到这一点?
不是:我使用的是 Oracle 12c 和 PHP 5.3.5
解决方案
您可以通过按块进行计算来减少使用的内存。使用 SQL,您可以循环多个请求,每个请求仅包含特定数量的行。
在 Oracle 中,这可以使用FETCH
和来完成OFFSET
。这是一份文档,您可以在其中找到所需的一切。
推荐阅读
- azure - “作业因原因失败:不支持的类型:二进制。详细信息:java.lang.RuntimeException:不支持的类型:二进制\n\tat ...”
- windows - 如何在 bat 文件中的不同命令中获取 curl 的状态
- c++ - C++ Paper Pencil Algorithm Addition - 由于内存丢失而添加数字的问题
- codeigniter - HMVC codeigniter MX URI 路由损坏,application\third_party\MX\Router.php
- sql - MS ACCESS 中的 SQL 和 WHERE 和 INSERT INTO 问题
- python - 计时调用函数的频率,忽略函数本身在多处理中花费的时间
- swift5 - errMsg:声明仅在扩展 UIViewController 的文件范围内有效
- python - 有没有办法将输入用于数学函数?
- f# - 匿名记录中的条件字段,在 f#
- wordpress - 将 joomla url 重定向到我的新 wordpress