国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁 > 技術(shù) > 數(shù)據(jù)庫

MongoDB5.0 新特性“時序”解析:集合性能 VS IOT 場景設(shè)計(jì)

數(shù)據(jù)庫 2022-12-07 20:14:29

一、解析 MongoDB 新特性“時序”

MongoDB 時序集合是 MongoDB 5.0 新推出的功能,他能快速將段時間內(nèi)的數(shù)據(jù)寫入磁盤,并且提供快速時序檢索的集合。

與普通集合相比,時序集合在數(shù)據(jù)插入的過程中,自動將數(shù)據(jù)按照時間維度組織成最優(yōu)的存儲格式,也為后面應(yīng)用程序?qū)r序數(shù)據(jù)提高了查詢效率。

MongoDB 傳統(tǒng)時序模式:

假設(shè)我們有一個傳感器每分鐘測量溫度并將其保存到數(shù)據(jù)庫中,我們需要寫入數(shù)據(jù)庫中的數(shù)據(jù)流:


{_id: ObjectId(), deviceid: 1, date: ISODate ("2019-11-10"), samples : [{ temperature: 10, time: 1573833152},]},{_id: ObjectId(), deviceid: 1, date: ISODate ("2019-11-10"), samples : [[ temperature: 15, time: 1573833153},]},{_id: ObjectId(), deviceid: 1, date: ISODate ("2019-11-10"), samples : [[ temperature: 14, time: 1573833154},]},{_id: ObjectId(), deviceid: 1, date: TSODate("2019-11-10"), samples : [[ temperature: 20, time: 1573833155},]}

桶模式設(shè)計(jì)數(shù)據(jù)模型:

{

  _id: objectId(),

  deviceid: 1,

  date: ISODate ( "2019-11-10") ,

  first: 1573833152,

  last: 1573833155,

  samples : [{ temperature: 10, time: 1573833152},{ temperature: 15, time : 1573833153},{ temperature: 14, time: 1573833154),{ temperature: 20, time : 1573833155}

  ]}

字段解釋:


id —文檔的ID,這個ID具備唯一性

deviceld —查詢的設(shè)備ID

date—采樣日期;我們可以將其存儲在此處以簡化聚合

first—存儲桶中讀取的最舊數(shù)據(jù)的時間戳

last—存儲桶中讀取的最新數(shù)據(jù)的時間戳

samples—數(shù)據(jù)容器

用例中桶模式的優(yōu)勢:

節(jié)省數(shù)據(jù)和索引的大小

簡化數(shù)據(jù)結(jié)構(gòu)

可以將需要采集的數(shù)據(jù)按照時間維度集中在一起,方便快速范圍檢索

提升數(shù)據(jù)寫入速度

二、如何在 MongoDB 種使用時序

顯示指定創(chuàng)建的集合為時序集合

db.createcollection ("weather",

{  timeseries: {timeField: "timestamp",metaField: "metadata",granularity: "hours"

  }

}

字段含義介紹:


timeField 是時間參數(shù),必須為 BSON data。

metaField 影響維度基數(shù),好的 metaField 應(yīng)該選擇低基數(shù)的,有選擇性的指標(biāo),高基數(shù)必然帶來性能的下降

granularity 是聚合粒度(可選)參數(shù),數(shù)據(jù)庫會將一個時間段的數(shù)據(jù)聚合存放,這個參數(shù)影響性能,不影響功能

expireAfterSeconds 影響數(shù)據(jù)的過期,是默認(rèn)通過每60s一次的檢測實(shí)現(xiàn)的。過期時間可配置

CRUD 操作

增:單條插入或批量插入集合的方式(跟傳統(tǒng)的 collection 沒有區(qū)別)

刪(略)

改(略)

查:

計(jì)算時序集合時段平均值(聚合查詢):


db.weather.aggregate([

  {project: {      date: {          $dateToParts: { date: "$timestamp" }

      },      temp: 1

  },

  {$group: {       _id: {         date: {

             year : "$date. year",             month: "$date.month",

             day : " $date.day"  }          avgTmp: { $avg: "stemp"}

      }

])

注意點(diǎn):

時序集合底層存儲依然是 WiredTiger;

沒有為時序查詢定制太多新的語法,各種聚合依然需要通過 aggregate 進(jìn)行;

時序集合已經(jīng)按照常用的查詢模式,對數(shù)據(jù)進(jìn)行了存儲模型上的優(yōu)化。在索引上如果有自己的針對 metafield 的過濾需求,可以正常創(chuàng)建二級索引;

MongoDB時序集合在更新和刪除中需要添加指定條件。

在當(dāng)前版本里,時序集合不支持分片(6.0支持分片)。

三、MongoDB 時序集合性能

寫入性能(4C 8G 128G ssd)



讀寫混合壓測性能:



磁盤占用:

MongoDB 對數(shù)據(jù)的壓縮支持 snappy、zstd 和 zlib 算法,在以往線上真實(shí)的數(shù)據(jù)空間大小與真實(shí)磁盤空間消耗進(jìn)行對比,可以得出以下結(jié)論:


Hbase 默認(rèn)采用的是 snappy 算法,MongoDB 時序集合默認(rèn)采用 zstd 壓縮算法,所以相同數(shù)據(jù)量,MongoDB 磁盤占用更低。


MongoDB時序集合使用限制:

客戶端加密

ChangeStream

Relndex 重建索引

Tiggers

更新和刪除限制

四、MongoDB時序 IOT 場景設(shè)計(jì)

場景需求:

數(shù)據(jù)質(zhì)量,實(shí)時消費(fèi) kafka 數(shù)據(jù),并經(jīng)過流式計(jì)算后,需要對數(shù)據(jù)進(jìn)行展示,如流程圖所示:


時序集合

讀寫分離

ChangeStream 分流查詢



過期數(shù)據(jù)清理:

可以采用時序集合原生態(tài)的TTL索引進(jìn)行自動過期。

可以通過新舊集合替換的方式,對舊集合直接刪除的方式。

作者:王頂


TAg

加載中~

本網(wǎng)站LOGO受版權(quán)及商標(biāo)保護(hù),版權(quán)登記號:國作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴(yán)禁使用。
Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請注明來源,商業(yè)媒體及紙媒請先聯(lián)系:aishangyiwan@126.com

工信部備案號:湘ICP備19012813號-5