• MongoDB 数据模型(5/5)三部曲三、套用设计模式


    文档模型设计之三:套用设计模式


    • 文档模型:无范式,无思维定式,充分发挥想象力。

    • 设计模式:实战过程屡试不爽的设计技巧,快速应用。

    • 举例:一个 loT 场景的分桶设计模式,可以帮助把存储空间降低10倍并且查询效率提升数十倍。

    • {
      	"_id": "20160101050000:CA2790",
      	"icao": "CA2790",
      	"callsign": "CA2790",
      	"ts": ISODate("2016-01-01T05:00:00.000+0000"),
      	"event": {
      		"a":31418,
      		"b":173,
      		"p":[115,-134],
      		"s":91,
      		"v":80
      	}
      }
      
    • 假设有 520亿条,10TB - 海量数据

      • 10 万架飞机

      • 1 年的数据

      • 每分钟一条

        • 分桶前 每分钟1条
          文档条数 52.6 B
          (100,000 * 365 * 24 * 60)
          索引大小 6364 GB
          (52.6 B * 130)
          _id index 1468 GB
          {deviceid: 1, ts: 1} 4895 GB
          文档平均大小 92 Bytes
          数据大小 4503 GB
          (52.6 B * 92)
    • 解决方案:分桶设计

    { # 每个文档存放一架飞机一小时的数据。
      	"_id": "20160101050000:CA2790",
      	"icao": "CA2790",
      	"callsign": "CA2790",
      	"ts": ISODate("2016-01-01T05:00:00.000+0000"),
      	"events": [
          {
            "a":21418,"b":319,"p":[14,-134],"s":191,
            "v":80,"t":ISODate("2016-01-01T05:00:00.000+0000")
          },
          {
          	"a":25563,"b":173,"p":[115,-124],"s":391,13    
            "v":80,"t":ISODate("2016-01-01T05:00:01.000+0000") # 60 events = 1小时数据
          },
      	]
      }	
    
    分桶后 每分钟1个 每小时1个文档
    文档条数 52.6 B
    (100,000 * 365 * 24 * 60)
    876M
    (100,000 * 365 * 24)
    索引大小 6364 GB
    (52.6 B * 130)
    106 GB
    _id index 1468 GB 24.5 GB
    {deviceid: 1, ts: 1} 4895 GB 81.6 GB
    文档平均大小 92 Bytes 758 Bytes
    数据大小 4503 GB
    (52.6 B * 92)
    618 GB
    • 模式小结:分桶

      场景 痛点 设计模式的方案及优点
      时序数据
      物联网
      智慧城市
      智慧交通
      数据点采集频繁,数据量太多。 利用文档内嵌数组,将一个时间段的数据聚合到一个文档里。
      大量减少文档条数。
      大量减少索引占用空间。
    • 一个好的设计模式可以显著地 提升数据读写的效率降低资源的需求

    • 更多MongoDB的设计模式:

      表现形式类 数据访问类 组织结构类
      列转行 子集 分桶
      文档版本 近似处理 预聚合
  • 相关阅读:
    逆元(费马小定理求法)
    CodeForces
    lower_bound and upper_bound
    HDU 4825 Xor Sum
    1030: [JSOI2007]文本生成器
    1070: [SCOI2007]修车
    agc 027 B
    P2664 树上游戏
    CF 314 E. Sereja and Squares
    4237: 稻草人
  • 原文地址:https://www.cnblogs.com/sweetXiaoma/p/14596060.html
Copyright © 2020-2023  润新知