php數(shù)據(jù)大屏解決方案 php 大數(shù)據(jù)處理

PHP數(shù)據(jù)刷屏顯示-如何像機(jī)場(chǎng)大屏幕顯示航班信息一樣顯示數(shù)據(jù)庫中的數(shù)據(jù)

我的思路是:

創(chuàng)新互聯(lián)公司長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為瀘州企業(yè)提供專業(yè)的網(wǎng)站制作、網(wǎng)站建設(shè),瀘州網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

數(shù)據(jù)庫中新建一個(gè)表

is_showUpdate

字段:id、is_update

記錄 :id=1;is_update = false;

當(dāng)你的程序要修改顯示信息的時(shí)候(也就是展示數(shù)據(jù)),信息修改完畢將is_showUpdate表的記錄標(biāo)記為true

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

展示頁面通過js定時(shí)器通過ajax每五秒調(diào)取下你的接口,接口只是查詢is_showUpdate 表的id為1的記錄 is_update 是否為true;如果該字段為true,則此接口將id=1的記錄的is_update修改為false,然后給前臺(tái)頁面反水?dāng)?shù)據(jù),刷新頁面;

php采集大數(shù)據(jù)的方案

1、建議你讀寫數(shù)據(jù)和下載圖片分開,各用不同的進(jìn)程完成。

比如說,取數(shù)據(jù)用get-data.php,下載圖片用get-image.php。

2、多進(jìn)程的話,php可以簡(jiǎn)單的用pcntl_fork()。這樣可以并發(fā)多個(gè)子進(jìn)程。

但是我不建議你用fork,我建議你安裝一個(gè)gearman worker。這樣你要并發(fā)幾個(gè),就啟幾個(gè)worker,寫代碼簡(jiǎn)單,根本不用在代碼里考慮thread啊,process等等。

3、綜上,解決方案這樣:

(1)安裝gearman worker。

(2)寫一個(gè)get-data.php,在crontab里設(shè)置它每5分鐘執(zhí)行一次,只負(fù)責(zé)讀數(shù)據(jù),然后把讀回來的數(shù)據(jù)一條一條的扔到 gearman worker的隊(duì)列里;

然后再寫一個(gè)處理數(shù)據(jù)的腳本作為worker,例如叫process-data.php,這個(gè)腳本常駐內(nèi)存。它作為worker從geraman 隊(duì)列里讀出一條一條的數(shù)據(jù),然后跟你的數(shù)據(jù)庫老數(shù)據(jù)比較,進(jìn)行你的業(yè)務(wù)邏輯。如果你要10個(gè)并發(fā),那就啟動(dòng)10個(gè)process-data.php好了。處理完后,如果圖片地址有變動(dòng)需要下載圖片,就把圖片地址扔到 gearman worker的另一個(gè)隊(duì)列里。

(3)再寫一個(gè)download-data.php,作為下載圖片的worker,同樣,你啟動(dòng)10個(gè)20個(gè)并發(fā)隨便你。這個(gè)進(jìn)程也常駐內(nèi)存運(yùn)行,從gearman worker的圖片數(shù)據(jù)隊(duì)列里取數(shù)據(jù)出來,下載圖片

4、常駐進(jìn)程的話,就是在代碼里寫個(gè)while(true)死循環(huán),讓它一直運(yùn)行好了。如果怕內(nèi)存泄露啥的,你可以每循環(huán)10萬次退出一下。然后在crontab里設(shè)置,每分鐘檢查一下進(jìn)程有沒有啟動(dòng),比如說這樣啟動(dòng)3個(gè)process-data worker進(jìn)程:

* * * * * 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'

不知道你明白了沒有

可以提供一下大屏幕實(shí)時(shí)數(shù)據(jù)可視化解決方案嘛?

我先講一下大屏的應(yīng)用場(chǎng)景,再來解答題主的問題。

大屏的應(yīng)用場(chǎng)景主要有兩方面:

1.企業(yè)能力展示---面對(duì)外部客戶,展現(xiàn)企業(yè)的能力,做參觀用。

2.業(yè)務(wù)能力展現(xiàn),領(lǐng)導(dǎo)核心關(guān)注的數(shù)據(jù)。

這其中有些數(shù)據(jù)展現(xiàn)是實(shí)時(shí),比如雙十一大屏,有些是非實(shí)時(shí)的,看歷史數(shù)據(jù)的。

對(duì)于題主的問題呢,插件可能沒辦法支持到,我們一般都是以插件作為補(bǔ)充,像視頻、Echarts等,客戶可以按自己的需要集成一些外部信息。

后臺(tái)的頻繁請(qǐng)求對(duì)運(yùn)算速度有很高的要求,我們會(huì)用這幾個(gè)技術(shù)去解決,其中也包括一些我們自主研發(fā)的技術(shù),在數(shù)據(jù)處理效率方面,我們還是很有自信的。

中間結(jié)果集緩存技術(shù)

對(duì)GQuery執(zhí)行的最終結(jié)果進(jìn)行永久緩存,能夠節(jié)省緩存結(jié)果集所占用的內(nèi)存空間,同時(shí)也能大大提升報(bào)告的打開速度,

全局字典技術(shù)

通過數(shù)值型數(shù)據(jù)來映射字符串,大大減少了對(duì)內(nèi)存占用的需求,可以提高數(shù)據(jù)處理效率。

壓縮結(jié)果數(shù)據(jù)

MPP數(shù)據(jù)集市在數(shù)據(jù)節(jié)點(diǎn)(Map節(jié)點(diǎn))可提前進(jìn)行局部的Reduce計(jì)算,即Local Reduce,壓縮了傳輸?shù)慕Y(jié)果數(shù)據(jù)大小,使存儲(chǔ)和內(nèi)存空間的占用降低大概80%多,這樣就提高了計(jì)算速度。

分布式元數(shù)據(jù)存儲(chǔ)

優(yōu)化MPP集市云文件Meta信息的存儲(chǔ)方式,在Name節(jié)點(diǎn)拆分存儲(chǔ)naming.meta,從而使云文件可以進(jìn)行部分的備份和遷移,可以提升系統(tǒng)的可靠性。

大屏上的可視化區(qū)域劃分是根據(jù)具體的業(yè)務(wù)指標(biāo)來的。

我舉個(gè)例子:

我們有個(gè)客戶大屏想展示的結(jié)果是 從盈利能力、資金管理、資產(chǎn)管理的關(guān)鍵財(cái)務(wù)指標(biāo)反映xx所現(xiàn)階段發(fā)展規(guī)模、經(jīng)營績(jī)效,以及當(dāng)年考核目標(biāo)值的完成情況。

你就能從中拆分出涉及的指標(biāo)有:

主營業(yè)務(wù)收入、主營業(yè)務(wù)成本、利潤總額

EVA率、凈資產(chǎn)收益率

現(xiàn)金及銀行存款、受限現(xiàn)金及銀行存款、非受限現(xiàn)金及銀行存款

資產(chǎn)負(fù)債率

然后你就能知道這些分析應(yīng)該用什么樣的分析方法、適合的圖表、分析的維度,繼續(xù)接著上面的例子,一一對(duì)應(yīng)的關(guān)系為:

1.當(dāng)期值:環(huán)比;累計(jì)值:全年預(yù)算完成率、同比。

按板塊分析:各板塊的全年目標(biāo)預(yù)算完成情況:本年累計(jì);各板塊貢獻(xiàn)占比:月度趨勢(shì)

2. 累計(jì)值:實(shí)際值、考核值;月度對(duì)比分析:與考核值對(duì)比

3. 月度趨勢(shì)分析:體現(xiàn)受限和非受限的結(jié)構(gòu)

4. 期末值:實(shí)際值、考核值;月度對(duì)比分析:與考核值對(duì)比

最后布局設(shè)計(jì)就如下圖:

在PHP中怎么解決大量數(shù)據(jù)處理的問題

mysql_query函數(shù)查詢的方式是查詢出全部結(jié)果后緩存到內(nèi)存中,這樣就會(huì)出現(xiàn)超內(nèi)存的現(xiàn)象,使用另外一個(gè)函數(shù)mysql_unbuffered_query可以解決這個(gè)問題,mysql_unbuffered_query不會(huì)緩存結(jié)果集,而是查詢出來數(shù)據(jù)后立馬對(duì)結(jié)果集進(jìn)行操作,也就是便查詢邊返回,這樣就不會(huì)出現(xiàn)超出內(nèi)存的現(xiàn)象,但是使用mysql_unbuffered_query的是時(shí)候不能使用 mysql_num_rows() 和 mysql_data_seek()。并且向 MySQL 發(fā)送一條新的 SQL 查詢之前,必須提取掉所有未緩存的 SQL 查詢所產(chǎn)生的結(jié)果行。例如:

使用緩存結(jié)果集的代碼:

function selecttest()

{

try {

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

// 不使用緩存結(jié)果集方式

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

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

$sth-execute();

echo '最初占用內(nèi)存大?。? . 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 '占用內(nèi)存大?。? . memory_get_usage() . "\n";

}

} catch (Exception $e) {

echo $e-getMessage();

}

}

執(zhí)行時(shí)將會(huì)報(bào)超出內(nèi)存的錯(cuò)誤:

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);一行的注釋去掉后將不在緩存結(jié)果集,這時(shí)運(yùn)行該函數(shù)的結(jié)果如下:

最初占用內(nèi)存大?。?44808

Array

(

[id] = 1

[a] = v

[b] = w

[c] = i

)

占用內(nèi)存大?。?45544

Array

(

[id] = 2

[a] = b

[b] = l

[c] = q

)

占用內(nèi)存大?。?45544

Array

(

[id] = 3

[a] = m

[b] = p

[c] = h

)

占用內(nèi)存大?。?45536

Array

(

[id] = 4

[a] = j

[b] = i

[c] = b

)

占用內(nèi)存大?。?45536

可以看到,這時(shí)返回一條數(shù)據(jù)內(nèi)存占用非常的小,也就700多字節(jié),這樣就不會(huì)出現(xiàn)超出內(nèi)存的錯(cuò)誤了。

分享文章:php數(shù)據(jù)大屏解決方案 php 大數(shù)據(jù)處理
文章URL:http://muchs.cn/article46/hgejeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站企業(yè)建站、網(wǎng)站內(nèi)鏈、云服務(wù)器、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司