postgresql点云las_PostgreSQL 调研

摘要

本文介绍了Postgresql的功能和集群构建方案,及集群读写分离、负载均衡和分库功能的实现方法。

1. 简介

PostgreSQL是一个功能强大的、可靠性高、能保证数据完整性和一致性对象的开源关系数据库系统。它可以运行在所有主流的操作系统上,包括Linux、UNIX(AIX, BSD, HP-UX, SGI IRIX, MACOS, Solaris, Tru64)和Windows,实现ACID事务机制、外键、连接、视图、触发器和存储过程(在多种语言中)等功能,支持大多数SQL2008数据类型,如INTEGER, NUMERIC, BOOLEAN、CHAR、VARCHAR、DATE、INTERVAL和TIMESTAMP,还支持二进制大对象的存储,包括图片、声音或视频。它为C / c++、Java、Net, Perl, Python, Ruby, Tcl, ODBC提供了编程接口。

作为一款企业类数据库,PostgreSQL拥有一些复杂的特性,例如多版本并发控制(MVCC)、即时恢复、表空间、异步备份、事务保存点、在线/热备份、复杂的查询规划器/优化器,以及预写式日志提高容错等,在能够管理的数据量和可以容纳的并发量方面都具有高度的可伸缩性下面的下表中包含了一些一般的PostgreSQL限制。

表1 PostgrelSQL 的一般限制

Limit

Value

Maximum Database Size

Unlimited

Maximum Table Size

32 TB

Maximum Row Size

1.6 TB

Maximum Field Size

1 GB

Maximum Rows per Table

Unlimited

Maximum Columns per Table

250 - 1600 depending on column types

Maximum Indexes per Table

Unlimited

2. postgresql自带工具和集群策略

提供面向高并发访问的分布式数据构建技术来提升整个数据库并发尤其是并发读的能力,实现负载均衡、读写分离和数据分库功能。

2.1 关键技术

2.1.1 可扩展性

可扩展性是指当系统需要增加资源执行更多的工作时系统能获得划算的等同提升。构建可扩展性系统时要尽量遵循避免串行化和交互的原则。

实现可扩展性方法可大致分为以下三类:

向上扩展:使用性能更好的机器。

向外扩展:水平扩展。向外扩展策略:数据复制、数据库拆分及数据分片。数据复制主要利用主从同步实现了读写分离。数据数据分片:大多数分片系统有一些全局的数据不会被分片,大多保存在单个节点上,通常缓存。

向内扩展:数据归档。

2.1.2 分表

确定分区键方法:结合ER图和应用的查询。汇总表、全局表(不分片)。避免分片过大(同样大小最好)。多个分布键:或许存储多份。

优点:

缺点:数据分片的最大挑战是查找和获取数据。对重要且频繁访问的数据减少分片,可扩展性法则之一避免同节点之间交互,最重要的是分区键的选取。维护数据一致性的挑战。聚合和关联操作等跨分片查询需要数据交互。

2.1.3 主从同步

是指在备用节点保存一份副本,对主节点进行数据增删改的同时,将修改同步到备用节点中。备用节点在主节点出现故障时接替主节点故障,除了实现数据高可用性之外,同时承担了应用服务器的读请求,实现读写分离。针对读多写少的情况,还能使用一主多从的架构,实现读请求的负载均衡。数据分库,数据分区:对大表采用的一种分割策略,将表中的纪录按照一定规律分到不同机器集群中。实现这种架构的方案有:Postgresql使用pgpool-II中间件实现负载均衡和读写分离,基于Pg/Proxy实现数据分库;以及基于Postgresql构建Postgresql-XL集群策略。

2.1.4 冷热分离

PostgreSQL能通过定义表空间的方式确定表文件存储的路径,再通过挂载不同的存储介质就能实现分级存储。定期分表,在系统空闲时,将过期数据所在表的表空间设置成性能较差的存储介质。

2.1.5 缓存

如何指定表进缓存?如何查看哪些表被缓存?缓存的种类?

2.2 组件

2.2.1 pgpool-II

pgpool-II相当于中间件,位于应用程序和PG服务端之间,对应用程序来说,Pgpool-II就相当于PG服务端;对PG服务端来说,Pgpool-II相当于PG客户端。由此可见,Pgpool-II与PG是解耦合的,基于这样的机制,Pgpool-II可以搭建在已经存在的任意版本的PG主从结构上,主从结构的实现与Pgpool-II无关,可以通过slony等工具或者PG自身的流复制机制实现。除了主从结构的集群,Pgpool-II也支持多主结构,称为复制模式,该模式下PG节点之间是对等的,没有主从关系,写操作同时在所有节点上执行,这种模式下写操作的代价很大,性能上不及主从模式。PG 9.3之后支持的流复制机制可以方便的搭建主从结构的集群(包括同步复制与异步复制),因此pgpool-II中比较常用的模式是流复制主从模式,其结构如下图(也可以一主多从)。

既然PG可以通过自身的流复制机制方便的搭建主从结构集群,为什么还要在它上面搭建pgpool-II呢?因为简单的主从结构集群并不能提供连接池、负载均衡、自动故障切换等功能,pgpool-II正好可以做到这些,当然负载均衡只针对读操作,写操作只发生在主节点上。

为了避免单点故障,Pgpool-II自身也可以配置为主从结构,对外提供虚拟IP地址,当主节点故障后,从节点提升为新的主节点并接管虚拟IP。

2.2.2 plproxy

plproxy能够在PostgreSQL上运行的一种过程语言,能够通过用户自定义函数完成对远程数据库的调用,实现数据切片的功能。图2给出了plproxy实现原理,具体事例参考文献[2]。图4给出了基于plproxy进行分库的架构,图中cluster1和cluster2可以是PostgreSQL单机版,也可以是图1中实现了负载均衡和读写分离的集群,这样便整个架构便实现了数据分库、负载均衡和读写分离。[2][3][4]

2.2.3 Postgres-XL

Postgres-XL的机制和Pgpool-II与Pl/Proxy大不相同,它不是独立于PG的,是在PG源代码的基础上增加新功能实现的。简单来说,Postgres-XL将PG的SQL解析层的工作和数据存取层的工作分离到不同的两种节点上,分别称为Coordinator节点和Datanode节点,而且每种节点可以配置多个,共同协调完成原本单个PG实例完成的工作。客户端发出请求,通过负载均衡器(例如 HaProxy)将请求分发给Coordinator。此外,为了保证分布模式下事务能够正确执行,增加了一个GTM节点。为了避免单点故障,可以为所有节点配置对应的slave节点。

2.2.3.1 Postgres-XL的特点

Postgres-XL 是一种提供写可靠性,多主节点数据同步,数据传输的开源集群方案。

写可靠性 (Write-scalable )是指可以部署多个数据库主节点,并且向这些主节点发出 update 语句,这种特性单个 Postgres 库无法提供;

主节点数据同步(Synchronous):是指在一台数据库上更新操作会立刻呈现在另一台数据库中;

数据传输(Transparent)是指;数据位于不同的数据库节点中,当查询数据时,不必关心数据位于具体的节点。

2.2.3.2 Postgres-XL 架构

Postgres_XL 架构.PNG.jpg

Postgres-XC主要组件有GTM,GTM_Standby,GTM_Proxy, Coordinator 和Datanode。

GTM:GTM 是 Postgres_XL 的核心组件,用于全局事务控制,遵循数据库的ACID原则。

GTM_Standby:GTM_Standby 为 GTM 的备机。

GTM_Proxy:GTM_Proxy 为降低GTM压力而诞生的, 用于对 Coordinator 节点提交的任务进行分组等操作, 机器中可以存在多个 GTM_Proxy。

Coordinator:协调节点 (Coordinator) 是数据节点 (Datanode) 与应用之间的接口,Coordinator 节点并不物理上存储表数据,表数据以分片或者副本的方式分布式存储在数据节点上。当应用发起SQL时,会先到达 Coordinator 节点,然后 Coordinator 节点将 SQL 分发到各个数据节点,汇总数据,这一系统过程是通过 GXID 和 Global Snapshot 来控制的。

Datanode:数据节点(datanode)物理上存储表数据,表数据存储方式分为分片(distributed)和完全复制(replicated)两种,数据节点只存储本地的数据。

下表来自是2016年云栖社区的博客,是PostgreSQL和MySQL针对GIS运算的比较。

功能

MySQL

PostgreSQL

空间索引

仅MyISAM支持R树索引,InnoDB不支持

GIST树索引(R树的变种)

支持的空间类型

仅二维数据

二维、三维以及曲线

空间投影

有限的空间函数

基本实现OGC标准定义的空间操作函数

事务支持

不支持

PostGIS提供了一系列的长事务支持,可以有效支持复杂的空间分析功能。

GIS系统使用

使用较少

使用较多,例如openstreetmap的数据库后台就是Postgresql +Postgis。

参考资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何正确执行碎片整理或在群集共享卷(CSV)上使用CHKDSK命令

在使用CHKDSK和碎片整理操作期间,需要将CSV设置为维护模式,此时只有协调器访问磁盘。微软提供了cmdlet的Repair-ClusterSharedVolume选项,该选项可以自动将某个磁盘设置为维护模式,并执行chkdsk /磁盘整理操作,然后再关…

你感兴趣的大学专业真相 | 16万人参与调查,看完80%都哭了

俗话说,隔行如隔山学科专业也是如此你以为我的专业十分高大上事实却是我也不知道我在学啥下面就由各个专业的同学为你揭秘他们专业的真相~人文社会类法学▼泛泛SaMa:在我们法学界,唯有秃头这件事,不分男女不墮紅塵:第一…

linux多内核调度,linux-kernel – 如何在Linux内核(Samsung Exynos5422)中实现异构多处理(HMP)调度?...

码:检查#ifdef CONFIG_SCHED_HMP下的源代码主要在kernel/sched/core.c之内A(不是那样)简要概述:big.LITTLE cpu可以配置为2种操作模式:> IKS – 内核切换器(也称为cpu迁移)> GTS – 全局任务调度(也称为big.LITTLE MP)GTS是异构的操作形…

通过 .NET NativeAOT 实现用户体验升级

前言TypedocConverter 是我先前因帮助维护 monaco-editor-uwp 但苦于 monaco editor 的 API 实在太多,手写 C# 的类型绑定十分不划算而发起的一个项目。这个工具可以将 typedoc 根据 TypeScript 生成的 JSON 文件直接生成对应的 C# 类型绑定代码,并提供完…

序列每天从0开始_序列比对(十一)——计算符号序列的全概率

前文介绍了在知道符号序列后用viterbi算法求解最可能路径。本文介绍了如何使用前向算法和后向算法计算符号序列的全概率。如果一个符号序列中每个符号所对应的状态是已知的,那么这个符号序列出现的概率是容易计算的:但是,如果一个符号序列中每…

SQL 2005 使用row_number来分页

今天研究了一下row_number,用它来返回特定行的记录感觉是非常方便的,所以就做了个分页的存储过程,但不知道性能较之top和游标之类的那个好 代码 createprocedure[dbo].[proc_TestPage]--表名 tablenamenvarchar(255), --排序字段 sortcolumnnvarchar(255…

债务大爆发,中国30%家庭不堪一击!

债务大爆发,30%中国家庭“不堪一击”!从2007年到2016年,中国家庭的债务率翻了一倍多。已经有超过1/3的家庭属于高负债家庭。前不久,深圳中兴网信科技有限公司的一研发组主管欧某,以最决绝的方式,从中兴通迅…

腾讯35k招.NET Core开发,深扒这些技术要求 真的很难吗?

3月草长莺飞,3月招聘满天飞,各种高薪招聘更是心里种草,前几天分享了腾讯牛年35k的.NET Core招聘需求,分享了一波资料深受好评,本着再接再厉的精神,本文继续为大家上干货,补齐腾讯的各种要求。新…

handler原子锁_Linux的原子操作与同步机制

Linux的原子操作与同步机制并发问题现代操作系统支持多任务的并发,并发在提高计算资源利用率的同时也带来了资源竞争的问题。例如C语言语句“count;”在未经编译器优化时生成的汇编代码为。当操作系统内存在多个进程同时执行这段代码时,就可能带来并发问…

ddr2和ddr3的区别

DDR3与DDR2的不同之处 1、逻辑Bank数量 DDR2 SDRAM中有4Bank和8Bank的设计,目的就是为了应对未来大容量芯片的需求。而DDR3很可能将从2Gb容量起步,因此起始的逻辑Bank就是8个,另外还为未来的16个逻辑Bank做好了准备。 2、封装(Pac…

【直观理解】为什么梯度的负方向是局部下降最快的方向?

推荐阅读时间:8min~15min主要内容:为什么梯度的负方向是局部下降最快的方向?刚接触梯度下降这个概念的时候,是在学习机器学习算法的时候,很多训练算法用的就是梯度下降,然后资料和老师们也说朝着梯度的反方…

紫光物联linux登录账号,紫光展锐打造操作系统生态,赋能万物互联智能时代

本周,以“象由芯生科技服务人民”为主题的2020紫光展锐市场峰会重磅开启,广大生态合作伙伴共聚一堂,共话数字世界新未来。在今天举办的“操作系统OS研讨会”上,来自紫光展锐工程一线的架构师带来了一场整个操作系统领域的饕餮盛宴…

一行命令搭建内部的管道

在上一篇《边缘计算k8s集群之SuperEdge》文章中,笔者基于ECK搭建了边缘集群并添加了节点。通过边缘集群,我们可以很方便的管理各个地域的节点,本地、各云厂商的机房、客户所在地、海外的都可以。在本篇内容,我们将讲述如何使用ips…

推到 旋转矩阵公式_3D旋转矩阵的推导过程

3D旋转矩阵的推导过程包含平移的线性变换称作仿射变换,3D中的仿射变换不能用 3 x 3 矩阵表达,必须使用4 x 4矩阵。一般来说,变换物体相当于以相反的量变换描述这个物体的坐标系。当有多个变换时,则需要以相反的顺序变换相反的量。…

ArchiMate - 发布【企业架构语言ArchiMate v0.5.pdf】

在《年度总结和计划:去年4个1,今年5个1》中说过今年我准备在项目组引入1个架构语言(ArchiMate),为了便于大家学习,我把一些内容集成一本电子书,目前发布0.5版本,后续还会不断更新&am…

那些有趣/用的 Python 库

图片处理pip install pillowfrom PIL import Imageimport numpy as npa np.array(Image.open(test.jpg))b [255,255,255] - aim Image.fromarray(b.astype(uint8))im.save(new.jpg)youtube-dl下载国外视频pip install youtube-dl #直接安装youtube-dlpip install -U youtube…

linux系统刷分辨率,Linux下设置其分辨率及刷新率

行频:行频又称为“水平扫描频率”,指电子枪每秒在荧光屏上扫过的水平线的数量,其值等于“场频 垂直分辨率1.04”,单位为KHz(千赫兹)。行频是一个综合分辨率和场频的参数,该值越大,显示器可以提供的分辨率越…

.NET 5 部署在docker上运行

1、创建站点创建一个ASP.NET Core Web应用程序,选中启用Docker支持。自动帮我们创建一个Dockerfile文件。2、编写Dockerfile文件dockerfile是一个文件格式的配置文件,用户可以使用dockerfile来快速构建自定义的镜像。由一行行命令语句组成,并…

python字符串下标越界_Python_字符串

# str1"abcdef" #字符串 str型# int1 1 #整数 int型# float11.3 #浮点数,float型# str2 ABCDEF# #单引号和双引号都可以表示字符串# print(str1,str2)#在某一行按下Ctrl/,就可以进行注释,注释就是程序不执行该行代码,…

爱情三十一课,先信自己

我们每个人一生都在迎接两个问题的考验:其一,我是否值得被爱;其二,我是否可以成功。  如果某人在这两个问题上的自我认识是“值得”和“可以”,无论境遇多遭,都可以获得爱与幸福。如果某人内心里总是觉得…