zoukankan      html  css  js  c++  java
  • PG(postgresql)数据库

    PG(postgresql)数据库
    PG是一个强大的开源对象关系型数据库系统。使用和扩展了sql语句,结合许多安全存储和扩展最复杂数据工作负载的功能,PG可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。除了免费和开源之外,Postgre SQL还具有高度的可扩展性。例如,你可以定义自己的数据类型,构建自定义SQL函数(此sql函数在另一篇帖子讨论:点此跳转),甚至可以编写来自不同编程语言的代码,而不需要重新编译数据库。
     
    基本操作命令:
    Insert语句:INSERT INTO TABLE_NAME (column1,column2) VALUES (value1,value2)
    SELECT语句:SELECT * FROM TABLE_NAME
    UPDATE语句:UPDATE TABLE_NAME SET column1=value1,column2=value2 where [条件]
    DELETE语句:DELETE FROM TABLE_NAME WHERE [条件];
    条件查询有:
    AND 条件 OR 条件 AND & OR 条件 NOT 条件
    LIKE 条件 IN 条件 NOT IN 条件 BETWEEN 条件
     
    数据类型
    1.基本类型:Integer, Numeric, String, Boolean
    2.结构类型:Date/Time, Array, Range, UUID
    3.文档类型:JSON/JSONB, XML, Key-value(Hstore)
    4.几何类型:Point, Line, Circle, Polygon
    5.自定义类型:Composite, Custom Types
    数据的完整性
    1.唯一性,不为空
    2.主键
    3.外键
    4.排除约束
    5.显式锁定,咨询锁定
     并发性,性能
    1.索引
    2.高级索引
    3.复杂的查询计划期/优化器
    4.交互
    5.多版本并发控制(MVCC)
    6.读取查询的并行化和构建B树索引
    7.表分区
    8.Sql标准中定义的所有事物隔离级别,包括Serializable
    9.即时表达式汇编(JIT)
     
    可靠性,灾难恢复
    1.预写日志(WAL)
    2.复制:异步,同步,逻辑
    3.时间点恢复(pitr),主动备用
    4.表空间
     
    安全性
    1.身份验证:GSSAPI, SSPI, LDAP, SCRAM-SHA-256, 证书等
    2.强大的访问控制系统
    3.列和行级安全性
     
    可扩展性
    1.存储的功能和程序
    2.程序语言:PL/PGSQL, Perl, Python (more)
    3.外部数据包装器:使用标准SQL接口连接到其他数据库或流
    4.许多提供附加功能的扩展,包括PostGIS
     
    国际化,文本搜索
    1.支持国际字符集,例如通过ICU校对
    2.全文检索
    对比Mysql
    1.PostgreSQL的稳定性极强,Innodb等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足的进步,然而很多Mysql用户都遇到过Server级的数据库丢失的场景---Mysql系统库是MyISAM的,相较而言,PG数据库在这方面要好一些。
     
    2.任何系统都有他的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍然可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而MySQL明细出现一个波峰后下滑。
     
    3.PG多年在GIS领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG中有大量的字典、数组、bitmap等数据类型,相比之下MaySQL就差很多,insagram就是因为PG的空间数据库扩展POSTGIS远远强于MySQL的my spatial而采用PGSQL的。
     
    4.PG的“无锁定”特性非常突出,甚至包括vacuum这样的整理数据空间的操作,这个和PGSSQL的MVCC实现有关系。
     
    5.PG的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
     
    6.PG有极其强悍的SQL编程能力,有丰富的统计函数和统计语法支持,比如分析函数(Oracle的叫法,PG里面叫Window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MySQL就差的很远,很多分析功能那个都没有,腾讯内部数据存储主要是Mysql,但是主要的数据分析就是Hadoop+PGsql。
     
    7.PG的有很多中集群架构可以选择,plproxy可以支持语句级的镜像或者分片,slony可以进行字段级的同步设置,standby可以构建WAL文件级或者流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
     
    8.一般关系型数据库的字符串有限定长度8k左右,无限长Text类型的功能受限,只能作为外部大数据访问。而PG的TEXT类型可以直接方法,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库就可以省略了
     
    9.对于web应用来说,复制的特性很重要,Mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate, 是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时pgsql还提供stream复制。
     
    10.Pgsql对于numa架构的支持要比mysql强一些,比mysql对于读的性能要好些,pgsql提交可以完全异步,而mysql的内存表不够实用(表锁原因)
     
  • 相关阅读:
    RPC细谈
    RPC浅谈
    动态规划
    libco 的定时器实现: 时间轮
    一次HTTP请求的完整过程——协议篇(DNS、TCP、HTTP)
    多个CPU、多核CPU以及超线程(Hyper-Threading)
    Linux下which、whereis、locate、find命令的区别
    warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    使用OutputDebugString输出调试信息
    VS或windows用代码产生GUID
  • 原文地址:https://www.cnblogs.com/L-moye/p/13024293.html
Copyright © 2011-2022 走看看