Edeva公司于2009年成立于瑞典林雪平,專門為智慧城市開發(fā)功能強(qiáng)大的解決方案。它提供托管服務(wù)和完整系統(tǒng),包括軟硬件平臺。
作為動(dòng)態(tài)減速帶Actibump和智慧城市平臺EdevaLive的開發(fā)者,Edeva團(tuán)隊(duì)主要服務(wù)于市政、區(qū)域和全國道路管理部門、收費(fèi)站、環(huán)保機(jī)構(gòu)及執(zhí)法機(jī)構(gòu)。
該團(tuán)隊(duì)還解決其他許多問題:從獲取大量環(huán)境數(shù)據(jù)用于決策,到開發(fā)篩查量表以幫助執(zhí)法機(jī)構(gòu)評估車輛超載情況,不一而足。比如說,后者可以縮短控制每輛車所需的時(shí)間,加快交通檢查速度,并讓執(zhí)法機(jī)構(gòu)可以控制更多的車輛。
團(tuán)隊(duì)介紹
Edeva的團(tuán)隊(duì)是11人組成的頗有影響力的小團(tuán)隊(duì),負(fù)責(zé)研制硬件物聯(lián)網(wǎng)設(shè)備、分析時(shí)間序列數(shù)據(jù)以及讓客戶(有時(shí)甚至公眾)可以訪問這些數(shù)據(jù)等任務(wù)。
作為一名軟件架構(gòu)師,我負(fù)責(zé)構(gòu)建最佳解決方案,以接收、存儲、分析、顯示和共享客戶的事件數(shù)據(jù)。然后我們的團(tuán)隊(duì)齊心協(xié)力,創(chuàng)建切實(shí)有效、客戶真正想要的解決方案。
項(xiàng)目介紹
Edeva開發(fā)了一個(gè)名為Actibump的動(dòng)態(tài)減速帶和智慧城市平臺EdevaLive。Actibump自2010年以來一直在瑞典使用。超速行駛的車輛激活道路上的升降口,升降口會降低幾厘米,因而形成凹下的減速帶。Actibump為公共汽車和緊急車輛等公共交通工具提供了良好的可達(dá)性,同時(shí)保證行人及其他易受傷害的道路使用者的安全速度。它也是一種環(huán)保解決方案,有助于減少噪音和二氧化碳排放。
Actibump可以與EdevaLive系統(tǒng)相結(jié)合,為Edeva的客戶提供有價(jià)值的遠(yuǎn)程監(jiān)控服務(wù)和統(tǒng)計(jì)數(shù)據(jù)。
我們收集的大部分?jǐn)?shù)據(jù)都基于物聯(lián)網(wǎng)設(shè)備:
交通流量數(shù)據(jù):Actibump測量來車的速度,以決定是否需要激活減速帶。我們捕獲雷達(dá)數(shù)據(jù)等信息,并將事件發(fā)送到智慧城市平臺EdevaLive。數(shù)據(jù)將來車視為流量而不是單輛車,以創(chuàng)建盡可能順暢的交通流量。
車輛分類數(shù)據(jù)(動(dòng)態(tài)稱重):Actibump經(jīng)配置后可具有動(dòng)態(tài)稱重功能。這意味著減速帶的蓋子配備了非常靈敏的高速采樣量表。車輛通過減速帶時(shí),量表記下幾個(gè)重量測量值。這樣一來,它可以檢測車輛有多少個(gè)車軸,并對車輛類型進(jìn)行分類。同時(shí),它使用量表指紋為每個(gè)軸觸發(fā)一個(gè)事件,以便我們分析重量測量是否正確。
車輛分類數(shù)據(jù)(雷達(dá)):如果我們想在還沒有安裝Actibump 的地方對車輛進(jìn)行分類,可以引入對車輛類型進(jìn)行分類的雷達(dá)。路邊服務(wù)器控制雷達(dá),收集其數(shù)據(jù),并將數(shù)據(jù)推送到 EdevaLive。
單車和行人數(shù)據(jù):我們使用安裝在行人和自行車道上方的攝像頭。攝像頭可以檢測和統(tǒng)計(jì)雙向通過的行人和單車。我們將這些數(shù)據(jù)推送到EdevaLive進(jìn)行分析。
車牌數(shù)據(jù):我們可以使用攝像頭來檢測車輛車牌。這樣,我們可以控制柵門等設(shè)備自動(dòng)打開。它還可用于查看通過攝像頭的電動(dòng)車輛與汽油車輛或柴油車輛的數(shù)量,或確定某輛車的貨重是否超限。
陀螺儀數(shù)據(jù):我們提供的陀螺儀傳感器可以收集所有不同平面的加速度數(shù)據(jù)。該設(shè)備生成大量數(shù)據(jù),這些數(shù)據(jù)可以批量或作為數(shù)據(jù)流上傳到EdevaLive(如果車輛連接互聯(lián)網(wǎng))。比如說,該數(shù)據(jù)帶有GPS標(biāo)記,可用于計(jì)算加速度,向公交汽車司機(jī)表明工作條件狀況。該數(shù)據(jù)還可用于計(jì)算車輛的損耗及許多其他指標(biāo)。
環(huán)境數(shù)據(jù):智慧城市平臺中監(jiān)控環(huán)境數(shù)據(jù)非常重要。這就是為什么我們使用小型便攜式設(shè)備來測量空氣中出現(xiàn)的不同大小的顆粒。它還可以測量二氧化碳及其他氣體。此外,它可測量溫度和風(fēng)速等平常數(shù)據(jù)。所有這些數(shù)據(jù)都被推送到EdevaLive。
報(bào)警數(shù)據(jù):如果傳感器或其他部件出現(xiàn)故障,我們的物聯(lián)網(wǎng)設(shè)備和路邊服務(wù)器可以發(fā)送報(bào)警信息。所有這些數(shù)據(jù)都像常規(guī)的物聯(lián)網(wǎng)事件那樣進(jìn)入EdevaLive,但這些事件僅在內(nèi)部使用,以便我們在出現(xiàn)問題時(shí)能盡快做出反應(yīng)。
狀態(tài)數(shù)據(jù):如果報(bào)警數(shù)據(jù)檢測到異常,狀態(tài)數(shù)據(jù)只報(bào)告服務(wù)器或物聯(lián)網(wǎng)設(shè)備的狀態(tài)。這些設(shè)備將運(yùn)行自檢,并報(bào)告統(tǒng)計(jì)數(shù)據(jù),比如磁盤利用率、溫度和負(fù)載。這也僅供內(nèi)部使用,以發(fā)現(xiàn)趨勢,或出現(xiàn)任何問題時(shí)排除故障。比如說,將CPU負(fù)載與固件版本號或其他軟件版本關(guān)聯(lián)起來就非常有用。
管理數(shù)據(jù):SQL和時(shí)間序列數(shù)據(jù)在這方面真正發(fā)揮作用。假設(shè)我們添加了一個(gè)新設(shè)備,它有一個(gè)配置對象,該對象在Timescale的常規(guī)表中持久存在。該對象保留一些元數(shù)據(jù),比如添加到系統(tǒng)的日期或設(shè)備的顯示名稱。這樣,我們可以輕松地使用連接(joint)來獲取有關(guān)設(shè)備的元數(shù)據(jù),同時(shí)獲取即將發(fā)生的事件的時(shí)間序列數(shù)據(jù)。實(shí)現(xiàn)過程只需要處理一個(gè)數(shù)據(jù)庫連接,只需要運(yùn)行一個(gè)查詢。
選擇并使用TimescaleDB
幾年前,我們開始將數(shù)據(jù)存儲在MySQL中時(shí),就意識到需要時(shí)間序列數(shù)據(jù)庫。當(dāng)時(shí)我們改用了MongoDB,它對我們來說運(yùn)行良好,但需要大量的管理工作,且導(dǎo)入其他開發(fā)人員較困難。我研究了InfluxDB,但最終未考慮用它,因?yàn)樗橇硪粋€(gè)要學(xué)習(xí)的系統(tǒng),我們已從MongoDB中吸取了這個(gè)教訓(xùn)。
我尋找一種解決方案來填補(bǔ)以前系統(tǒng)無法填補(bǔ)的空白。這時(shí)候我找到了Timescale,發(fā)現(xiàn)了這款托管解決方案。我們是個(gè)小團(tuán)伙,但創(chuàng)建有重大影響的軟件,這意味著我們其實(shí)沒有時(shí)間投入大量精力來調(diào)整和管理所使用的每一個(gè)工具,但我們?nèi)韵M麚碛锌刂茩?quán)。
此外,由于TimescaleDB基本上是具有增強(qiáng)版時(shí)間序列功能的PostgreSQL,因此如果需要,導(dǎo)入新的開發(fā)人員要容易得多。有了Timescale,我們的開發(fā)人員立即知道如何使用該產(chǎn)品,因?yàn)樗麄冎写蠖鄶?shù)人已經(jīng)熟悉SQL。Edeva使用TimescaleDB作為我們智慧城市系統(tǒng)中的主數(shù)據(jù)庫。我們的客戶可以控制其物聯(lián)網(wǎng)設(shè)備(比如EdevaLive的Actibump),并且作為該系統(tǒng)的一部分,可以查看已捕獲的數(shù)據(jù),快速了解趨勢和歷史數(shù)據(jù)。我們提供許多圖以顯示不同時(shí)間跨度(比如日、周、月和年)的數(shù)據(jù)。為了快速呈現(xiàn)這些數(shù)據(jù),我們使用了持續(xù)聚合(Continuous Aggregation)。
當(dāng)前部署和未來計(jì)劃
對我們的工作影響最大的TimescaleDB功能之一是持續(xù)聚合。它使我們的儀表板從蝸牛般緩慢變成快如閃電。如果我們構(gòu)建功能以便數(shù)據(jù)可供客戶使用,總是先聚合以加快查詢速度,并減輕數(shù)據(jù)庫的負(fù)載。過去,運(yùn)行一些長期數(shù)據(jù)查詢需要幾分鐘,現(xiàn)在長期數(shù)據(jù)的幾乎所有查詢都不到1秒鐘即可完成。
比如說,隨著時(shí)間的推移,我們總是難以顯示85%的速度。想獲得準(zhǔn)確的百分位數(shù)據(jù),你必須基于原始數(shù)據(jù)進(jìn)行計(jì)算,而不是聚合數(shù)據(jù)。如果你在超表中有2億個(gè)事件,想要某個(gè)傳感器幾年以來的數(shù)據(jù),可能需要很長時(shí)間才能得出結(jié)果,可是用戶不想等那么久。
鑒于Timescale引入了percentile_agg和approx_percentile,我們實(shí)際上可以查詢持續(xù)聚合,并獲得相當(dāng)準(zhǔn)確的百分位值,無需查詢原始數(shù)據(jù)。
請注意,“vehicles”是一個(gè)超表,其中actibump_id是含有數(shù)億條記錄的動(dòng)態(tài)減速帶的ID。以下是我們構(gòu)建持續(xù)聚合的方式:
CREATE MATERIALIZED VIEW view1
WITH (timescaledb.continuous) AS
SELECT actibump_id,
timescaledb_experimental.time_bucket_ng(INTERVAL '1 month', time, 'UTC') AS bucket,
percentile_agg(vehicle_speed_initial) AS percentile_agg
FROM vehicles
GROUP BY actibump_id, bucket
這是為該圖獲取數(shù)據(jù)的查詢:
SELECT TIMESCALEDB_EXPERIMENTAL.TIME_BUCKET_NG(INTERVAL '1 month', bucket) AS date,
actibump_id,
APPROX_PERCENTILE(0.85, ROLLUP(PERCENTILE_AGG)) AS p85,
MAX(signpost_speed_max)
FROM vehicles_summary_1_month
WHERE actibump_id in ('16060022')
AND bucket >= '2021-01-30 23:00:00'
AND bucket <= '2022-04-08 21:59:59'
GROUP BY date, actibump_id
ORDER BY date ASC
這是該圖的示例:
目前,我們使用PHP和Yii2來部署TimescaleDB。 我們使用Qlik Sense連接到TimescaleDB以進(jìn)行業(yè)務(wù)分析。在Qlik Sense中,你可以使用PostgreSQL集成,輕松連接到TimescaleDB。特別方便的一點(diǎn)是能夠連接到長期數(shù)據(jù)的持續(xù)聚合,而不會因過多的原始數(shù)據(jù)而使系統(tǒng)過載。我們經(jīng)常使用Qlik Sense為稍后添加到EdevaLive的圖創(chuàng)建原型。
忠告和資源
我們的下一步是想出一個(gè)好方法,以減少存儲在TimescaleDB中的原始數(shù)據(jù)量。我們正在研究如何將其與數(shù)據(jù)湖集成。此外,我們很高興開始構(gòu)建更多的圖和地圖應(yīng)用程序。
如果你打算存儲時(shí)間序列數(shù)據(jù),建議考慮使用Timescale。用戶很容易上手,因?yàn)樗?ldquo;就是”SQL;同時(shí)可以獲得處理時(shí)間序列數(shù)據(jù)所需的重要功能。建議你關(guān)注下它,尤其是沖著持續(xù)聚合方面。
入手時(shí),要考慮整個(gè)生命周期。使用場景是否允許你使用壓縮等功能,還是說需要考慮如何在TimescaleDB的外面存儲長期數(shù)據(jù),以便一開始就確保成本合理?你總是可以一路上解決問題,但最好在上線之前為此制定好計(jì)劃。
原文標(biāo)題:How Edeva Uses Continuous Aggregations and IoT to Build Smarter Cities,作者:Ana Tavares和John Eskilsson