V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cstj0505
V2EX  ›  数据库

它表面上是一个数据库,但是......

  •  
  •   cstj0505 · 2019-10-31 13:31:37 +08:00 · 3445 次点击
    这是一个创建于 1850 天前的主题,其中的信息可能已经有所发展或是发生改变。

    它表面上是个单机的关系型数据库,但它也是个文档数据库,key-value 数据库,时序数据库,流式计算引擎,搜索引擎,空间位置数据库;它几乎可以直接访问任意其他类型数据库,例如 Oracle,Mysql,Mongodb,Redis,ElasticSearch 等;它还可以直接变身为分布式数据库。 PostgreSQL 不仅仅是个数据库,它还是个和数据相关技术的生态系统。

    1.1 PostgreSQL 介绍

    • 关系型数据库 PostgreSQL
      作为一个关系型数据库,PostgreSQL 支持 SQL:2016 的大部分主要特性。在 179 个完整核心符合所要求的强制特性中,PostgreSQL 至少符合 160 个。

      Note ,这里之所以强调 SQL 标准而不是将具体的 SQL 语句,是想表达,我们经常使用,或者我们不常使用,但已经在 SQL 标准中定义了的语法,基本都已经在 PostgreSQL 中支持了。

    • 丰富的数据类型
      除了一些标准的类型,PostgresSQL 内部还提供了丰富的数据类型,下面列了几类。
      • 枚举类型
        CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
        CREATE TABLE person (
            name text,
            current_mood mood
        );
        
      • 几何类型
        支持点、线、线段、方框,路径、多边形,圆。 线的类型是line,用{A,B,C}表示,代表方程Ax + By + C = 0
      • 网络地址类型
        ipv4,ipv6 或者 mac 地址。 比如 IPv4 和 IPv6 网络的地址或者掩码类型是 inet,比如192.168.0.1/24
      • 文本搜索类型
        PostgreSQL 提供两种数据类型,它们被设计用来支持全文搜索,全文搜索是一种在自然语言的文档集合中搜索以定位那些最匹配一个查询的文档的活动。tsvector 类型表示一个为文本搜索优化的形式下的文档,tsquery 类型表示一个文本查询.
        SELECT to_tsquery('testzhcfg', '保障房资金压力');
            to_tsquery
        ------------------------------------
        '保障' & '房' & '资金' & '压力'
        
      • UUID
      • xml
        xml 数据类型可以被用来存储 XML 数据。它比直接在一个 text 域中存储 XML 数据的优势在于,它会检查输入值的结构是不是良好,并且有支持函数用于在其上执行类型安全的操作
      • json
        SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json;
                              json                       
        -------------------------------------------------
         {"bar": "baz", "balance": 7.77, "active":false}
        (1 row)
        
        SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb;
                              jsonb                       
        --------------------------------------------------
         {"bar": "baz", "active": false, "balance": 7.77}
        (1 row)
        
      • 数组
        CREATE TABLE sal_emp (
            name            text,
            pay_by_quarter  integer[],
            schedule        text[][]
        );
        
      • 自定义组合类型
        CREATE TYPE complex AS (
            r       double precision,
            i       double precision
        );
        
        CREATE TYPE inventory_item AS (
            name            text,
            supplier_id     integer,
            price           numeric
        );
        
      • range
        SELECT int4range(10, 20) @> 3;
         ?column?
        ----------
         f
        (1 row)
        
    • 虚拟列( 12 增加)
      CREATE TABLE people (
          ...,
          height_cm numeric,
          height_in numeric GENERATED ALWAYS AS (height_cm / 2.54) STORED
      );
      
    • PostgreSQL 为每一种数据类型创建了大量的函数
    • 每一种数据类型还有对应的索引
      数据类型,函数,索引,就覆盖了数据类型的存储、计算和查询。
    • 完善的并发控制
      使用 MVCC(多版本并发控制)实现了并发控制模型,支持读未提交,读未提交,可重复读可序列化四个隔离级别。读已提交是 PostgreSQL 中的默认隔离级别。支持表锁、行锁。页级锁,咨询所(乐观锁)
    • 基于代价以及遗传查询优化器
      生成的执行计划更加高效,能更好地处理 join 查询。支持 nest loop,merge sort,hash join。
    • 并行执行
      查询,With 中间表,创建索引都可以多进程并行执行。

    1.2 PostgreSQL Extension 介绍

    PostgreSQL 在数据库的基本功能之外,也允许你使用其它语言编写程序来扩展数据库的功能,这些被称之为extensions,这种扩展能力大大扩大了数据库的能力范围,下面选取了一些比较典型的 extension 列出来。

    • 存储过程 /函数
      支持 PL/pgSQL,PL/Tcl,PL/Perl,PL/Python
    • FDW(foreign-data wrapper)
      支持在 PostgreSQL 中直接访问 jdbc,odbc,其他关系型,NOSQL 数据库,本地或者网络文件,大数据相关系统的表或者数据
    • PostGIS
      PostGIS 提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。同时,PostGIS 遵循 OpenGIS 的规范。
    • PipelineDB
      使用流式 SQL 的流计算引擎
    • timescaleDB
      基于 PostgreSQL 数据库开发的一款时序数据库
    • Citus
      基于最新 PostgreSQL 构建的分布式数据库。CitusDB 可对 PostgreSQL 数据库进行伸缩以适合大数据的处理。可在集群中进行自动分片和碎片复制.CitusDB 可提升 PostgreSQL 的高并发性和 JSON 支持,可用作事务以及分析数据库场景。
    • Hstore
      提供存储 Key-Value 数据的功能
    • 中文分词
      zhparser,结巴
    • pg_stat_statements
      追踪一个服务器所执行的所有 SQL 语句的执行统计信息
    • madlib 基于 SQL 的机器学习插件

    1.3 PostgreSQL 相关数据库介绍

    基于 PostgreSQL 开发的数据库也很多,下面选取了其中几个。

    • Greenplum MPP 数据库。
    • PostgreSQL XL
      Postgres-XL 是一个完全满足 ACID 的、开源的、可方便进行水平扩展的、多租户安全的、基于 PostgreSQL 的数据库解决方案。支持 OLAP,OLTP。
    • 阿里云 POLARDB
    • 华为 GaussDB
    9 条回复    2019-10-31 19:02:47 +08:00
    OSF2E
        1
    OSF2E  
       2019-10-31 13:35:28 +08:00
    PostgreSQL

    而不是

    PostgresSQL
    cstj0505
        2
    cstj0505  
    OP
       2019-10-31 13:37:55 +08:00
    @OSF2E 多谢,更正了
    abcbuzhiming
        3
    abcbuzhiming  
       2019-10-31 14:09:03 +08:00
    楼主
    “但它也是个文档数据库,key-value 数据库,时序数据库,流式计算引擎,搜索引擎,空间位置数据库;它几乎可以直接访问任意其他类型数据库,例如 Oracle,Mysql,Mongodb,Redis,ElasticSearch 等;它还可以直接变身为分布式数据库”

    这些能详细说说吧,我很感兴趣
    sherlockwhite
        4
    sherlockwhite  
       2019-10-31 14:32:51 +08:00
    正准备换个数据库玩玩,就看到这个,话说我脑子里正好想到这个。
    BIAOXYZ
        5
    BIAOXYZ  
       2019-10-31 14:56:13 +08:00
    PostGIS 是不错,但是 pipelinedb 被 kafka 收购后,难说了。。。
    yhxx
        6
    yhxx  
       2019-10-31 14:57:38 +08:00   ❤️ 1
    直接拉到了最后,居然没有公众号
    boliguang
        7
    boliguang  
       2019-10-31 15:00:24 +08:00   ❤️ 1
    Pgone 是哪个版本?
    ReysC
        8
    ReysC  
       2019-10-31 15:38:00 +08:00
    正在修这货!
    这货如果出现硬盘损坏,加上日志损坏,超级难修!
    cstj0505
        9
    cstj0505  
    OP
       2019-10-31 19:02:47 +08:00 via Android
    @abcbuzhiming 你看看数据类型和 extension,基本上就包括了说到的那些。
    你具体想了解哪方面的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1960 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:46 · PVG 08:46 · LAX 16:46 · JFK 19:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.