PostgreSQL Replication之第十二章 与Postgres-XC一起工作(4)
12.4 性能优化
Postgres-XC不是一个奇特的PostgreSQL版本,而是一个真正的分布式系统。这意味这,您不能只存储数据,希望事情超出服务器之外的快速,高效。如果您想优化速度,思考数据是如何在幕后存储的,以及查询是如何执行的是非常有益的。
当然,您可以只加载数据,事情也会工作 ,但,如果性能真的是一个问题,您真的应该去想想如何利用您的数据。请记住,如果您的负载较低的话,使用一个分布式数据库系统是没有意义的。因此,如果您是一个Postgres-XC使用者,我们希望您的负载和您的要求非常高。
12.4.1 调度表
最重要的一个问题是数据存储在哪里。Postgres-XC不会知道您打算用您的数据做什么,以及您真正计划执行什么类型的访问模式。要确保,用户获得在哪里存储数据的控制权,CREATE TABLE 提供了一些语法:
[ DISTRIBUTE BY { REPLICATION | ROUND ROBIN
| { [HASH | MODULO ] ( column_name ) } } ]
[ TO { GROUP groupname | NODE nodename [, ... ] } ]
DISTRIBUTE BY 子句允许您指定在那里存储一张表,如果您想告诉Postgres-XC,一张表必须在集群中的每个节点上,我们推荐使用REPLICATION。如果您在创建一个小的查找表或者一些在查询中频繁使用的表,这尤其有用。
如果目标是向外扩展,建议散布一个表到一系列的节点。为什么会有人想拆分表?原因其实很简单。如果您把一个表复制到所有的数据节点上,它实际上意味着您将在每个节点上都有一个写操作。显然,与单节点相比,这不是扩展,因为每个节点都必须承担所有的负载。对于面临严重写的大表来说,把表分裂到多个节点可以说是有益的。Postgres-XC提供了多种方法以做到这一点。
ROUND ROBIN只是或多或少随机地分布,HASH会基于一个哈希键调度数据,MODULO将根据一个特定的键简单均匀地分布数据。
为了使管理变得更轻松,Postgres-XC允许您将节点分成所谓的节点组。如果一个表不应该驻留在集群中所有的节点上,而是只驻留在其中一半的节点上,这就会很方便。
要对节点进行分组,您可以调用 CREATE NODE GROUP:
test=# \h CREATE NODE GROUP
Command: CREATE NODE GROUP
Description: create a group of cluster nodes
Syntax:
CREATE NODE GROUP groupname
WITH nodename [, ... ]
请记住,一个节点组是静态的;您不能在以后往节点组里添加节点。因此,如果您开始整理您的集群,您必须事先考虑您的集群将有哪些区域。
除此之外,一旦数据已经被调度,重组数据是相当困难的。如果一个表分布在四个节点上,您不能只是轻松地添加第五个节点来处理该表。首先,添加第五个节点将需要重新平衡,其次,这些大部分功能仍然在建设当中,对终端用户来说尚不完全可用。
12.4.2 优化连接
如果您想连接数据,巧妙地调度数据是必须的。让我们假设一个包括三个表的简单场景:
• t_person: 此表有我们系统中的一些人组成。
• t_person_payment: 此表由一个人支付的所有款项组成。
• t_postal_code: 此表由您所在区域的邮政编码组成。
让我们假设,我们要经常连接这些数据。在这种情况下,强烈建议由同样的连接键对t_person 和 t_person_payment 进行分区。这样做将使Postgres-XC连接并合并一些数据节点上的本地数据,而不必传输集群内的数据。当然,我们也可以创建t_person表的完整副本,如果该表读的如此频繁,以至于这样做有意义。
t_postal_code 是一个可能被复制到所有节点的一个表的典型的例子。我们可以预期邮政编码是静态的。在现实生活中,邮政编码基本上不会变(至少,每秒1000个邮政编码),该表也将是非常小的,而且它也将会被许多其它的连接所需要。这里,一个完整的副本会非常有意义。
当进行适当的逻辑划分是,我们只是想提醒您一个简单的规则:尝试本地计算,尝试避免带有任何代价的数据移动。
12.4.3 优化仓库
如果您的目标是使用Postgres-XC做商业智能和数据仓库,您必须确保您有很高的扫描速度。这可以通过同时使用尽可能多的硬件来实现。在这里,向外扩展您的实际表到多个主机将会非常有意义。
我们也建议完全复制小的查找表,以便可以在这些节点上执行尽可能多的工作。小在这里意味着什么?让我们想象一下,您正在存储世界各地上百万人的信息。您可能要拆分数据到多个节点上。但是,如果您把潜在的国家的名单分开,这显然是不合理的。这个星球上的国家的数目是有限的,所以,有这些数据的副本在所有的节点上是更加简单可行的。
12.4.4 创建一个 GTM Proxy
来自GTM请求的事务ID是一个相当昂贵的过程。如果您正在运行一个大型的Postgres-XC设置应该处理在线事务处理(OLTP)工作的负载,实际上GMT才是瓶颈所在之处。我们需要的全局事务ID越多,GTM的性能将会越重要。
要解决这个问题,我们可以引入一个GTM Proxy。这个思想是,事务ID被大量地请求。其核心思想是,我们要避免网络通信,尤其是延迟。这个概念和如何在PostgreSQL的工作中分组提交非常类似。
如何设置一个简单的 GTM Proxy ?首先,我们必须创建一个目录,该目录用于存放配置文件。然后,我们可以做如下调用:
initgtm -D /path_to_gtm_proxy/ -Z gtm_proxy
这将创建一个配置文件样本,我们可以简单轻松地改写它。定义一个节点名之后,我们应该设置gtm_host 和 gtm_port 指向活跃的GTM。然后,我们可以调整工作线程的数量到一个合理的数量,以确保我们可以处理更多的负载。通常,我们用一种 worker_threads 的数量和系统中的节点的数量相匹配的方法来配置GTM Proxy。这已经被证明是一个健壮的配置。
最后,我们可以启动代理基础设施:
gtm_ctl -D /path_to_gtm_proxy/ -Z gtm_proxy start
对我们的系统来说,GTM Proxy 现在是可用的。
PostgreSQL Replication之第十二章 与Postgres-XC一起工作(4)的更多相关文章
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(7)
12.7 处理故障转移和删除节点 在本节中,我们将看看故障切换如何处理.我们还将看看如何使用安全可靠的方法添加节点到Postgres-XC设置以及如何从Postgres-XC设置删除节点. 12.7. ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(3)
12.3 配置一个简单的集群 在本章中,我们要建立一个由三个数据节点组成的集群.一个协调节点,以及管理集群的全局事务管理节点.对于每个组件,我们必须创建一个目录: hs@vm:~/data$ ls - ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(1)
在本章中,我们希望将我们的注意力集中在写可扩展,多主,同步,对称和PostgreSQL的称为Postgres-XC(PostgreSQL eXtensible Cluster)的透明复制方案.该项目的 ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(5)
12.5 创建表和发送查询 介绍了Postgres-XC以及其底层的思想之后,是时候创建我们的第一个表,看看集群将如何表现.下面的例子演示了一个简单的表.将使用id列的哈希键来分布它: test=# ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(2)
12.2安装 Postgres-XC 可以从 http://postgres-xc.sourceforge.net/下载Postgres-XC.对于本书,我们使用1.0.3版本的Postgres-XC ...
- PostgreSQL Replication之第十二章 与Postgres-XC一起工作(6)
12.6 添加节点 Postgres-XC允许您在那个过程中的任何一个时间点添加新的服务器到计划中.所有您需要做的是按照我们之前演示的设置一个节点,并在 控制器上调用CREATE NODE.然后,该系 ...
- PostgreSQL Replication之第十四章 扩展与BDR
在这一章中,将向您介绍一个全新的技术,成为BDR.双向复制(BDR),在PostgreSQL的世界里,它绝对是一颗冉冉升起的新星.在不久的将来,许多新的东西将会被看到,并且人们可以期待一个蓬勃发展的项 ...
- PostgreSQL Replication之第十五章 与Walbouncer 一起工作
与Walbouncer 一起工作 在本书的最后一章,将引导您通向2014年发布的一个工具,称为walbouncer.本书中的大多数技巧说明了如何复制整个数据库实例,如何分片,等等.在最后一章,是关于w ...
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
随机推荐
- 【转载】Linux系统与性能监控
原文地址:http://kerrigan.sinaapp.com/post-7.html Linux System and Performance Monitoring http://www.hous ...
- Delphi dbf文件如何定位记录(即设置Table的RecNum属性来移动到该记录号)
Delphi的table的RecNum属性,可以用来定位记录,如:self.Table1.RecNum:=23;即可以让数据库记录移动到23号记录上,但这种作用仅限于Paradox数据库,而不是dBA ...
- FW Docker为容器分配指定物理网段的静态IP
官方有关于网桥和IP配置的文档地址:https://docs.docker.com/articles/networking/ 1.宿主机(系统采用ubuntu-14.04.1-server-amd64 ...
- python : dictionary changed size during iteration
1. 错误方式 #这里初始化一个dict >>> d = {'a':1, 'b':0, 'c':1, 'd':0} #本意是遍历dict,发现元素的值是0的话,就删掉 >> ...
- 计算器<代码>
import re l_no = "-4.0*-4+((-1-8.0*2*-1)-(-9.456/1.57))/8+-8*7" true_tr = "-4.0*-4+(( ...
- Java实验三报告
一. 实验内容 (一)敏捷开发与XP 摘要:一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈.假设简单性.递增更改.提倡更改.优质工作.XP软件开发的基石是XP的活动,包括:编码 ...
- JQuery 可见性过滤选择器
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Session服务器配置指南与使用经验
一.摘要 所有Web程序都会使用Session保存数据. 使用独立的Session服务器可以解决负载均衡场景中的Session共享问题.本文介绍.NET平台下建立Session服务器的几种办法, 并介 ...
- 打造安全的App!iOS安全系列之 HTTPS
如何打造一个安全的App?这是每一个移动开发者必须面对的问题.在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多 ...
- iOS Block浅析
Block 的使用有两种:1.独立Block .2.内联Block . <一>独立Block 使用方式 一.定义一个Block Object,并调用. 1.定义 // 定义 ...