php数据大屏解决方案 php 大数据处理

PHP数据刷屏显示-如何像机场大屏幕显示航班信息一样显示数据库中的数据

我的思路是:

创新互联公司长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为泸州企业提供专业的网站制作、网站建设泸州网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

数据库中新建一个表

is_showUpdate

字段:id、is_update

记录 :id=1;is_update = false;

当你的程序要修改显示信息的时候(也就是展示数据),信息修改完毕将is_showUpdate表的记录标记为true

update is_showUpdate set is_update ='true' where id = 1;

展示页面通过js定时器通过ajax每五秒调取下你的接口,接口只是查询is_showUpdate 表的id为1的记录 is_update 是否为true;如果该字段为true,则此接口将id=1的记录的is_update修改为false,然后给前台页面反水数据,刷新页面;

php采集大数据的方案

1、建议你读写数据和下载图片分开,各用不同的进程完成。

比如说,取数据用get-data.php,下载图片用get-image.php。

2、多进程的话,php可以简单的用pcntl_fork()。这样可以并发多个子进程。

但是我不建议你用fork,我建议你安装一个gearman worker。这样你要并发几个,就启几个worker,写代码简单,根本不用在代码里考虑thread啊,process等等。

3、综上,解决方案这样:

(1)安装gearman worker。

(2)写一个get-data.php,在crontab里设置它每5分钟执行一次,只负责读数据,然后把读回来的数据一条一条的扔到 gearman worker的队列里;

然后再写一个处理数据的脚本作为worker,例如叫process-data.php,这个脚本常驻内存。它作为worker从geraman 队列里读出一条一条的数据,然后跟你的数据库老数据比较,进行你的业务逻辑。如果你要10个并发,那就启动10个process-data.php好了。处理完后,如果图片地址有变动需要下载图片,就把图片地址扔到 gearman worker的另一个队列里。

(3)再写一个download-data.php,作为下载图片的worker,同样,你启动10个20个并发随便你。这个进程也常驻内存运行,从gearman worker的图片数据队列里取数据出来,下载图片

4、常驻进程的话,就是在代码里写个while(true)死循环,让它一直运行好了。如果怕内存泄露啥的,你可以每循环10万次退出一下。然后在crontab里设置,每分钟检查一下进程有没有启动,比如说这样启动3个process-data worker进程:

* * * * * flock -xn /tmp/process-data.1.lock -c '/usr/bin/php /process-data.php /dev/null 21'

* * * * * flock -xn /tmp/process-data.2.lock -c '/usr/bin/php /process-data.php /dev/null 21'

* * * * * flock -xn /tmp/process-data.3.lock -c '/usr/bin/php /process-data.php /dev/null 21'

不知道你明白了没有

可以提供一下大屏幕实时数据可视化解决方案嘛?

我先讲一下大屏的应用场景,再来解答题主的问题。

大屏的应用场景主要有两方面:

1.企业能力展示---面对外部客户,展现企业的能力,做参观用。

2.业务能力展现,领导核心关注的数据。

这其中有些数据展现是实时,比如双十一大屏,有些是非实时的,看历史数据的。

对于题主的问题呢,插件可能没办法支持到,我们一般都是以插件作为补充,像视频、Echarts等,客户可以按自己的需要集成一些外部信息。

后台的频繁请求对运算速度有很高的要求,我们会用这几个技术去解决,其中也包括一些我们自主研发的技术,在数据处理效率方面,我们还是很有自信的。

中间结果集缓存技术

对GQuery执行的最终结果进行永久缓存,能够节省缓存结果集所占用的内存空间,同时也能大大提升报告的打开速度,

全局字典技术

通过数值型数据来映射字符串,大大减少了对内存占用的需求,可以提高数据处理效率。

压缩结果数据

MPP数据集市在数据节点(Map节点)可提前进行局部的Reduce计算,即Local Reduce,压缩了传输的结果数据大小,使存储和内存空间的占用降低大概80%多,这样就提高了计算速度。

分布式元数据存储

优化MPP集市云文件Meta信息的存储方式,在Name节点拆分存储naming.meta,从而使云文件可以进行部分的备份和迁移,可以提升系统的可靠性。

大屏上的可视化区域划分是根据具体的业务指标来的。

我举个例子:

我们有个客户大屏想展示的结果是 从盈利能力、资金管理、资产管理的关键财务指标反映xx所现阶段发展规模、经营绩效,以及当年考核目标值的完成情况。

你就能从中拆分出涉及的指标有:

主营业务收入、主营业务成本、利润总额

EVA率、净资产收益率

现金及银行存款、受限现金及银行存款、非受限现金及银行存款

资产负债率

然后你就能知道这些分析应该用什么样的分析方法、适合的图表、分析的维度,继续接着上面的例子,一一对应的关系为:

1.当期值:环比;累计值:全年预算完成率、同比。

按板块分析:各板块的全年目标预算完成情况:本年累计;各板块贡献占比:月度趋势

2. 累计值:实际值、考核值;月度对比分析:与考核值对比

3. 月度趋势分析:体现受限和非受限的结构

4. 期末值:实际值、考核值;月度对比分析:与考核值对比

最后布局设计就如下图:

在PHP中怎么解决大量数据处理的问题

mysql_query函数查询的方式是查询出全部结果后缓存到内存中,这样就会出现超内存的现象,使用另外一个函数mysql_unbuffered_query可以解决这个问题,mysql_unbuffered_query不会缓存结果集,而是查询出来数据后立马对结果集进行操作,也就是便查询边返回,这样就不会出现超出内存的现象,但是使用mysql_unbuffered_query的是时候不能使用 mysql_num_rows() 和 mysql_data_seek()。并且向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。例如:

使用缓存结果集的代码:

function selecttest()

{

try {

$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456');

// 不使用缓存结果集方式

// $pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$sth = $pdo-prepare('select * from test');

$sth-execute();

echo '最初占用内存大小:' . memory_get_usage() . "\n";

$i = 0;

while ($result = $sth-fetch(PDO::FETCH_ASSOC)) {

$i += 1;

if ($i 10) {

break;

}

sleep(1);

print_r($result);

echo '占用内存大小:' . memory_get_usage() . "\n";

}

} catch (Exception $e) {

echo $e-getMessage();

}

}

执行时将会报超出内存的错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 204800000 bytes) in E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php on line 56

Call Stack:

0.0005 135392 1. {main}() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:0

0.0005 135568 2. test-selecttest() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:85

0.0050 142528 3. PDOStatement-execute() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:56

将上面代码中的$pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);一行的注释去掉后将不在缓存结果集,这时运行该函数的结果如下:

最初占用内存大小:144808

Array

(

[id] = 1

[a] = v

[b] = w

[c] = i

)

占用内存大小:145544

Array

(

[id] = 2

[a] = b

[b] = l

[c] = q

)

占用内存大小:145544

Array

(

[id] = 3

[a] = m

[b] = p

[c] = h

)

占用内存大小:145536

Array

(

[id] = 4

[a] = j

[b] = i

[c] = b

)

占用内存大小:145536

可以看到,这时返回一条数据内存占用非常的小,也就700多字节,这样就不会出现超出内存的错误了。


名称栏目:php数据大屏解决方案 php 大数据处理
文章起源:http://myzitong.com/article/hgejeg.html