GP中的table和其它关系型数据表是一样的,除了数据被分布在不同的segment以外。

建表时需定义以下几个方面:
1. 指定列和数据类型
2. 约束
3. 分布策略
4. 数据存储方式
5. 大表分区策略

-------------------------------选择列的数据类型-------------------
关于字符类型,gp中CHAR、VARCHAR、TEXT在性能上没有什么差异。但其它数据库系统中char有性能优势。在大多数情况下,可以用CHAR来替代TEXT 或 VARCHAR。

关于数字类型,最好使用最小的数据类型。 用INT or SMALLINT 代替 BIGINT。
当需要跨表做join的时候,需要保证数据类型是一致。 不然的话,gp将做数据类型转换,造成性能消耗。
GP中还包含一些集合数据类型

-------------------------------------约束-------------------------------
兼容postgresql,包含:check、not null、unique、primary key
4.1暂不支持Foreign Key

--------------------------------选择分布策略-----------------------
有以下2种方式:
DISTRIBUTED BY (哈希分布)
DISTRIBUTED RANDOMLY(随机分布 Round-Robin)

考虑条件(重要性依次排序)
1. Even Data Distribution
为了得到最好的性能,所有segment的数据量应该是相等的。
如果出现不平衡的话,在查询的时候,数据量多的segment的负载就会很大。
2.Local and Distributed Operations
要做join、sort或aggregation的操作的话,segment-level(segment内部)比system-level(segment之间)要快。
3. Even Query Processing
每个Segment都获得相等的查询请求负载

------------------------------表存储方式---------------------------
1. Heap 或 Append-Only存储
   GP默认使用堆表。堆表最好用在小表,如:维表(初始化后经常更新)
   Append-Only表不能update和delete。一般用来做批量数据导入。 不建议单行插入。
   如:
    => CREATE TABLE bar (a int, b text)
       WITH (appendonly=true)
       DISTRIBUTED BY (a);
2. Row 或 Column-Oriented 存储
   GP提供存储模式: 行存储、列存储、混合存储
   使用情景说明:
   a.数据需要更新
     行存储 => 表数据被导入后,如果需要更新的话
     列存储 => 只适合append-only表。
   b.经常插入数据
     行存储 => 如果频繁插入数据
     列存储 => 对于写操作没有做优化 (同一行的列值必须写到磁盘的不同位置)
   c.多列查询请求
     行存储 => 在select或where子句中,查询所有列或大部分列
     列存储 => 在where或having子句中,查询单列的值汇总或单行过滤
              如: SELECT AVG(salary)... WHERE salary > 10000
                  SELECT salary, dept ... WHERE state='CA'
   d.表中许多列
     行存储 => 同一次请求很多列 或 行数据大小相对较小
     列存储 => 使用宽表,查询时候仅仅查少数列
   e.压缩
     行存储 => 不可用
     列存储 =>  可用
     如:(注: 使用列存储必须是append-only表)
     => CREATE TABLE bar (a int, b text)
        WITH (appendonly=true, orientation=column)
        DISTRIBUTED BY (a);
3. 使用压缩 (Append-Only表才适用)
   可以数据库内置的压缩(zlib 或 QuickLZ)。如果使用了已压缩的文件系统,建append-only表将不能使用压缩功能。
   在选择append-only表的压缩类型和级别的时候需考虑一下因素:
   @ CPU的使用率
   @ 压缩率/磁盘大小
   @ 压缩速率
   @ 解压速率/扫描速率
   尽管我们为了减少数据容量大小而使用压缩功能,但是我们必须考虑到数据在压缩与解压的过程中的时间和cpu的消耗。
   压缩的性能取决于硬件、查询调优设置、其它因素。
   QuickLZ - 低压缩率、低cpu消耗、压缩数据块
   zlib - 高压缩率、低速
   示例:=> CREATE TABLE foo (a int, b text)
            WITH (appendonly=true, compresstype=zlib,
            compresslevel=5);
    (注: QuickLZ的压缩级别只有level1,zlib能够设置从1-9,一般为5)

Greenplum介绍-table的更多相关文章

  1. Bootstrap Blazor 组件介绍 Table (二)自定义模板列功能介绍

    Bootstrap Blazor 是一套企业级 UI 组件库,适配移动端支持各种主流浏览器,已经在多个交付项目中使用.通过本套组件可以大大缩短开发周期,节约开发成本.目前已经开发.封装了 70 多个组 ...

  2. Bootstrap Blazor 组件介绍 Table (三)列数据格式功能介绍

    Bootstrap Blazor 是一套企业级 UI 组件库,适配移动端支持各种主流浏览器,已经在多个交付项目中使用.通过本套组件可以大大缩短开发周期,节约开发成本.目前已经开发.封装了 70 多个组 ...

  3. MPP架构海量数据分析仓库——Greenplum介绍

    一.Greenplum背景 时间回到2002年,互联网行业经过近10年的发展,数据量正处于快速增长期: 1.传统的主机计算模式在海量数据面前,除了造价昂贵外,在CPU计算和IO吞吐上不能满足海量数据的 ...

  4. Bootstrap Blazor 组件介绍 Table (一)自动生成列功能介绍

    Bootstrap Blazor 是一套企业级 UI 组件库,适配移动端支持各种主流浏览器,已经在多个交付项目中使用.通过本套组件可以大大缩短开发周期,节约开发成本.目前已经开发.封装了 70 多个组 ...

  5. Bootstrap Blazor 开源UI库介绍-Table 虚拟滚动行

    今天我们来介绍一下 Bootstrap Blazor 中 Table 组件的虚拟滚动行,什么是虚拟滚动呢,我查到的解释是:只渲染可视区域的列表项,非可见区域的 完全不渲染,在滚动条滚动时动态更新列表项 ...

  6. Greenplum 源码安装教程 —— 以 CentOS 平台为例

    Greenplum 源码安装教程 作者:Arthur_Qin 禾众 Greenplum 主体以及orca ( 新一代优化器 ) 的代码以可以从 Github 上下载.如果不打算查看代码,想下载编译好的 ...

  7. Azure Table storage 基本用法 -- Azure Storage 之 Table

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table,其中的 Table 就是本文的主角 Azure Tabl ...

  8. MPP 二、Greenplum数据加载

    Loading external data into greenplum database table using different ways... Greenplum 有常规的COPY加载方法,有 ...

  9. Azure 基础:Table storage

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table.其中的 Table 就是本文的主角 Azure Tabl ...

随机推荐

  1. VR相关网站

    VR87870 http://www.87870.com/ VR玩家网 http://www.vrwanjia.cn/ VR之家 http://www.vr.cn/ http://gad.qq.com ...

  2. 用BeautifulSoup简单爬取BOSS直聘网岗位

    用BeautifulSoup简单爬取BOSS直聘网岗位 爬取python招聘 import requests from bs4 import BeautifulSoup def fun(path): ...

  3. web前端与后台数据交互

    1.前端请求数据URL由谁来写? 在开发中,URL主要是由后台来写的,写好了给前端开发者.如果后台在查询数据,需要借助查询条件才能查询到前端需要的数据时,这时后台会要求前端提供相关的查询参数,这里的查 ...

  4. Jmeter-提取Json数据进行关联

      1:Json后置处理器提取结果作为下一个sampler的传入参数 1.1:[线程组]->[简单控制器]->[HTTP sampler]->[Beanshell后置取样器]-> ...

  5. 《javascript设计模式》笔记之第五章:单体模式

    一:单体的基本结构: 最简单的单体,实际就是一个对象字面量: var Singleton = { attribute1: true, attribute2, method1: function() { ...

  6. 基于.net core封装的xml序列化,反序列化操作

    需求: 由于在.net core中去除了Xml序列化XmlSerializer操作类.因此,在于一此数据传输当中出,需要用到对xml格式字符串的处理问题.因此封装了一个xml序列化与反序列化操作的类库 ...

  7. 运行nodejs项目报Process finished with exit code 1 错误

    在项目中,明明在别人的机子上项目可以运行,但是复制到自己的电脑就无法就无法启动.报Process finished with exit code 1错误,也没提示错误地方.自己倒腾了很久总结了几个解决 ...

  8. jsp第一章 动态网页开发基础

    动态网站可以实现交互功能,如用户注册.信息发布.产品展示.订单管理等等: 动态网页并不是独立存在于服务器的网页文件,而是浏览器发出请求时才反馈网页: 动态网页中包含有服务器端脚本,所以页面文件名常以a ...

  9. Aop第一节

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...

  10. CF1025C Plasticine zebra

    思路: 不要被骗了,这个操作实际上tm是在循环移位. 实现: #include <bits/stdc++.h> using namespace std; int main() { stri ...