`

如何在Postgresql中实现分片技术

 
阅读更多
       您好!我用一个简单的例子说明pg的分区实现方式,供你参考,有什么不明白的我们再沟通。
1、分区技术介绍
     postgresql的分区是通过表继承来实现,也就是创建一个主表和若干个分表。主表要求1)空表,2)不能有任何约束,除非该约束对所有子表都生效3)在主表上的索引没有任何意义。
2、分区表实现步骤
1)创建主表
CREATE TABLE hubeicity(
citycode smallint,
cityname varchar(20),
enname varchar(64)
);
2)创建继承主表的分区表
CREATE TABLE hubeicity_1 (
CHECK ( citycode=1 )  //check就可以理解为oracle中的分区语法或者分区条件的概念。
) INHERITS (hubeicity);

CREATE TABLE hubeicity_2 (
CHECK ( citycode=2 )
) INHERITS (hubeicity);


3)创建触发器函数,用来实现insert时的数据重定向到分表

CREATE OR REPLACE FUNCTION hubeicity_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF ( NEW.citycode = 1) THEN
INSERT INTO hubeicity_1 VALUES (NEW.*);
ELSIF ( NEW.citycode = 2) THEN
INSERT INTO hubeicity_2 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'Date out of range!';
END IF;
RETURN NULL;
END;
$$

LANGUAGE plpgsql;
4)创建触发器
CREATE TRIGGER insert_hubeicity_trigger
BEFORE INSERT ON hubeicity
FOR EACH ROW EXECUTE PROCEDURE hubeicity_insert_trigger();
5)测试

insert into hubeicity values (1,'武汉','武汉分公司1');
insert into hubeicity values (1,'武汉','武汉分公司2');
insert into hubeicity values (2,'黄石','黄石分公司1');



postgres=# select * from hubeicity;
citycode | cityname | enname
----------+----------+-------------
1 | 武汉 | 武汉分公司1
1 | 武汉 | 武汉分公司2
2 | 黄石 | 黄石分公司1
(3 rows)


postgres=# select * from hubeicity_1;
citycode | cityname | enname
----------+----------+-------------
1 | 武汉 | 武汉分公司1
1 | 武汉 | 武汉分公司2
(2 rows)


postgres=# select * from hubeicity_2;
citycode | cityname | enname
----------+----------+-------------
2 | 黄石 | 黄石分公司1
(1 row)
          以上就是postgresql的分区表实现方式,另外还有一种分区表实现方式是使用规则实现数据重定向,但是开销更大,
这种方法在批量插入时可能有性能优势,所以通常我们都用触发器的方式。


分区触发器函数作用大概是以下:
1 插入时将数据插入到相应分区。
2 删除时,删除对应分区的数据。
3 更新时,更新对应分区数据。
一般,分区表上有个 insert 触发器函数和一个 delete 触发器函数即可,如果有 update ,则需要一个 update 触发器函数。

   但是由于触发器函数每次数据操作都需要运行 DB 端的触发器函数,当并发较高时,带来的开销很大,建议分区表的判断逻辑放在程序中完成,例如,数据插入时,应用程序判断插入相应分区。



分享到:
评论

相关推荐

    Mastering PostgreSQL 11 2nd.pdf

    这些特性使得PostgreSQL能够满足复杂的企业级需求,如数据分片、自定义业务逻辑和非结构化数据处理。 此外,书中还会涉及安全性、备份与恢复、监控与日志,这些都是数据库管理员日常工作中不可或缺的部分。理解并...

    POSTGRESQL_9_HIGH_AVAILABILITY_COOKBOOK 高清pdf加原书代码

    5. **分区和分片**:对于大规模的数据存储,可以使用分区和分片策略,将数据分布在多个服务器上,提高查询效率并分散负载。 书中涵盖的脚本和代码示例,很可能是对这些高可用性特性的实际应用,包括但不限于配置...

    PostgreSQL集群技术资料.

    Datanode节点是数据的实际存储位置,支持数据的分片存储和复制存储,也就是说数据可以以分片(distributed)或复制(replicated)的方式在不同的节点上存储。 在安装PGCluster时,需要满足一定的硬件和软件条件。...

    Mycat+Mysql实现数据分片存储高可用集群

    为了应对这一挑战,数据分片技术作为一种有效的解决方案被广泛应用。本文将详细介绍如何利用Mycat作为中间件,结合MySQL数据库构建一个高性能、高可用的数据分片存储集群。 #### Mycat简介 Mycat是一个开源的...

    《PostgreSQL 高效手册》 第二版 (英文原版) PDF

    8. **分区与分片**:解释如何使用表分区和分布式分片来管理大规模数据,提高查询性能和存储效率。 9. **并发控制与事务管理**:阐述PostgreSQL的MVCC(多版本并发控制)模型,事务隔离级别,死锁检测与解决,以及...

    PostgreSQL中的高效分区策略及其管理方法

    主要内容概要:本文全面阐述了PostgreSQL中分区的概念以及各种类型的分区技术——包括范围分区、列表分区、哈希分区及其组合使用的具体方法。通过实例展示了如何根据不同数据特性和业务需求创建合理的分区策略以提升...

    分布式数据库原理及PostgreSQL分布式架构介绍.docx

    在PostgreSQL分布式架构中,需要考虑的一些关键问题包括数据分片、数据复制和数据一致性等问题。数据分片是指将数据分配到多个节点上,以提高数据库的可扩展性和性能。数据复制是指将数据复制到多个节点上,以提高...

    阿里云 专有云企业版 V3.6.2 HybridDB for PostgreSQL 技术白皮书 - 20181228.pdf

    - 分布式架构:HybridDB采用分片技术,能够实现数据的水平扩展,轻松处理PB级别的数据量。 - 高并发处理:通过并行计算和优化的SQL执行引擎,支持大量并发事务,保证了高吞吐量和低延迟。 - 兼容PostgreSQL:保持...

    阿里云 专有云企业版 V3.7.1 HybridDB for PostgreSQL 技术白皮书 20190125.pdf

    - 分布式架构:HybridDB for PostgreSQL采用分片(Sharding)技术,将数据分布到多个节点,实现水平扩展,以处理大规模数据和高并发请求。 - 主从复制:为了确保数据安全和高可用性,系统采用了主从复制模式,主...

    sql脚本函数编写postgresql数据库实现解析

    在SQL脚本编程中,PostgreSQL数据库提供了一种强大的方式来实现复杂的数据处理逻辑,包括创建自定义函数。本文将深入探讨如何在PostgreSQL中编写SQL脚本函数以实现数据库的解析和操作。 首先,我们来看一下如何创建...

    阿里云 专有云企业版 V3.6.1 HybridDB for PostgreSQL 技术白皮书 - 20181105.pdf

    1. **分布式架构**:HybridDB采用分片存储方式,数据分布在多个节点上,实现了水平扩展,能够处理PB级别的数据量。 2. **高性能**:优化的SQL执行引擎和并行计算能力,使得查询速度远超传统单机数据库,满足高并发...

    阿里云 专有云企业版 V3.8.2 分析型数据库PostgreSQL版 技术白皮书 20200416.pdf

    - **分布式架构**:具备水平扩展能力,通过分片和并行计算实现高并发和快速响应。 - **实时数据处理**:支持实时写入和查询,提供亚秒级的查询响应速度。 - **兼容性**:保持对PostgreSQL SQL语法和生态系统的...

    PostgreSQL时空应用实践.pptx

    它将数据自动分片,并支持复杂的时序查询,适用于物联网(IoT)、监控系统和日志分析等领域。 **3. 流计算** Pipelinedb是PostgreSQL的流处理扩展,它允许实时处理和分析连续的数据流。这种能力在实时监控、实时分析...

    PostgreSQL数据库内核分析

    - **分区表**: 对大表进行分片,提高查询性能。 - **全文搜索**: 支持复杂的文本搜索功能。 - **地理空间数据支持**: 处理地理坐标等数据类型。 - **流复制**: 提供主从复制功能,增强可用性和扩展性。 #### 九、...

    开源项目-go-pg-sharding.zip

    【开源项目-go-pg-sharding.zip】是一个基于Go语言和PostgreSQL数据库的开源项目,旨在实现数据库的分片(sharding...通过深入研究和实践这个项目,可以提升对Go语言、PostgreSQL以及数据库分片技术的理解和应用能力。

    springboot+vue前后端分离 实现超大文件分块上传

    在这个示例中,Element UI用于实现文件选择器、进度条等元素,提升用户体验。 5. **数据库集成** 项目中包含SQL文件,表明项目可能涉及数据库操作,如存储文件元数据、上传状态等。Spring Boot支持多种数据库连接...

    PostgreSQL 数据库系统 45页介绍.pdf

    以下内容将详细介绍PostgreSQL的历史、特性及其在现代数据库技术中的地位。 ### PostgreSQL的历史 PostgreSQL的故事可以追溯到1970年代,当时位于加利福尼亚大学伯克利分校的Eugene Wong和Michael Stonebraker教授...

    springboot使用mycat做的postgres集群测试

    在IT行业中,数据库集群是确保高可用性和数据冗余的重要技术。Spring Boot作为一个流行的Java开发框架,使得构建微服务变得更加简单。而Mycat作为一款开源的分布式数据库中间件,可以将多个数据库节点组成一个集群,...

Global site tag (gtag.js) - Google Analytics