ApsaraDB For Greenplum试用指南

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 在ApsaraDB获取到一个GP实例后,会得到以下信息: - 连接地址 分为公网和私网,暂时不考虑VPC。私网地址只能通过阿里云ECS访问,公网地址则可以通过互联网上任一主机访问。例如: ``` 公网地址:mygpdbpub.gpdb.rds.aliyuncs.com:35

在ApsaraDB获取到一个GP实例后,会得到以下信息:

  • 连接地址

    分为公网和私网,暂时不考虑VPC。私网地址只能通过阿里云ECS访问,公网地址则可以通过互联网上任一主机访问。例如:
    
    公网地址:mygpdbpub.gpdb.rds.aliyuncs.com:3568 
    私网地址:mygpdb.gpdb.rds.aliyuncs.com:3432
  • 账号密码

    账号:mygpdb    
    密码:mygpdb

有了这些信息后,就可以连接到GP实例上进行相关的操作。

连接

GP目前基于的是PostgreSQL 8.3,完整支持PG 8.3的消息协议。因此,在各种操作下,与PG几无二致。

得益于PG 9.4消息协议的良好向后兼容性,所有基于PG 8.3以及之后的连接工具,大部分可以直接用于连接到GP,包括libpq、JDBC、ODBC、psycopg2、pgadmin III等。

GP官网提供了一个安装包,包含了JDBC、ODBC和libpq,方便安装和使用。请参考官方文档

psql && pgAdmin III

连接PG和GP,最为常用的莫过于psql和pgAdmin III了。psql是PG、GP安装后自带的类shell终端,可以执行所提供的诸多命令和SQL。以psql为例如:

$ ~/workspace/pgsql/bin/psql  -h mygpdbpub.gpdb.rds.aliyuncs.com -p 3568  -d postgres -U mygpdb
Password for user mygpdb: 
psql (9.4.4, server 8.3devel)
Type "help" for help.

postgres=> select version();
                                            version                                            
-----------------------------------------------------------------------------------------------
 PostgreSQL 8.3devel (Greenplum Database 4.3.99.00 build dev) compiled on May 10 2016 01:19:10
(1 row)

postgres=> 

其中,“-h”指定主机地址,“-p”指定端口号,“-d“指定数据库(默认的数据库是postgres),“-U”指定连接的用户。更多选项,通过“psql --help”可以看到。

在psql中,可以执行"?"查看更多psql中支持的命令。

pgAdmin III是图形客户端,相对简单,请参考中文版

JDBC

PostgreSQL的官方JDBC可以在这里下载到,下载之后加入到环境变量中即可。

代码案例:

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
  
public class gp_conn {  
  
    public static void main(String[] args) {  
        try {  
            Class.forName("org.postgresql.Driver");  
            Connection db = DriverManager.getConnection("jdbc:postgresql://mygpdbpub.gpdb.rds.aliyuncs.com:3568/postgres","mygpdb","mygpdb");  

            Statement st = db.createStatement();  
            ResultSet rs = st.executeQuery("select * from gp_segment_configuration;");  
            while (rs.next()) {  
                System.out.print(rs.getString(1));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(2));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(3));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(4));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(5));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(6));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(7));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(8));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(9));  
                System.out.print("    |    ");  
                System.out.print(rs.getString(10));  
                System.out.print("    |    ");  
                System.out.println(rs.getString(11));  
            }  
            rs.close();  
            st.close();  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
}

详细文档请参考

ODBC

PostgreSQL的ODBC是以LGPL协议开源的版本,可以在这里下载到。

也可以参考德哥的博客,里面有更详细的方法和案例。

Python

Python连接GP和PG用的库是psycopg2。安装方法很简单:

yum -y install python-psycopg2

或者

pip install psycopg2

或者从源码安装

yum install -y postgresql-devel*

wget  http://initd.org/psycopg/tarballs/PSYCOPG-2-6/psycopg2-2.6.tar.gz
tar xf psycopg2-2.6.tar.gz
cd psycopg2-2.6
python setup.py build
sudo python setup.py install

安装后,设置PYTHONPATH,之后就可以引用,如:

import psycopg2

sql = 'select * from gp_segment_configuration;'

conn = psycopg2.connect(database='gpdb', user='mygpdb', password='mygpdb', host='mygpdbpub.gpdb.rds.aliyuncs.com', port=3568)

conn.autocommit = True
cursor = conn.cursor()
cursor.execute(sql)
rows = cursor.fetchall()

for row in rows:
    print row

conn.commit()
conn.close()

会得到类似以下的结果:

(1, -1, 'p', 'p', 's', 'u', 3022, '192.168.2.158', '192.168.2.158', None, None)
(6, -1, 'm', 'm', 's', 'u', 3019, '192.168.2.47', '192.168.2.47', None, None)
(2, 0, 'p', 'p', 's', 'u', 3025, '192.168.2.148', '192.168.2.148', 3525, None)
(4, 0, 'm', 'm', 's', 'u', 3024, '192.168.2.158', '192.168.2.158', 3524, None)
(3, 1, 'p', 'p', 's', 'u', 3023, '192.168.2.158', '192.168.2.158', 3523, None)
(5, 1, 'm', 'm', 's', 'u', 3026, '192.168.2.148', '192.168.2.148', 3526, None)

libpq

libpq是PostgreSQL原生支持用于连接PG的C库。在安装了GP或者PG之后,在其lib目录下可以找到其的静态库和动态库。这里有很多例子,此处不再列举。

详细的文档

常规操作

对GP的操作,整体与PG相较为一致,包括schema、类型支持、用户权限等。除了GP自身的一些特有的操作,如分布表、AO表等,其他操作皆可参考PG。

当前ApsaraDB For Greenplum对并没有开放DB实例的superuser权限,对应的则是rds_superuser,这一点与ApsaraDB For RDS(PostgreSQL)中的权限体系一致。

创建DB

Greenplum中创建DB的操作与PG相同,可以通过SQL来执行,如psql连接到GP后执行:

=> create database mygpdb;
CREATE DATABASE

=> \c mygpdb
psql (9.4.4, server 8.3devel)
You are now connected to database "mygpdb" as user "mygpdb".
mygpdb=> create extension postgis;
CREATE EXTENSION

创建分布表

在GP中,表是分布在所有的Segment上的,其分布规则是HASH或者随机。在建表的时候,指定分布键;当导入数据的时候,会根据分布键计算得到的HASH值分配到特定的Segment上。

=> create table vtbl(id serial, key integer, value text,  comment text) distributed by (key);
CREATE TABLE

当不指定分布键的时候(即不带后面的"distributed by (key)"),GP会默认对id字段以round-robin的方式进行随机分配。

分布键

分布键对于查询性能至关重要。均匀为分布键选择的第一大原则,选取更有业务意义的字段,并非必须选择原库的主键。参考中,《Greenplum 数据库最佳实践》做了很好的说明。

查询

构造数据:

  • 创建随机字符串生成函数和类型
CREATE OR REPLACE FUNCTION random_string(integer) RETURNS text AS $body$
SELECT array_to_string(array
                         (SELECT substring('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
                                           FROM (ceil(random()*62))::int
                                           FOR 1)
                          FROM generate_series(1, $1)), ''); $body$ LANGUAGE SQL VOLATILE;

CREATE TYPE cuboid AS (LENGTH integer, width integer, height integer);
  • 创建分布表和构造数据
CREATE TABLE tbl(id serial, KEY integer, value text, shape cuboid, locate geometry, COMMENT text) distributed by (key);

INSERT INTO tbl(KEY, COMMENT, shape, locate, value) SELECT KEY, COMMENT, shape, ST_GeomFromText(locate) AS locate, value FROM (SELECT (a.t + 1) AS KEY, random_string(ceil(random() * 24)::integer) AS COMMENT, row(ceil(random() * 36 + 49), ceil(random() * 6 + 99), ceil(random() * 12 + 199))::cuboid AS shape, 'POINT(' || ceil(random() * 36 + 99) || ' ' || ceil(random() * 24 + 50) || ')' AS locate, (CASE WHEN a.b = 1 THEN 'red' WHEN a.b = 2 THEN 'green' WHEN a.b = 3 THEN 'yellow' WHEN a.b = 4 THEN 'blue' END) AS value FROM (SELECT ceil(random() * 4) b, t FROM generate_series(0, 99999) AS t) AS a) AS t;
  • 查询
=> select * from vtbl where key = 13944;
   id   |  key  | value |    shape     |                   locate                   |    comment     
--------+-------+-------+--------------+--------------------------------------------+----------------
 113944 | 13944 | red   | (84,102,206) | 01010000000000000000405D400000000000C05140 | 22EaPlVqvfSgpq
(1 row)

Time: 513.101 ms
  • PG上的查询
=> select * from tbl where key = 13944;
  id   |  key  | value |    shape     |                   locate                   |   comment    
-------+-------+-------+--------------+--------------------------------------------+--------------
 13944 | 13944 | green | (55,105,207) | 01010000000000000000C05C400000000000004C40 | 3wQrCJqnHPds
(1 row)

Time: 1162.243 ms

在同样的表结构、记录数和没有添加任何索引的情况下,GP的查询要比PG的快一些。这个GP的实例是两个Segments,当记录数更多、Segments更多的时候,理论上差距会更明显。

参考

  1. Pivotal Greenplum官方文档
  2. ODBC编译
  3. ODBC下载
  4. JDBC下载
  5. 《Greenplum:你不可不知的实施与维护最佳实践》
  6. 《Greenplum 数据库最佳实践》
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!
|
4月前
|
关系型数据库 Serverless 分布式数据库
PolarDB MySQL 版 Serverless-测评
通过函数计算调用PolarDB数据,拉起暂停状态的PolarDB MySQL 集群。
111553 8
|
8月前
|
关系型数据库 Serverless 数据库
RDS PostgreSQL Serverless部署心得分享
RDS PostgreSQL Serverless部署心得分享
|
12月前
|
数据库
《阿里云产品手册2022-2023 版》——云数据库 ClickHouse
《阿里云产品手册2022-2023 版》——云数据库 ClickHouse
118 0
|
存储 资源调度 监控
云数据库RDS MySQL Serverless已来
RDS MySQL Serverless公测结束,正式对外服务!
1453 0
云数据库RDS MySQL Serverless已来
|
存储 SQL 并行计算
产品简介—PolarDB-X适用场景
高负载低延时交易 场景描述 交易场景广泛存在于互联网业务中,交易系统是信息系统中最为核心的组件之一。业务连续性、事务一致性和系统安全性是交易系统正常运1行的基础,长时间高负载低延时的运行是互联网时代交易系统的发展方向。 产品能力 PolarDB-X采用搭载自研多数派共识协议X-Paxos,并应用于存储节点提供三副本强一致能力,确保高可用切换和容灾场景下RPO=0。基于全局时钟TSO策略和分布式的MVCC多版本,分布式事务可确保多节点数据访问的事务一致性。PolarDB-X通过中国信通院《金融级分布式事务数据库稳定性专项评测》,且持续12年支撑“双十一”全球购物狂欢节,集稳定性与高性能于一身。
171 0
产品简介—PolarDB-X适用场景
|
边缘计算 运维 监控
RDS MySQL Serverless 正式上线,免费公测中
今天,业界领先的阿里云数据库RDS MySQL Serverless正式开始上线公测。Serverless数据库能够使得数据库实例资源随客户业务负载动态弹降,将客户从复杂的业务资源评估和运维工作中解放出来。
1566 1
RDS MySQL Serverless 正式上线,免费公测中
|
SQL 存储 运维
PolarDB-X 1.0_产品简介-适用场景
本文主要介绍PolarDB-X的适用场景。
332 0
PolarDB-X 1.0_产品简介-适用场景
|
存储 弹性计算 关系型数据库
PolarDB-X 1.0_产品简介-PolarDB-X 1.0定价
PolarDB-X 1.0由计算层DRDS实例与存储层私有定制RDS实例组成,本文主要介绍PolarDB-X 1.0如何定价。
239 0
|
关系型数据库 分布式数据库 网络安全