真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MongoDB開發(fā)系中什么是數(shù)據(jù)集設(shè)計分桶范式

今天就跟大家聊聊有關(guān)MongoDB開發(fā)系中什么是數(shù)據(jù)集設(shè)計分桶范式,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)是少有的成都做網(wǎng)站、網(wǎng)站制作、營銷型企業(yè)網(wǎng)站、微信小程序定制開發(fā)、手機(jī)APP,開發(fā)、制作、設(shè)計、外鏈、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,自2013年起,堅持透明化,價格低,無套路經(jīng)營理念。讓網(wǎng)頁驚喜每一位訪客多年來深受用戶好評

數(shù)據(jù)集設(shè)計模式,MongoDB在官方文檔https://docs.mongodb.com/ecosystem/ 中的use cases部分提供了詳細(xì)的參考內(nèi)容。

分桶模式是MongoDB數(shù)據(jù)集設(shè)計的一種范式。

分桶buckets

分桶設(shè)計原則

所謂分桶優(yōu)化,就是與其對每一條數(shù)據(jù)創(chuàng)建一個文檔,我們可以把某一個時間段內(nèi)的測量數(shù)據(jù)聚合到一起放到一個文檔內(nèi),利用MongoDB提供的內(nèi)嵌式數(shù)組或子文檔特性

我們知道許多傳感器數(shù)據(jù)都是時間序列數(shù)據(jù)。例如:風(fēng)傳感器,潮汐監(jiān)測以及位置追蹤等采集數(shù)據(jù)的無非這種類型: Timestamp,采集器名稱/ID,采集值。對于時序類型的數(shù)據(jù),我們可以采用一種叫做時間分桶的優(yōu)化策略。

時間序列數(shù)據(jù)

簡單的說 時間序列就是各時間點(diǎn)上形成的數(shù)值序列,時間序列分析就是通過觀察歷史數(shù)據(jù)預(yù)測未來的值。采用分桶設(shè)計寫入的數(shù)據(jù)集,元素更多的是采用時間作為排序元素,依次寫入和讀取。

官方有一篇翻譯文章,專門敘述 分桶設(shè)計模式

使用場景描述

基礎(chǔ)數(shù)據(jù)集如下

 {

  sensor_id: 12345,

  timestamp: ISODate("2019-01-31T10:00:00.000Z"),

  temperature: 40

}

{

  sensor_id: 12345,

  timestamp: ISODate("2019-01-31T10:01:00.000Z"),

  temperature: 40

}

{

  sensor_id: 12345,

  timestamp: ISODate("2019-01-31T10:02:00.000Z"),

  temperature: 41

}

改進(jìn)后的文檔集如下

 {

    sensor_id: 12345,

    start_date: ISODate("2019-01-31T10:00:00.000Z"),

    end_date: ISODate("2019-01-31T10:59:59.000Z"),

    measurements: [

      {

      timestamp: ISODate("2019-01-31T10:00:00.000Z"),

      temperature: 40

      },

      {

      timestamp: ISODate("2019-01-31T10:01:00.000Z"),

    temperature: 40

      },
      …

      {

      timestamp: ISODate("2019-01-31T10:42:00.000Z"),

      temperature: 42

     }

   ],
  transaction_count: 42,
  sum_temperature: 2413
}

我們在程序?qū)懭胛臋n時,可以做一些簡單的計算和整理,按時間分段,根據(jù)業(yè)務(wù)需要,將一個時間斷內(nèi)的大量文檔合并,避免數(shù)據(jù)使用時的隨機(jī)聚合和查詢。這樣的時間段,可以理解為桶。

在處理時間序列數(shù)據(jù)時,知道2018年7月13日加利福尼亞州康寧市下午2:00至3:00的平均溫度通常比知道下午2:03那一時刻的溫度更有意義也更重要。通過用桶組織數(shù)據(jù)并進(jìn)行預(yù)聚合,我們可以更輕松地提供這些信息。

官方有一篇關(guān)于Iot使用場景的推薦文章 https://www.mongodb.com/customers/bosch,可以作為參考。

評論設(shè)計模式中的分桶

https://docs.mongodb.com/ecosystem/use-cases/storing-comments/ Hybrid Schema Design節(jié)點(diǎn)下說明了評論中的分桶操作場景。

首先我們看數(shù)據(jù)集模式

    _id: ObjectId(...),
   discussion_id: ObjectId(...),
   bucket: 1,
   count: 42,
   comments: [ {
       slug: '34db',
       posted: ISODateTime(...),
       author: { id: ObjectId(...), name: 'Rick' },
       text: 'This is so bogus ... ' },
   ... ]
}

我在數(shù)據(jù)集設(shè)計的文章中提到分桶模式的設(shè)計場景,主要用于時間序列的數(shù)據(jù)預(yù)處理和分塊存儲。時間序列也就是按照時間的先后排序,依次寫入。分塊的標(biāo)準(zhǔn)可以是時間,比如一天,一個小時,或者是評論數(shù)目。

Also, 100 comments is a soft limit for the number of comments per bucket. This value is arbitrary: choose a value that will prevent the maximum document size from growing beyond the 16MB BSON documentsize limit,

以上總體含義是說每個桶內(nèi)的元素個數(shù)不是固定的,是應(yīng)用開發(fā)時,根據(jù)實(shí)際情況評估后的一個度量。但是需要考慮MongoDB本身每個文檔最多16M的限制。

對于應(yīng)用程序來說,這樣的設(shè)計模式在寫入操作是需要做一些簡單的邏輯,來確定寫入哪個桶,以及簡單計算,如下

if bucket['count'] > 100:
   db.discussion.update(
       { 'discussion_id: discussion['_id'],
         'num_buckets': discussion['num_buckets'] },
       { '$inc': { 'num_buckets': 1 } } )

借助2019年MongoDB中國用戶大會的一張PPT更加清晰的認(rèn)識下分桶范式

MongoDB開發(fā)系中什么是數(shù)據(jù)集設(shè)計分桶范式

buckets.png

文章中的觀點(diǎn)有不嚴(yán)謹(jǐn)之處,歡迎評論溝通。邊學(xué)習(xí),邊實(shí)踐,邊參考,邊改進(jìn),在問題中成長。

看完上述內(nèi)容,你們對MongoDB開發(fā)系中什么是數(shù)據(jù)集設(shè)計分桶范式有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


當(dāng)前文章:MongoDB開發(fā)系中什么是數(shù)據(jù)集設(shè)計分桶范式
網(wǎng)頁路徑:http://weahome.cn/article/pecehj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部