六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

TDengine在數(shù)字治理系統(tǒng)中處理軌跡數(shù)據(jù)的應(yīng)用

背景介紹:廣州市雅恒信息科技有限公司專注提供優(yōu)質(zhì)的互聯(lián)網(wǎng)整體解決方案,在數(shù)字治理系統(tǒng)開(kāi)發(fā)有著成熟豐富的經(jīng)驗(yàn)。數(shù)字治理系統(tǒng)是基于城鄉(xiāng)治理的概念,對(duì)治理過(guò)程進(jìn)行信息化的記錄和管理,并加以大數(shù)據(jù)分析、智能硬件監(jiān)測(cè)和無(wú)人機(jī)巡查輔助。城鄉(xiāng)治理是指基層政府對(duì)行政區(qū)域內(nèi)進(jìn)行網(wǎng)絡(luò)的劃分,并將每個(gè)網(wǎng)格責(zé)任到網(wǎng)格員,網(wǎng)格員通過(guò)開(kāi)展巡查活動(dòng),對(duì)發(fā)現(xiàn)的問(wèn)題進(jìn)行上報(bào)、交辦、處理、跟蹤的過(guò)程。

巧遇TDengine

2019年首次聽(tīng)說(shuō)TDengine Database,真正接觸是從收到一個(gè)直播的鏈接轉(zhuǎn)發(fā),陶建輝老師在極客時(shí)間直播,標(biāo)題這樣描述:35年碼齡老程序員給您講述TDengine的超高性能是如何實(shí)現(xiàn)的。直播現(xiàn)場(chǎng),陶老師大汗淋漓,大家都在說(shuō)沒(méi)開(kāi)空調(diào),主持人解釋,陶老師現(xiàn)在高燒,堅(jiān)持給大家講解。感性與理性。之后,深圳見(jiàn)面會(huì),老板時(shí)間挺忙,趕在最后一天去的,沒(méi)有見(jiàn)到陶老師,見(jiàn)到了我們的侯老師。一聊,相見(jiàn)恨晚。

TDengine在數(shù)字治理系統(tǒng)中處理軌跡數(shù)據(jù)的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

場(chǎng)景介紹

雅恒做了接近兩年的“基層數(shù)字網(wǎng)格管理系統(tǒng)”。這個(gè)管理系統(tǒng)能夠?qū)︽?zhèn)街進(jìn)行大小網(wǎng)格的劃分,以網(wǎng)格內(nèi)建筑和核心部件為基本信息點(diǎn),在網(wǎng)格內(nèi)開(kāi)展消防、禁毒、環(huán)衛(wèi)、兩違等巡查活動(dòng),并形成規(guī)范上傳、下達(dá)工作流程規(guī)范。但我們這段時(shí)間其實(shí)也在琢磨這個(gè)系統(tǒng)的架構(gòu)是不是已經(jīng)老了,該如何優(yōu)化呢?這時(shí)候正好通過(guò)TDengine了解到時(shí)序數(shù)據(jù)庫(kù)(Time-Series Database)的概念,應(yīng)用后雖然不能一步到位把系統(tǒng)做一個(gè)很大的提升,但產(chǎn)品不是應(yīng)該這樣一點(diǎn)點(diǎn)改進(jìn)嗎?

在我們的應(yīng)用場(chǎng)景中,網(wǎng)格員在使用app和小程序進(jìn)行巡查活動(dòng)時(shí),每隔30秒會(huì)檢查一次移動(dòng)距離,如果超過(guò)20米就會(huì)上傳一個(gè)坐標(biāo)到服務(wù)端。一個(gè)街道大約有100名網(wǎng)格員,每月有效巡查距離超過(guò)100公里,一年約1200000米;一個(gè)街道一年就會(huì)產(chǎn)生約6000000條坐標(biāo)記錄(武漢大約有一萬(wàn)七千名網(wǎng)格員)。我們有可能隨時(shí)翻閱三年前某條巡查線路。按原關(guān)系數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì),這就需要從坐標(biāo)記錄表里根據(jù)巡查線路id檢索出一個(gè)個(gè)的坐標(biāo)點(diǎn),然后重組成一條巡查線路。三年的記錄總量接近2000萬(wàn)條,此時(shí)關(guān)系型數(shù)據(jù)庫(kù)的查詢響應(yīng)應(yīng)急非常慢,必須要通過(guò)按照時(shí)間分庫(kù)分表來(lái)提高性能,但隨之而來(lái)的問(wèn)題就是遇到跨庫(kù)跨表查詢時(shí)間段處理的麻煩(想想就覺(jué)得累)。

我們基于TDengine Database的特性以及使用原則,把坐標(biāo)記錄數(shù)據(jù)遷移到這上面來(lái):

  1. 一個(gè)網(wǎng)格賬號(hào)一張坐標(biāo)記錄表,這個(gè)網(wǎng)格員巡查產(chǎn)生的坐標(biāo)記錄全都按時(shí)間順序記錄到這個(gè)表上來(lái);
  2. 巡查線路坐標(biāo)點(diǎn)的檢索按線路的巡查時(shí)間范圍,時(shí)序數(shù)據(jù)庫(kù)對(duì)時(shí)間的處理是天生的優(yōu)勢(shì),這樣也降低了跨庫(kù)的耦合;
  3. 我們還借助了微服務(wù)低耦合易擴(kuò)展的特性,獨(dú)立出坐標(biāo)讀寫模塊,以下是完整的系統(tǒng)架構(gòu),供參考,歡迎批評(píng)指正。
TDengine在數(shù)字治理系統(tǒng)中處理軌跡數(shù)據(jù)的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

用戶直接交互的是應(yīng)用層,包含:瀏覽器的Web應(yīng)用、微信小程序或者Android平臺(tái)的App。其中Web應(yīng)用還與GIS系統(tǒng)進(jìn)行交互獲取地圖瓦片和坐標(biāo)載入顯示等信息。支撐應(yīng)用層的是業(yè)務(wù)運(yùn)算后臺(tái)服務(wù),包含用戶管理、權(quán)限管理、問(wèn)題管理等業(yè)務(wù)運(yùn)算。底層存儲(chǔ)使用了MySQL+ TDengine的配合。業(yè)務(wù)運(yùn)算后臺(tái)還會(huì)與其他門戶數(shù)據(jù)中心的第三方服務(wù)進(jìn)行交互,實(shí)現(xiàn)整個(gè)數(shù)字治理系統(tǒng)的各項(xiàng)需求。

底層數(shù)據(jù)存儲(chǔ)上的思考是這樣的。業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)需要大量賬號(hào)信息管理、關(guān)聯(lián)查詢、業(yè)務(wù)從屬處理,是典型關(guān)系數(shù)據(jù)庫(kù)應(yīng)用場(chǎng)景,因此這部分?jǐn)?shù)據(jù)存入MySQL;巡查坐標(biāo)數(shù)據(jù)是前文提到的海量時(shí)序位置信息,涉及更多的是按時(shí)間讀取數(shù)據(jù),按照賬號(hào)計(jì)算軌跡等,是典型的時(shí)序結(jié)構(gòu)化數(shù)據(jù)儲(chǔ)存分析場(chǎng)景,非常適合存入TDengine。這里把位置數(shù)據(jù)從原來(lái)的MySQL中摘出來(lái)后,通過(guò)一個(gè)坐標(biāo)計(jì)算微服務(wù)來(lái)轉(zhuǎn)存、計(jì)算巡查坐標(biāo)數(shù)據(jù),實(shí)現(xiàn)了原有的業(yè)務(wù)運(yùn)算后臺(tái)與TDengine之間的交互,且不對(duì)原來(lái)的運(yùn)算后臺(tái)產(chǎn)生大量代碼改動(dòng),非常方便。

數(shù)據(jù)模型

遵循一臺(tái)設(shè)備一張表的設(shè)計(jì)思路。在我們系統(tǒng)中是一個(gè)用戶一張表,用于記錄該用戶的所有歷史軌跡信息。所有子表都基于一個(gè)名為“super”的超級(jí)表創(chuàng)建,將設(shè)備ID定義成一個(gè)tag,用于對(duì)表進(jìn)行區(qū)分。

快速開(kāi)發(fā)

封裝好API,直接用Spring Boot調(diào)用JDBC來(lái)與TDengine數(shù)據(jù)源交互即可。下面的示例中,使用Spring Boot+TDengine實(shí)時(shí)存儲(chǔ)GPS坐標(biāo),實(shí)現(xiàn)過(guò)程非常的簡(jiǎn)單。

第一步 在Linux上開(kāi)啟TDengine服務(wù);

第二步?創(chuàng)建一個(gè)的Spring Boot項(xiàng)目,在application.properties中配置TDengine的連接信息(ps:端口默認(rèn)為0,用戶名默認(rèn)為root,密碼默認(rèn)為taosdata);

server.port=8085
server.servlet.context-path=/api

#taos
taosdata.url=jdbc:TAOS://192.168.1.241:0/db?user=root&password=taosdata
taosdata.driverClassName=com.taosdata.jdbc.TSDBDriver

第三步 在pom.xml中配置相關(guān)依賴,下載jar包;

<!-- taos Start -->
<dependency>
  <groupId>com.taosdata.jdbc</groupId>
  <artifactId>taos-jdbcdriver</artifactId>
  <version>1.0.1</version>
</dependency>
<!-- taos END -->

第四步 建立config文件,對(duì)應(yīng)application.properties中的url和driverClassName;

@Component
@ConfigurationProperties(prefix = “taosdata”)
public class TaosdataConfig {
  private String url;
  private String driverClassName;
  public String getUrl() { 
    return url;
  }
  public void setUrl(String url) {
    this.url = url;
  }
  public String getDriverClassName() {
    return driverClassName;
  }
  public void setDriverClassName(String driverClassName) {
    this.driverClassName = driverClassName;
  }
}

第五步 實(shí)現(xiàn)相關(guān)業(yè)務(wù)邏輯(ps:與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)一樣,采用sql語(yǔ)法)。創(chuàng)建庫(kù),建表,插入,查詢等操作在Java中實(shí)現(xiàn)如下。

建庫(kù)、建表:
String sql1 = “create database if not exists coor”;
stmt.executeUpdate(sql1);
String sql2 = “use coor”;
stmt.executeUpdate(sql2);
String sql3 = “create table if not exists super (ts timestamp, lng double, lat double) tags (id nchar(32))”;
stmt.executeUpdate(sql3);
String sql4 = “create table if not exists “ + (“u” + userid) + “using super tags(‘” + userid + “’)”;
stmt.executeUpdate(sql4);

插入數(shù)據(jù):
String sql5 = insert into “ + (“u” + userid) + “ values(“ + now.getTime()+”,” + lng + “,” + lat + “)”;
stmt.executeUpdate(sql5);

查詢:
StringBuilder sql6 = new StringBuilder(“select * from u”)
  .append(userid)
  .append(“ where ts>=’”)
  .append(stime)
  .append(“’ and ts <= ‘”)
  .append(etime)
  .append(“’”);
ResultSet resSet = stmt.executeQuery(sql6.toString());
Timestamp ts = null;
while(resSet.next()) {
  ts = resSet.getTimestamp(“ts”);
  lng = resSet.getDouble(“l(fā)ng”);
  lat = resSet.getDouble(“l(fā)at”);
  //業(yè)務(wù)處理略去…
}

總結(jié)

雅恒通過(guò)將網(wǎng)格巡查位置數(shù)據(jù)從關(guān)系庫(kù)MySQL轉(zhuǎn)存入時(shí)序庫(kù)TDengine后,解決了大數(shù)據(jù)量、長(zhǎng)周期查詢時(shí)的性能和易用性問(wèn)題,避免了分庫(kù)分表維護(hù)的麻煩。通過(guò)微服務(wù)的方式把TDengine集成進(jìn)原有系統(tǒng),提供時(shí)序數(shù)據(jù)存儲(chǔ)和計(jì)算服務(wù),整體上對(duì)原有系統(tǒng)沖擊很小,遷移改造比較順利。數(shù)據(jù)壓縮率可能也是一個(gè)很有價(jià)值的考量目標(biāo)。后續(xù)也許會(huì)繼續(xù)查看TDengine自帶的流計(jì)算等功能,看是否能進(jìn)一步減輕業(yè)務(wù)層的計(jì)算壓力,提高計(jì)算資源利用率。

作者簡(jiǎn)介

黃勇,畢業(yè)于湖南工學(xué)院,從事Java開(kāi)發(fā)工作多年,目前是雅恒核心研發(fā)成員。曾主持廣東省政法委基層網(wǎng)格化管理系統(tǒng)的開(kāi)發(fā)工作,并深度參與過(guò)廣州市番禺區(qū)教育局教育信息素養(yǎng)提升平臺(tái)、海幢寺噪音監(jiān)測(cè)系統(tǒng)等系統(tǒng)工程的開(kāi)發(fā)工作。

原文首發(fā)于雅恒科技公眾號(hào),鏈接:https://mp.weixin.qq.com/s/qHQI9dRCc60NVdu3cJ-0kQ