摘要:需求項目有一個保存實時抓拍圖片的功能需要統(tǒng)計攝像頭下每個時間點比如一分鐘保存的圖片個數(shù)并通過線型圖顯示到頁面上這很類似股票的分時線圖的功能所以我參考了一些網(wǎng)上的文章采用來實現(xiàn)這個功能先交代一下項目里數(shù)據(jù)的一個情況攝像頭個數(shù)在個左右單個攝像頭
需求: 項目有一個保存實時抓拍圖片的功能,需要統(tǒng)計攝像頭下每個時間點(比如一分鐘)保存的圖片個數(shù),并通過線型圖顯示到頁面上.
這很類似股票的分時K線圖的功能.所以我參考了一些網(wǎng)上的文章,采用Redis來實現(xiàn)這個功能.
先交代一下項目里數(shù)據(jù)的一個情況:
攝像頭個數(shù)在150個左右,單個攝像頭每秒抓拍圖片數(shù)平均在5張左右,150個攝像頭一分鐘最大抓拍圖片量在200左右.
每天抓拍的圖片總數(shù)一般在60w-100w, 峰值不超過300w.
每張圖片的大小在8K左右.
需求分析:
可以顯示某個攝像頭下每分鐘的抓拍圖片個數(shù). (時間點:分鐘,數(shù)值:圖片個數(shù))
顯示最近一天的分時圖. (分時圖的區(qū)間:24小時,一天的時間點個數(shù)60*24=1440)
緩存最近一天內(nèi)的保存圖片信息,以最大300w條記錄算. (memory< 1K*3000000 約等于3GB, 實際情況不到2G)
接下來重點說一下這里的設(shè)計:
由于每秒中的圖片數(shù)量不大,不用太考慮讀寫的壓力問題,所以我每接收到一張圖,則存入數(shù)據(jù)庫,再寫入redis當(dāng)中.
存入redis的數(shù)據(jù)首先用到了redis中的自增操作, redis中分時數(shù)據(jù)的存儲格式為hash結(jié)構(gòu),key為count+ip,field為yyyy-MM-dd HH:mm的分鐘時間點,value則為圖片個數(shù).比如192.168.0.1這個ip的攝像頭每抓拍到一張圖,則redis 操作命令為 HINCRBY "count:192.168.0.1" "2018-08-10 10:30" 1 . 當(dāng)然,這里會做一個定時任務(wù),每分鐘都會初始化每個攝像頭當(dāng)前時間點抓拍圖片個數(shù)為0,操作指令為HSETNX "count:192.168.0.1" "2018-08-10 10:30" 0,防止查詢時找不到對應(yīng)時刻的數(shù)據(jù).由于hash是不支持直接傳入過期時間的,所以也需要在定時任務(wù)里刪除掉24小時之前的數(shù)據(jù):HDEL "count:192.168.0.1" "2018-08-09 10:30".
除了自增1操作外,還用到了zset結(jié)構(gòu),保存圖片信息數(shù)據(jù). 這里 zset的key為info:+ip,value為圖片信息的json數(shù)據(jù),如圖片的地址,特征id,id等,score則保存的時當(dāng)前距計算機(jī)元年的秒數(shù).之所以這樣設(shè)計是為了方便重新統(tǒng)計和排序.
前端顯示數(shù)據(jù),采用echart庫的Line,通過大量數(shù)據(jù)渲染線型圖.主要數(shù)據(jù)在兩個數(shù)組,x軸的時間點,y軸的圖片個數(shù).兩個數(shù)組,時間點和個數(shù)一一對應(yīng).這也是第2步中要做定時任務(wù)初始化的原因.
初次獲取攝像頭的時分圖統(tǒng)計的時候,首先會讀取hash結(jié)構(gòu)中對應(yīng)key的數(shù)據(jù),里面存儲了最近24小時的統(tǒng)計數(shù)據(jù),通過new一個TreeMap可以對時間進(jìn)行排序,然后mao的key和value就是x,y軸所需的兩個數(shù)組.獲取完成后,每分鐘去輪詢一次查詢當(dāng)前攝像頭,上一分鐘的數(shù)據(jù),這樣能保證數(shù)據(jù)和時間點一致.
如果需要獲取最近抓拍的圖片地址信息等,則可以通過zset結(jié)構(gòu)里的ZRANGEBYSCORE命令查詢所需時間段的圖片信息.也可以重新統(tǒng)計每個時間點的圖片個數(shù).同時這里也要在第2步的定時任務(wù)里做一個ZREMRANGEBYSCORE操作移除24小時前的數(shù)據(jù).
到這里整個設(shè)計思路就展示差不多就基本完成了.當(dāng)然這不是全部,還有些細(xì)節(jié),比如定時任務(wù)是否正常執(zhí)行,數(shù)據(jù)持久化,服務(wù)down掉了怎么處理等.
有時間把一些設(shè)計思路的代碼寫出來.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76805.html
摘要:作者重慶森林鏈接來源??途W(wǎng)整個三月份通過牛客網(wǎng)和網(wǎng)友分享的經(jīng)驗學(xué)到了很多東西,現(xiàn)在反饋一下我的面試經(jīng)歷,希望對同學(xué)們有幫助。個人情況大三本方向渣碩,經(jīng)過實驗室學(xué)長內(nèi)推,于三月底完成面試。校招是實力和運氣的結(jié)合,缺一不可。 歡迎關(guān)注我的微信公眾號:Java面試通關(guān)手冊(堅持原創(chuàng),分享美文,分享各種Java學(xué)習(xí)資源,面試題,以及企業(yè)級Java實戰(zhàn)項目回復(fù)關(guān)鍵字免費領(lǐng)?。簊howImg(h...
摘要:微軟響應(yīng)大眾創(chuàng)業(yè),萬眾創(chuàng)新號召,從年起與中國各級地方政府及本地運營合作伙伴攜手,共同推出了微軟云暨移動技術(shù)孵化計劃。年月,由上海市徐匯區(qū)人民政府上海儀電集團(tuán)有限公司和微軟中國有限公司聯(lián)合創(chuàng)辦的云暨移動技術(shù)孵化計劃云賽空間創(chuàng)新孵化器正式啟動?! ?017年12月14日,上?!缮虾J行靺R區(qū)人民政府、上海儀電(集團(tuán))有限公司和微軟(中國)有限公司聯(lián)合創(chuàng)辦的云暨移動技術(shù)孵化計劃——云賽空間創(chuàng)新孵...
本文是公眾號讀者jianfeng投稿的面試經(jīng)驗恭喜該同學(xué)成功轉(zhuǎn)型目錄:毅然轉(zhuǎn)型,沒頭蒼蠅制定目標(biāo),系統(tǒng)學(xué)習(xí)面試經(jīng)歷毅然轉(zhuǎn)崗,沒頭蒼蠅首先,介紹一下我的背景。本人坐標(biāo)廣州,2016年畢業(yè)于一個普通二本大學(xué),曾經(jīng)在某機(jī)構(gòu)培訓(xùn)過Android。2018年初的時候已經(jīng)在兩家小公司工作干了兩年的android開發(fā),然后會一些Tomcat、Servlet之類的技術(shù),當(dāng)時的年薪大概也就15萬這樣子。由于個人發(fā)展...
閱讀 1840·2023-04-25 15:51
閱讀 2521·2021-10-13 09:40
閱讀 2159·2021-09-23 11:22
閱讀 3262·2019-08-30 14:16
閱讀 2682·2019-08-26 13:35
閱讀 1876·2019-08-26 13:31
閱讀 896·2019-08-26 11:39
閱讀 2761·2019-08-26 10:33