小编Fla*_*vio的帖子

PostgreSQL - 设计数据库以避免频繁更新大型数据集

我们正在尝试使用这些数字和查询要求来优化数据库的性能:

  1. 200-400k 网段由唯一ID标识
  2. 每个网段都有一个状态,其动态属性数量有限(即平均速度)。动态属性的单个状态可以存储在 8 个字节中
  3. 段状态每 3 分钟改变一次,H24,7/7
  4. 是否可以查询特定日期范围内的一组段(有时是所有段)的状态或仅查询实际情况。
  5. 可以请求空间查询以查找特定日期(通常是“现在”)“我周围”的所有段

有了这些必要条件,我们就得出了这个解决方案(有一个很大的缺点,解释如下)。

[A] TABLE main_segments_history( 
      id_segment integer NOT NULL,
      day date NOT NULL,    
      day_slices bigint[],
      CONSTRAINT main_segments_history_pk PRIMARY KEY (id_segment,day)
)

[B] TABLE current_segment_release_state(
      id_segment integer NOT NULL,
      release_date timestamptz,
      ... all other attributes ...
      CONSTRAINT currsegm_release_state_pk PRIMARY KEY (id_segment,release_date)
)
Run Code Online (Sandbox Code Playgroud)

解释[A]表:

  1. 它在字段“day”上使用 partition_manager ( pg_partman)进行分区。每个分区是一个月
  2. day_slices 数组是一个 480 个元素的一维数组,表示全天每个 3 分钟切片的粒度

解释[B]表:

  1. 它只是每个段的当前发布状态

有一个后端进程详细说明了网络。
它每 3 分钟插入或更新每个段的状态。
换句话说,此过程将在一天开始时插入新行,并将每 3 分钟更新一次内部数组。

该解决方案的优点 …

postgresql performance database-design

6
推荐指数
1
解决办法
1287
查看次数

标签 统计

database-design ×1

performance ×1

postgresql ×1