postgresql分妺_PostgreSql数据库分表
1、背景
在项目组件的开发中,统计模块使用的表数据量较大,影响查询性能,需要进行分表处理。本文将介绍PostgreSql数据库表分区的策略以及其在巡查考评组件开发中的应用。
2、术语解释主表:该表是创建子表的模板,它是一个正常的普通表,但是正常情况下它并不存储任何数据。
子表/分表:这些表继承并属于一个主表,子表中存储所有的数据。
3、问题分析
3.1 PostgreSql如何分表
数据库表分区把一个大的物理表分成若干个小的物理表,并使得这些小物理表在逻辑上可以被当成一张表来使用。那么如何使用PostgreSql来实现这个功能呢?创建主表
2. 创建多个分表。每个分区表必须继承自主表,并且正常情况下都不要为这些分区表添加任何新的列
可以看到,这里我们为tb_patrol_detail_stat创建了一个2018年12月的子表。
3. 为分区表添加限制。这些限制决定了该表所能允许保存的数据集范围。这里必须保证各个分区表之间的限制不能有重叠
为子表tb_patrol_detail_stat_201812添加约束,限制该字表中只能存储statistic_time在2018年12月份的数据。这里需要注意的是添加约束时,约束的字段类型应与主表的分表字段的类型一致,否则会导致全表扫描。
4. 定义一个trigger或者rule把对主表的数据插入操作重定向到对应的分区表
添加了一个名为insert_tb_patrol_detail_stat_201812的规则,当向主表添加statistic_time在2018年12月份的数据时重定向到子表tb_patrol_detail_stat_201812中。
3.2 在应用组件中分表
上一节介绍了PostgreSql是如何实现分表的,本节将介绍如何在巡查考评组件中应用分表。
在巡查考评组件中,对数据量较大的表进行按月分表。分表策略如下:在系统启动时进行一次分表
每月1号凌晨1点进行一次分表
每次分表的逻辑如下图所示
注意:“最后一次分表时间”表示最晚的子表月份。
正常情况下,每次分表后最后分表时间都会晚于当前时间5个月,也就是会有5个月的富余子表。如果出现当前时间晚于上次分表时间,说明系统有一段时间没有进行分表了,需要把缺失的子表补上去。
4. 获取最后一次分表时间的方法
根据主表名称获取到子表插入规则,获取最晚的规则名的后缀即为最后一次分表时
postgresql分妺_PostgreSql数据库分表相关推荐
- postgre 主键_PostgreSQL数据库修改表增加主键
PostgreSQL数据库测试环境中有多张表没有添加主键约束,只有一个serial的自增字段.现在需要把那些没有主键的表都加上,serial类型的字段为id . 首先是怎么找到PostgreSQL数据 ...
- php mysql新闻表模板_新闻数据库分表案例
新闻数据库分表案例目录:[-]NetkillerMySQL手札MySQLMariaDB...Mr.NeoChan,陈景峰(BG7NYT)4.16.3.新闻数据库分表案例NetkillerMySQL手札 ...
- 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)...
文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...
- 数据库分表时OR Mapping方法
最近使用ADO.net Entity应用中遇到一个分表的应用,IDE中是不可视化支持这个的,为此使用了基于LINQ的方法解决了该问题. 数据库分表的意义和目的 分表技术顾名思义,就是把若干个存储相同类 ...
- MySQL数据库分表分区
防伪码:当你终于沉默,成熟才刚刚开始. 为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且 由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性 ...
- 数据库分区分表以及读写分离
数据库分区分表以及读写分离 Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己 ...
- [转载]学习数据库分表和分库思想
目录: 基本思想之什么是分库分表 基本思想之为什么要分库分表 分库分表的实施策略 何谓垂直切分 何谓水平切分 应该使用哪一种方式来实施数据库分库分表这要看数据库中数据量的瓶颈所在并综合项目的业务类型进 ...
- 超大数据量存储常用数据库分表分库算法总结
这篇文章主要介绍了超大数据量存储常用数据库分表分库算法总结,本文讲解了按自然时间来分表/分库.按数字类型hash分表/分库.按md5值来分表/分库三种方法,以及分表所带来的问题探讨,需要的朋友可以参考 ...
- Hibernate与数据库分表
2019独角兽企业重金招聘Python工程师标准>>> 数据库分片(shard)是一种在数据库的某些表变得特别大的时候采用的一种技术. 通过按照一定的维度将表切分,可以使该表在常用的 ...
最新文章
- bats-Bash自动化测试工具
- The target you are trying to run requires an OpenSSL implementation.
- 【耗子啃过的SEO之入门知识二】SEOer必看,初级、中级和高级SEOer
- robotium诡异的Instrumentation run failed due to 'java.lang.ClassNo
- shell 定时删除制定目录下过期文件
- day2-列表、元组、字典、字符串
- C++ throw:抛出自己的异常
- IE浏览器报错 ‘Rowspan’ 为空或不是对象
- hihocoder第218周:AC自动机
- 代表性的神经网络模型分类
- 功夫小子实践开发-具有简单AI的怪物类的分析和实现
- idea 远程调试resin
- linux系统可以在移动硬盘,如何在移动硬盘上装LINUX系统?
- pillow库——使用图像类Image
- 什么品牌蓝牙耳机音质好?通话质量好蓝牙耳机
- 思科认证入门级课程介绍(二)
- 解决Kali linux安装后无法使用键盘输入
- flink的内存管理器MemoryManager
- 【效率神器】电脑上实现语音输入文字
- centos8无法nmcli connection up ens33 或无法ifconfg到ens33网卡信息