zoukankan      html  css  js  c++  java
  • Greenplum介绍-table

    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)

  • 相关阅读:
    D. Babaei and Birthday Cake--- Codeforces Round #343 (Div. 2)
    Vijos P1389婚礼上的小杉
    AIM Tech Round (Div. 2) C. Graph and String
    HDU 5627Clarke and MST
    bzoj 3332 旧试题
    codeforces 842C Ilya And The Tree
    codesforces 671D Roads in Yusland
    Travelling
    codeforces 606C Sorting Railway Cars
    codeforces 651C Watchmen
  • 原文地址:https://www.cnblogs.com/jiang910/p/9963837.html
Copyright © 2011-2022 走看看