我尝试使用 DataTables 与服务器端处理来显示 80,000 行(分页),但 Laravel 崩溃并出现以下错误:
PHP Fatal error: Maximum execution time of 300 seconds exceeded in /Users/fin/Documents/dev/evway-new/vendor/nesbot/carbon/src/Carbon/Carbon.php on line 291。
这是我获取行的控制器方法:
public function data()
{
$employees = Employee::get(); // ~80,000 employees
return Datatables::of($employees)
->edit_column('created_at',function(Employee $employee) {
return $employee->created_at->diffForHumans();
})
->add_column('actions',function($employee){
$actions = '<a href='. route('admin.employees.show', $employee->id) .'><i class="livicon" data-name="info" data-size="18" data-loop="true" data-c="#428BCA" data-hc="#428BCA" title="view employee"></i></a>
<a href='. route('admin.employees.edit', $employee->id) .'><i class="livicon" data-name="edit" data-size="18" data-loop="true" data-c="#428BCA" data-hc="#428BCA" title="update employee"></i></a>';
$actions .= '<a href='. route('admin.employees.clone', $employee->id) .' data-target="#clone"><i class="livicon" …Run Code Online (Sandbox Code Playgroud) 我们有一个transact sql语句,用于查询4个表,每个表中包含数百万行.
它需要几分钟,即使它已根据TuningAdvisor进行了索引和统计优化.
查询的结构如下:
SELECT E.EmployeeName
, SUM(M.Amount) AS TotalAmount
, SUM(B.Amount) AS BudgetAmount
, SUM(T.Hours) AS TotalHours
, SUM(TB.Hours) AS BudgetHours
, SUM(CASE WHEN T.Type = 'Waste' THEN T.Hours ELSE 0 END) AS WastedHours
FROM Employees E
LEFT JOIN MoneyTransactions M
ON E.EmployeeID = M.EmployeeID
LEFT JOIN BudgetTransactions B
ON E.EmployeeID = B.EmployeeID
LEFT JOIN TimeTransactions T
ON E.EmployeeID = T.EmployeeID
LEFT JOIN TimeBudgetTransactions TB
ON E.EmployeeID = TB.EmployeeID
GROUP BY E.EmployeeName
由于每个事务表包含数百万行的,我认为它分裂成每笔交易表中的一个查询,使用表变量,如@real,@budget和@hours,然后在最终的接合这些 …
我正在使用以下简单的Go代码来分配大小为1024x1024x1024的3D数组:
grid = make([][][]TColor, 1024)
for x = 0; x < 1024; x++ {
grid[x] = make([][]TColor, 1024)
for y = 0; y < 1024; y++ {
grid[x][y] = make([]TColor, 1024)
}
}
Run Code Online (Sandbox Code Playgroud)
TColor结构是一个4分量的float64向量:
type TColor struct { R, G, B, A float64 }
Run Code Online (Sandbox Code Playgroud)
通过分配中途(x = 477和y = ~600ish),最内层的make()调用恐慌... 运行时:内存不足:无法分配65536字节块(17179869184正在使用中)
这可以在较低的网格分辨率下工作,即256³,128³等.现在由于结构的大小是4x4字节,整个网格应该只需要16 GB的内存.我的机器(openSuse 12.1 64bit)具有32 GB的可寻址物理(即非虚拟)内存.为什么Go(weekly.2012-02-22)甚至不能分配一半呢?
我正在做一些不寻常的数据操作.我有36,000个输入文件.然后可以立即加载到内存中.我想取每个文件的第一个字节并将其放在一个输出文件中,然后再次为第二个执行此操作,依此类推.它不需要以任何特定顺序完成.因为输入文件是压缩的,所以加载它们需要更长的时间,并且它们不能一次读取1个字节.我最终得到每个输入文件的字节数组.
输入文件约为~1-6MB未压缩和~3-1MB压缩(有损压缩).输出文件最终是以字节为单位的输入文件数.在我的例子中~36KB.
我知道ulimit可以在Linux操作系统上设置,等效可以在windows上完成.即使这个数字可以提出,我也不认为任何操作系统会同时写入数百万个文件.
我目前的解决方案是制作3000个左右的缓冲区文件流并依次加载每个输入文件并将1个字节写入3000个文件,然后关闭文件并加载下一个输入.使用此系统,每个输入文件需要打开大约500次.
整个操作需要8天才能完成,并且只是一个更实际的应用程序的测试用例,最终会有更大的输入文件,更多的输出文件和更多的输出文件.
捕获内存中的所有压缩文件然后根据需要解压缩它们听起来并不实用,并且不会扩展到更大的输入文件.
我认为解决方案是缓冲输入文件中的内容(因为内存限制不允许缓冲所有内容),然后按顺序写入文件,然后重新执行.
但是我不知道是否有更好的解决方案使用我没有读过的东西.
编辑 我很感激快速反应.我知道我在应用我正在做的事情时模糊不清,我会尽力纠正这一点.我基本上有一个三维数组[图像] [X] [Y]我想迭代每个图像并从每个图像上的特定像素保存每种颜色,并为所有图像执行此操作.问题是内存限制.
byte [] pixels =((DataBufferByte)ImageIO.read(fileList.get(k)).getRaster().getDataBuffer()).getData();
这是我用来加载图像的,因为它负责解压缩和跳过标题.
我不是将其编辑为视频,因为我必须得到一个帧,然后将其转换为图像(昂贵的色彩空间转换),然后将其转换为byte []以获取RGB颜色空间中的像素数据.
我可以加载每个图像并将其分成~500个部分(Y的大小)并写入单独的文件,我保持打开并写入每个图像.输出很容易在演出之下.生成的文件可以完全加载到内存中,并转换为一个数组,用于顺序文件写入.
中间步骤意味着我可以在网络上分配负载,但我试图在4gb内存,没有GPU和低质量i7的低质量笔记本电脑上完成它.
在阅读davidbak的回复之前,我没有考虑将任何内容保存为文件作为中间步骤.大小是使这个问题变得微不足道的唯一因素,我现在看到大小可以分成更小的更易于管理的块.
使用psycopg2 cursor对象考虑Python中的以下代码(为清楚起见,更改或省略了一些列名称):
filename='data.csv'
file_columns=('id', 'node_id', 'segment_id', 'elevated',
'approximation', 'the_geom', 'azimuth')
self._cur.copy_from(file=open(filename),
table=self.new_table_name, columns=file_columns)
Run Code Online (Sandbox Code Playgroud)
\COPYbash工作速度非常快,即使对于大型(~1,000,000行)文件也是如此.这段代码超5000行,但data.csv超过10,000 行时,程序完全冻结.
任何想法\解决方案?
亚当
我有一个问题,现在我有一个300万条记录的列表,我希望得到每两条记录之间的所有差值.一个简单的嵌套循环可能需要永远.任何人都可以建议我能够处理这个问题的算法吗?
algorithm ×1
datatable ×1
go ×1
java ×1
join ×1
laravel ×1
performance ×1
php ×1
postgresql ×1
psycopg2 ×1
python ×1
ram ×1
sql ×1
sql-server ×1