当前位置:首页 > 技术文章 > 用 PHP 处理 10 亿行数据!

用 PHP 处理 10 亿行数据!

go1238个月前 (04-10)技术文章1100

这个事情是依据GitHub上的一个“十亿行挑衅”(1brc)运动而来,现在正在进行,如果你没有听说过,可查看Gunnar Morlings 的 1brc 存储库

今天,我将带大家一起走进“挑衅十亿行“数据的世界。

当然,这个事情是依据GitHub上的一个“十亿行挑衅”(1brc)运动而来,现在正在进行,如果你没有听说过,可查看Gunnar Morlings 的 1brc 存储库。

https://github.com/gunnarmorling/1brc

我之所以被吸引,是因为社区中的两位同事加入了竞赛。以下地址是全球各地开发者的代码排行榜。

https://github.com/gunnarmorling/1brc?tab=readme-ov-file#results

图1 10亿行代码处置速度排行榜

我只截图一小部分,感兴致的朋友还可以阅读上面的网址。

应用PHP加入速度排行榜

大家知道,PHP 并不以速度最快而著名。在我开发 PHP 剖析器时,我想应当尝试一下它,看看能到达多快的速度。

第一种,最“幼稚”的办法


我克隆了存储库,下载了measurements.txt(一个csv格局文件)后,我开端构建第一个最“天真纯朴”的实现,但是能够解决这个挑衅。


代码如下:



































<?php
$stations = [];
$fp = fopen('measurements.txt', 'r');
while ($data = fgetcsv($fp, null, ';')) {    if (!isset($stations[$data[0]])) {        $stations[$data[0]] = [            $data[1],            $data[1],            $data[1],            1        ];    } else {        $stations[$data[0]][3] ++;        $stations[$data[0]][2] += $data[1];        if ($data[1] < $stations[$data[0]][0]) {            $stations[$data[0]][0] = $data[1];        }        if ($data[1] > $stations[$data[0]][1]) {            $stations[$data[0]][1] = $data[1];        }    }}
ksort($stations);
echo '{';foreach($stations as $k=>&$station) {    $station[2] = $station[2]/$station[3];    echo $k, '=', $station[0], '/', $station[2], '/', $station[1], ', ';}echo '}';


这里没什么可夸耀的,我们先打开文件,然后用来fgetcsv()函数来读取数据。如果未找到元素,则创立新的空的stations数组和相应列,如要有数据则增长计数,对温度求和,并查看当前温度是否低于或高于最小值或最大值,并做相应的更新。

我把所有东西都放在一起,应用ksort()按$stations数组次序排列,然后回显数组并盘算平均温度(总和/计数)。

简略描写完算法,然后在我的笔记本电脑上运行了这个简略代码,它须要25 分钟。

声明:本站所有内容均为自动采集而来,如有侵权,请联系删除

相关文章

Redis连环五十二问!看谁顶得住?

Redis连环五十二问!看谁顶得住?

基本 1.说说什么是Redis? Redis是一种基于键...

2024 年的最佳 PHP 框架

2024 年的最佳 PHP 框架

在本文中,我们将预测在 2024 年持续风行的最佳 PHP 框架。我们首先将看看PHP框架是什么,什么时候该斟酌应用PHP框架,以及应用PHP框架的重要长处都是什么。我还会介绍最合适初学者的 PHP 框架以及用于 Web 开发的最佳框架。什么是PHP框架?     &...

一文读懂多家厂商的大模型训练、推理、部署策略

一文读懂多家厂商的大模型训练、推理、部署策略

4 月 20 日,第 102 期源创会在武汉胜利举行。本期邀请来自武汉人工智能研讨院、华为、MindSpore、京东云、Gitee AI 的人工智能专家,环绕【大模型竞技与性能优化】主题发表演讲。接下来就一起看看本期运动的出色瞬间吧!大合影 get ✅披萨和礼物不能少!接下来进入主题演讲回想环节。可...

请立刻停止编写 Dockerfiles 并使用 docker init

请立刻停止编写 Dockerfiles 并使用 docker init

您是那种认为编写 Dockerfile 和 docker-compose.yml 文件很苦楚的人之一吗?我承认,我就是其中之一。我总是想知道我是否遵守了 Dockerfile、 docker-compose 文件的最佳编写实践,我畏惧在不知不觉中引入了安全破绽。但是现在,我不必再担忧这个问题了,感激...

服务器为什么大多用 Linux 而不是 Windows ?

服务器为什么大多用 Linux 而不是 Windows ?

前几天在知乎看到一个话题很有意思,且很有讨论意义。“服务器为什么大多用 Linux”,除了开源、好用等原因,回答也代表了各种不同人需求和看法,摘取一些分享给大家,也欢迎留言讨论。来自知乎好友“熊大你又骗俺”的回答首先在20年前,windows server+iis+asp+access 的方案,还是...