PostgreSQL架构图
PostgresQL与oracle区别

POSTGRESQL:
SELECT * FROM (
SELECT * FROM (
SELECT * FROM SCHEMA.PREFIX_TABLE ORDER BY COL1 ALIAS1
) WHERE X=1 ORDER BY COL2 ALIAS2
analysis,这个只是把以前标记为不可用的空间设为空闲,那么在有新数据插入时可以复写这些
空间,但是analysis后表的存储大小不变,表内可能只有10M数据,但是原来有10M垃圾被标记
为空闲,这是表大小还是20M。如果要降表空间大小,就要用另一种回收方式做VACUUM full
这时相当于把表进行重建了,这时也会锁表哦,而且是表级锁哦。我感觉就像是Oracle要降水位
) WHERE Y=2 ORDER BY COL3
(7) PostgresQL中没有rownum,无法使用where rownum < = X的方法进行分页,取而代
之的是limit X,offset Y方法,而ORACLE中不允许使用LIMIT X的方法
ORACLE:
SELECT * FROM ( SELECT * FROM (SELECT * FROM SCHEMA.PREFIX_TABLE1 ORDER BY
CREATE OR REPLACE VIEW dual AS
SELECT NULL::"unknown"
WHERE 1 = 1;
ALTER TABLE dual OWNER TO postgres;
GRANT ALL ON TABLE dual TO postgres;
postgresql(pg)数据库简介-new数据库

postgresql(pg)数据库简介-new数据库1.什么是PostgreSqlPostgreSQL是⼀个功能强⼤的开源对象关系型数据库系统,他使⽤和扩展了SQL语⾔,并结合了许多安全存储和扩展最复杂数据⼯作负载的功能。
PostgreSQL的起源可以追溯到1986年,作为加州⼤学伯克利分校POSTGRES项⽬的⼀部分,并且在核⼼平台上进⾏了30多年的积极开发。
PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,强⼤的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如⼀地提供⾼性能和创新的解决⽅案。
PostgreSQL在所有主要操作系统开始使⽤PostgreSQL从未如此简单。
2.为什么要使⽤PostgreSQLPostgreSql提供了许多功能,旨在帮助开发⼈员构建应⽤程序,管理员保护数据完整性并且构建容错环境,并帮助你管理数据,⽆论数据集的⼤⼩。
除了免费和开源之外,Postgre SQL还具有⾼度的可扩展性。
例如,你可以定义⾃⼰的数据类型,构建⾃定义SQL函数(此sql函数在另⼀篇帖⼦讨论:点此跳转),甚⾄可以编写来⾃不同编程语⾔的代码,⽽不需要重新编译数据库。
PostgreSql试图符合SQL标准,在这种标准中,这种⼀致性不会与传统特性相⽭盾,或者可能导致糟糕的架构决策。
⽀持SQL标准所需的许多功能,但是有时候语法或者功能略有不同。
随着时间的推移,可以预期进⼀步向⼀致性迈进。
从2018年10⽉发布的11版本开始,PostgreSQL符合SQL:2011核⼼⼀致性的179个强制性功能中的⾄少160个,在此之前,没有任何关系型数据库符合此标准的完全符合。
3.下⾯是PostgreSQL中的各种功能介绍数据类型1.基本类型:Integer, Numeric, String, Boolean2.结构类型:Date/Time, Array, Range, UUID3.⽂档类型:JSON/JSONB, XML, Key-value(Hstore)4.⼏何类型:Point, Line, Circle, Polygon5.⾃定义类型:Composite, Custom Types数据的完整性1.唯⼀性,不为空2.主键3.外键4.排除约束5.显式锁定,咨询锁定并发性,性能1.索引2.⾼级索引3.复杂的查询计划期/优化器4.交互5.多版本并发控制(MVCC)6.读取查询的并⾏化和构建B树索引7.表分区8.Sql标准中定义的所有事物隔离级别,包括Serializable9.即时表达式汇编(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.全⽂检索对⽐Mysql1.PostgreSQL的稳定性极强,Innodb等引擎在崩溃、断电之类的灾难场景下抗打击能⼒有了长⾜的进步,然⽽很多Mysql⽤户都遇到过Server级的数据库丢失的场景---Mysql系统库是MyISAM的,相较⽽⾔,PG数据库在这⽅⾯要好⼀些。
Mysql和Postgresql(PGSQL)对比

Mysql和Postgresql(PGSQL)对⽐PostgreSQL与MySQL⽐较使⽤太⼴泛了,以⾄于我不得不将⼀些应⽤从mysql 迁移到postgresql, 很多开源软件都是以Mysql 作为标准,并且以Mysql 作为抽象基础的,但是具体使⽤过程中,发现Mysql 有很多问题,所以都迁移到postgresql上了,转⼀个Mysql 和Postgresql 对⽐的⽂章:PostgreSQL由于是类似Oracle的多进程框架,所以能⽀持⾼并发的应⽤场景,这点与Oracle数据库很像,所以把Oracle DBA转到PostgreSQL数据库上是⽐较容易的,毕竟PostgreSQL数据库与Oracle数据库很相似。
同时,PostgreSQL数据库的源代码要⽐MySQL数据库的源代码更容易读懂,如果团队的C语⾔能⼒⽐较强的知,就能在PostgreSQL数据库上做开发,⽐⽅说实现类似greenplum的系统,这样也能与现在的分布式趋势接轨。
为了说明PostgreSQL的功能,我下⾯简要对⽐⼀下PostgreSQL数据库与MySQL数据库之间的差异:我们先借助Jametong翻译的"从Oracle迁移到Mysql之前必须知道的50件事",看⼀看如何把Oracle转到MySQL中的困难:50 things to know before migrating Oracle to MySQLby Baron Schwartz,Translated by Jametong1. 对⼦查询的优化表现不佳.2. 对复杂查询的处理较弱3. 查询优化器不够成熟4. 性能优化⼯具与度量信息不⾜5. 审计功能相对较弱6. 安全功能不成熟,甚⾄可以说很粗糙.没有⽤户组与⾓⾊的概念,没有回收权限的功能(仅仅可以授予权限).当⼀个⽤户从不同的主机/⽹络以同样地⽤户名/密码登录之后,可能被当作完全不同的⽤户来处理.没有类似于Oracle的内置的加密功能.7. ⾝份验证功能是完全内置的.不⽀持LDAP,Active Directory以及其它类似的外部⾝份验证功能.8. Mysql Cluster可能与你的想象有较⼤差异.9. 存储过程与触发器的功能有限.10. 垂直扩展性较弱.11. 不⽀持MPP(⼤规模并⾏处理).12. ⽀持SMP(对称多处理器),但是如果每个处理器超过4或8个核(core)时,Mysql的扩展性表现较差.13. 对于时间、⽇期、间隔等时间类型没有秒以下级别的存储类型.14. 可⽤来编写存储过程、触发器、计划事件以及存储函数的语⾔功能较弱.15. 没有基于回滚(roll-back)的恢复功能,只有前滚(roll-forward)的恢复功能.16. 不⽀持快照功能.17. 不⽀持数据库链(database link).有⼀种叫做Federated的存储引擎可以作为⼀个中转将查询语句传递到远程服务器的⼀个表上,不过,它功能很粗糙并且漏洞很多.18. 数据完整性检查⾮常薄弱,即使是基本的完整性约束,也往往不能执⾏。
Postgresql索引结构-Btree

Postgresql索引结构-BtreeB-tree索引类型,实现为“btree”访问⽅法,适⽤于可以排序的数据。
换句话说,必须为数据类型定义“更⼤”、“更⼤或相等”、“更⼩”、“更⼩或相等”和“相等”操作符。
在B-tree的数据结构架构图中,B-tree的索引⾏被存在索引页中。
在存储叶⼦节点的页中,这些⾏包含建⽴索引的数据(键)和指向表⾏的指针(TIDs)。
在存储分⽀节点和根节点的页中,每⾏引⽤索引的⼀个⼦页,并包含该页中的最⼩值。
下⾯是⼀个使⽤整数键的字段索引的简化⽰例。
索引的第⼀页是⼀个元页,它引⽤索引根。
内部节点位于根的下⾯,⽽叶页位于最底部⾏。
向下箭头表⽰从叶节点到表⾏(TIDs)的引⽤。
B-trees 有以下重要特征:b树是平衡的,也就是说,每个叶页与根页之间⽤相同数量的内部页分隔。
因此,搜索任何值都需要同样的时间。
b树是多分⽀的,也就是说,每个页⾯(通常为8 KB)包含许多(数百)个TID。
因此,b树的深度⾮常⼩,对于⾮常⼤的表,实际上可以达到4-5。
索引中的数据按⾮降序排序(页⾯之间和每个页⾯内部),相同级别的页⾯通过双向列表相互连接。
因此,我们可以通过⼀个列表遍历⼀个或另⼀个⽅向,⽽不必每次都返回到根,来获得有序的数据集。
等值查询让我们考虑在树中通过条件“index -field = expression”来搜索⼀个值。
⽐如说,查询49。
搜索从根节点开始,我们需要确定要下降到哪个⼦节点。
由于知道根节点(4,32,64)中的键,因此我们计算出⼦节点中的值范围。
由于32≤49 < 64,我们需要下降到第⼆个⼦节点。
接下来,重复相同的过程,直到我们到达⼀个叶节点,从中可以获得所需的TID。
⾮等值查询当通过条件“indexed-field ≤ expression”(或“indexed-field ≥ expression”)进⾏搜索时,我们⾸先通过相等条件“indexed-field = expression”在索引中找到⼀个值(如果有的话),然后按照适当的⽅向遍历叶⼦页直到最后。
史上最全PostgreSQL体系结构

史上最全PostgreSQL体系结构墨墨导读:本文主要从日志文件、参数文件、控制文件、数据文件、redo日志(WAL)、后台进程这六个方面来讨论PostgreSQL的结构。
一、引言PostgreSQL是最像Oracle的开源数据库,我们可以拿MySQL和Oracle来比较学习它的体系结构,比较容易理解。
本文会讨论pg的如下结构:日志文件参数文件控制文件数据文件redo日志(WAL)后台进程PostgreSQL的主要结构如下:二、日志文件2.1 日志文件种类1)$PGDATA/log 运行日志(pg10之前为$PGDATA/pg_log)2)$PGDATA/pg_wal 重做日志(pg10之前为$PGDATA/pg_xlog)3)$PGDATA/pg_xact 事务提交日志(pg10之前为$PGDATA/pg_clog)4)服务器日志,可以在启动的时候指定,比如pg_ctl start -l ./alert.log2.2 运行日志2.2.1 运行日志参数运行日志主要相关的参数如下,默认没有开启的话没有log目录,开启后会自动生成。
参数可选值/说明log_destination = 'csvlog' # stderr, csvlog, syslog, and eventlog,csvlog requires logging_collector to be on一般选择这个,可以将csv日志导入数据库中查看logging_collector=on # Enable capturing of stderr and csvloginto log files选scv格式的日志必须设置这个参数on,修改需要重启log_directory = 'log'日志输出目录日志文件名字格式log_filename='postgresql-%Y-%m-%d_%H%M%S.loglog_file_mode=0600 # creation mode for log files 日志文件权限设置重用日志log_truncate_on_rotation =onlog_rotation_age = 1d多长时间重用日志log_rotation_size = 10MB日志达到多大重用log_min_messages=warning #debug5,debug4,debug3,debug2,debug1,info,notice,warning,error,log,fatal,paniclog_min_duration_statement慢sql记录(超过多长时间的sql)log_min_duration_statement= 60慢sql 记录(超过多长时间的sql )log_checkpoints = on记录checkpoint 操作log_connections = on记录会话连接操作log_disconnections = on记录会话断开操作log_duration = on记录sql 执行时间log_lock_waits=on# log lock waits >= deadlock_timeout 记录时间长的阻塞log_statement='ddl'# none, ddl, mod, all 记录ddl2.2.2 csv 日志入库这样就可以用sql 来查看了。
MPP大规模并行处理架构详解

MPP大规模并行处理架构详解面试官:说下你知道的M P P架构的计算引擎?这个问题不少小伙伴在面试时都遇到过,因为对M PP这个概念了解较少,不少人都卡壳了,但是我们常用的大数据计算引擎有很多都是M PP架构的,像我们熟悉的I mp al a、C l i c kH o u se、D rui d、Do ri s等都是MP P架构。
采用M PP架构的很多O L AP引擎号称:亿级秒开。
本文分为三部分讲解,第一部分详解M P P架构,第二部分剖析M P P架构与批处理架构的异同点,第三部分是采用M P P架构的O L A P引擎介绍。
一、M PP架构M P P是系统架构角度的一种服务器分类方法。
目前商用的服务器分类大体有三种:1.S M P(对称多处理器结构)2.N U M A(非一致存储访问结构)3.M P P(大规模并行处理结构)我们今天的主角是MP P,因为随着分布式、并行化技术成熟应用,MPP引擎逐渐表现出强大的高吞吐、低时延计算能力,有很多采用M PP架构的引擎都能达到“亿级秒开”。
先了解下这三种结构:1. SMP即对称多处理器结构,就是指服务器的多个C P U对称工作,无主次或从属关系。
S M P服务器的主要特征是共享,系统中的所有资源(如C PU、内存、I/O等)都是共享的。
也正是由于这种特征,导致了S MP服务器的主要问题,即扩展能力非常有限。
2. NUMA即非一致存储访问结构。
这种结构就是为了解决S MP扩展能力不足的问题,利用N U M A技术,可以把几十个C PU组合在一台服务器内。
N U M A的基本特征是拥有多个C P U模块,节点之间可以通过互联模块进行连接和信息交互,所以,每个C P U可以访问整个系统的内存(这是与M PP系统的重要区别)。
但是访问的速度是不一样的,因为C P U访问本地内存的速度远远高于系统内其他节点的内存速度,这也是非一致存储访问N U M A的由来。
PostgreSQL与MySQL对比(转载)
PostgreSQL与MySQL对⽐(转载)所有数据库对⽐可以参考:原⽂地址:⽐较版本:PostgreSQL 11 VS MySQL5.7(innodb引擎) Oracle官⽅社区版版权情况:PostgreSQL 11(免费开源)、MySQL5.7 Oracle官⽅社区版(免费开源)1. CPU限制PGSQL没有CPU核⼼数限制,有多少CPU核就⽤多少MySQL能⽤128核CPU,超过128核⽤不上2. 配置⽂件参数PGSQL⼀共有255个参数,⽤到的⼤概是80个,参数⽐较稳定,⽤上个⼤版本配置⽂件也可以启动当前⼤版本数据库MySQL⼀共有707个参数,⽤到的⼤概是180个,参数不断增加,就算⼩版本也会增加参数,⼤版本之间会有部分参数不兼容情况3. 第三⽅⼯具依赖情况PGSQL只有⾼可⽤集群需要依靠第三⽅中间件,例如:patroni+etcd、repmgrMySQL⼤部分操作都要依靠percona公司的第三⽅⼯具(percona-toolkit,XtraBackup),⼯具命令太多,学习成本⾼,⾼可⽤集群也需要第三⽅中间件,官⽅MGR集群还没成熟4. ⾼可⽤主从复制底层原理PGSQL物理流复制,属于物理复制,跟SQL Server镜像/AlwaysOn⼀样,严格⼀致,没有任何可能导致不⼀致,性能和可靠性上,物理复制完胜逻辑复制,维护简单MySQL主从复制,属于逻辑复制,(sql_log_bin、binlog_format等参数设置不正确都会导致主从不⼀致)⼤事务并⾏复制效率低,对于重要业务,需要依赖 percona-toolkit的pt-table-checksum和pt-table-sync⼯具定期⽐较和修复主从⼀致主从复制出错严重时候需要重搭主从MySQL的逻辑复制并不阻⽌两个不⼀致的数据库建⽴复制关系5. 从库只读状态PGSQL系统⾃动设置从库默认只读,不需要⼈⼯介⼊,维护简单MySQL从库需要⼿动设置参数super_read_only=on,让从库设置为只读,super_read_only参数有bug,链接:6. 版本分⽀PGSQL只有社区版,没有其他任何分⽀版本,PGSQL官⽅统⼀开发,统⼀维护,社区版有所有功能,不像SQL Server和MySQL有标准版、企业版、经典版、社区版、开发版、web版之分国内外还有⼀些基于PGSQL做⼆次开发的数据库⼚商,例如:Enterprise DB、瀚⾼数据库等等,当然这些只是⼆次开发并不算独⽴分⽀MySQL由于历史原因,分裂为三个分⽀版本,MariaDB分⽀、Percona分⽀、Oracle官⽅分⽀,发展到⽬前为⽌各个分⽀基本互相不兼容Oracle官⽅分⽀还有版本之分,分为标准版、企业版、经典版、社区版7. SQL特性⽀持PGSQLSQL特性⽀持情况⽀持94种,SQL语法⽀持最完善,例如:⽀持公⽤表表达式(WITH查询)MySQLSQL特性⽀持情况⽀持36种,SQL语法⽀持⽐较弱,例如:不⽀持公⽤表表达式(WITH查询)关于SQL特性⽀持情况的对⽐,可以参考:8. 主从复制安全性PGSQL同步流复制、强同步(remote apply)、⾼安全,不会丢数据PGSQL同步流复制:所有从库宕机,主库会罢⼯,主库⽆法⾃动切换为异步流复制(异步模式),需要通过增加从库数量来解决,⼀般⽣产环境⾄少有两个从库⼿动解决:在PG主库修改参数synchronous_standby_names ='',并执⾏命令: pgctl reload ,把主库切换为异步模式主从数据完全⼀致是⾼可⽤切换的第⼀前提,所以PGSQL选择主库罢⼯也是可以理解MySQL增强半同步复制,mysql5.7版本增强半同步才能保证主从复制时候不丢数据mysql5.7半同步复制相关参数:参数rpl_semi_sync_master_wait_for_slave_count 等待⾄少多少个从库接收到binlog,主库才提交事务,⼀般设置为1,性能最⾼参数rpl_semi_sync_master_timeout 等待多少毫秒,从库⽆回应⾃动切换为异步模式,⼀般设置为⽆限⼤,不让主库⾃动切换为异步模式所有从库宕机,主库会罢⼯,因为⽆法收到任何从库的应答包⼿动解决:在MySQL主库修改参数rpl_semi_sync_master_wait_for_slave_count=09. 多字段统计信息PGSQL⽀持多字段统计信息MySQL不⽀持多字段统计信息10. 索引类型PGSQL多种索引类型(btree , hash , gin , gist , sp-gist , brin , bloom , rum , zombodb , bitmap,部分索引,表达式索引)MySQLbtree 索引,全⽂索引(低效),表达式索引(需要建虚拟列),hash 索引只在内存表11. 物理表连接算法PGSQL⽀持 nested-loop join 、hash join 、merge joinMySQL只⽀持 nested-loop join12. ⼦查询和视图性能PGSQL⼦查询,视图优化,性能⽐较⾼MySQL视图谓词条件下推限制多,⼦查询上拉限制多13. 执⾏计划即时编译PGSQL⽀持 JIT 执⾏计划即时编译,使⽤LLVM编译器MySQL不⽀持执⾏计划即时编译14. 并⾏查询PGSQL并⾏查询(多种并⾏查询优化⽅法),并⾏查询⼀般多见于商业数据库,是重量级功能MySQL有限,只⽀持主键并⾏查询15. 物化视图PGSQL⽀持物化视图MySQL不⽀持物化视图16. 插件功能PGSQL⽀持插件功能,可以丰富PGSQL的功能,GIS地理插件,时序数据库插件,向量化执⾏插件等等MySQL不⽀持插件功能17. check约束PGSQL⽀持check约束MySQL不⽀持check约束,可以写check约束,但存储引擎会忽略它的作⽤,因此check约束并不起作⽤(mariadb ⽀持)18. gpu 加速SQLPGSQL可以使⽤gpu 加速SQL的执⾏速度MySQL不⽀持gpu 加速SQL 的执⾏速度19. 数据类型PGSQL数据类型丰富,如 ltree,hstore,数组类型,ip类型,text类型,有了text类型不再需要varchar,text类型字段最⼤存储1GBMySQL数据类型不够丰富20. 跨库查询PGSQL不⽀持跨库查询,这个跟Oracle 12C以前⼀样MySQL可以跨库查询21. 备份还原PGSQL备份还原⾮常简单,时点还原操作⽐SQL Server还要简单,完整备份+wal归档备份(增量)假如有⼀个三节点的PGSQL主从集群,可以随便在其中⼀个节点做完整备份和wal归档备份MySQL备份还原相对不太简单,完整备份+binlog备份(增量)完整备份需要percona的XtraBackup⼯具做物理备份,MySQL本⾝不⽀持物理备份时点还原操作步骤繁琐复杂22. 性能视图PGSQL需要安装pg_stat_statements插件,pg_stat_statements插件提供了丰富的性能视图:如:等待事件,系统统计信息等不好的地⽅是,安装插件需要重启数据库,并且需要收集性能信息的数据库需要执⾏⼀个命令:create extension pg_stat_statements命令否则不会收集任何性能信息,⽐较⿇烦MySQL⾃带PS库,默认很多功能没有打开,⽽且打开PS库的性能视图功能对性能有影响(如:内存占⽤导致OOM bug)23. 安装⽅式PGSQL有各个平台的包rpm包,deb包等等,相⽐MySQL缺少了⼆进制包,⼀般⽤源码编译安装,安装时间会长⼀些,执⾏命令多⼀些MySQL有各个平台的包rpm包,deb包等等,源码编译安装、⼆进制包安装,⼀般⽤⼆进制包安装,⽅便快捷24. DDL操作PGSQL加字段、可变长字段类型长度改⼤不会锁表,所有的DDL操作都不需要借助第三⽅⼯具,并且跟商业数据库⼀样,DDL操作可以回滚,保证事务⼀致性MySQL由于⼤部分DDL操作都会锁表,例如加字段、可变长字段类型长度改⼤,所以需要借助percona-toolkit⾥⾯的pt-online-schema-change⼯具去完成操作将影响减少到最低,特别是对⼤表进⾏DDL操作DDL操作不能回滚25. ⼤版本发布速度PGSQLPGSQL每年⼀个⼤版本发布,⼤版本发布的第⼆年就可以上⽣产环境,版本迭代速度很快PGSQL 9.6正式版推出时间:2016年PGSQL 10 正式版推出时间:2017年PGSQL 11 正式版推出时间:2018年PGSQL 12 正式版推出时间:2019年MySQLMySQL的⼤版本发布⼀般是2年~3年,⼀般⼤版本发布后的第⼆年才可以上⽣产环境,避免有坑,版本发布速度⽐较慢MySQL5.5正式版推出时间:2010年MySQL5.6正式版推出时间:2013年MySQL5.7正式版推出时间:2015年MySQL8.0正式版推出时间:2018年26. returning语法PGSQL⽀持returning语法,returning clause ⽀持 DML 返回 Resultset,减少⼀次 Client <-> DB Server 交互MySQL不⽀持returning语法27. 内部架构PGSQL多进程架构,并发连接数不能太多,跟Oracle⼀样,既然跟Oracle⼀样,那么很多优化⽅法也是相通的,例如:开启⼤页内存MySQL多线程架构,虽然多线程架构,但是官⽅有限制连接数,原因是系统的并发度是有限的,线程数太多,反⽽系统的处理能⼒下降,随着连接数上升,反⽽性能下降⼀般同时只能处理200 ~300个数据库连接28. 聚集索引PGSQL不⽀持聚集索引,PGSQL本⾝的MVCC的实现机制所导致MySQL⽀持聚集索引29. 空闲事务终结功能PGSQL通过设置 idle_in_transaction_session_timeout 参数来终⽌空闲事务,⽐如:应⽤代码中忘记关闭已开启的事务,PGSQL会⾃动查杀这种类型的会话事务MySQL不⽀持终⽌空闲事务功能30. 应付超⼤数据量PGSQL不能应付超⼤数据量,由于PGSQL本⾝的MVCC设计问题,需要垃圾回收,只能期待后⾯的⼤版本做优化MySQL不能应付超⼤数据量,MySQL⾃⾝架构的问题31. 分布式演进PGSQLHTAP数据库:cockroachDB、腾讯Tbase分⽚集群: Postgres-XC、Postgres-XLMySQLHTAP数据库:TiDB分⽚集群:各种各样的中间件,不⼀⼀列举32. 数据库的⽂件名和命名规律PGSQLPGSQL在这⽅⾯做的⽐较不好,DBA不能在操作系统层⾯(停库状态下)看清楚数据库的⽂件名和命名规律,⽂件的数量,⽂件的⼤⼩⼀旦操作系统发⽣⽂件丢失或硬盘损坏,⾮常不利于恢复,因为连名字都不知道PGSQL表数据物理⽂件的命名/存放规律是:在⼀个表空间下⾯,如果没有建表空间默认在默认表空间也就是base⽂件夹下,例如:/data/base/16454/3599base:默认表空间pg_default所在的物理⽂件夹16454:表所在数据库的oid3599:就是表对象的oid,当然,⼀个表的⼤⼩超出1GB之后会再⽣成多个物理⽂件,还有表的fsm⽂件和vm⽂件,所以⼀个⼤表实际会有多个物理⽂件由于PGSQL的数据⽂件布局内容太多,⼤家可以查阅相关资料当然这也不能全怪PGSQL,作为⼀个DBA,时刻做好数据库备份和容灾才是正道,做介质恢复⼀般是万不得已的情况下才会做MySQL数据库名就是⽂件夹名,数据库⽂件夹下就是表数据⽂件,每个表都有对应的frm⽂件和ibd⽂件,存储元数据和表/索引数据,清晰明了,做介质恢复或者表空间传输都很⽅便33. 权限设计PGSQLPGSQL在权限设计这块是⽐较坑爹,抛开实例权限和表空间权限,PGSQL的权限层次有点像SQL Server,db=》schema=》object要说权限,这⾥要说⼀下Oracle,⽤Oracle来类⽐在ORACLE 12C之前,实例与数据库是⼀对⼀,也就是说⼀个实例只能有⼀个数据库,不像MySQL和SQL Server⼀个实例可以有多个数据库,并且可以随意跨库查询⽽PGSQL不能跨库查询的原因也是这样,PGSQL允许建多个数据库,跟ORACLE类⽐就是有多个实例(之前说的实例与数据库是⼀对⼀)⼀个数据库相当于⼀个实例,因为PGSQL允许有多个实例,所以PGSQL单实例不叫⼀个实例,叫集簇(cluster),集簇这个概念可以查阅PGSQL的相关资料PGSQL⾥⾯⼀个实例/数据库下⾯的schema相当于数据库,所以这个schema的概念对应MySQL的database注意点:正因为是⼀个数据库相当于⼀个实例,PGSQL允许有多个实例/数据库,所以数据库之间是互相逻辑隔离的,导致的问题是,不能⼀次对⼀个PGSQL集簇下⾯的所有数据库做操作必须要逐个逐个数据库去操作,例如上⾯说到的安装pg_stat_statements插件,如果您需要在PGSQL集簇下⾯的所有数据库都做性能收集的话,需要逐个数据库去执⾏加载命令⼜例如跨库查询需要dblink插件或fdw插件,两个数据库之间做查询相当于两个实例之间做查询,已经跨越了实例了,所以需要dblink插件或fdw插件,所以道理⾮常简单权限操作也是⼀样逐个数据库去操作,还有⼀个就是PGSQL虽然像SQL Server的权限层次结构db=》schema=》object,但是实际会⽐SQL Server要复杂⼀些,还有就是新建的表还要另外授权在PGSQL⾥⾯,⾓⾊和⽤户是⼀样的,对新⼿⽤户来说有时候会傻傻分不清,也不知道怎么去⽤⾓⾊,所以PGSQL在权限设计这⼀块确实⽐较坑爹MySQL使⽤mysql库下⾯的5个权限表去做权限映射,简单清晰,唯⼀问题是缺少权限⾓⾊user表db表host表tables_priv表columns_priv表34. 发展历史PGSQL在1995年,开发⼈员Andrew Yu和Jolly Chen在Postgres中添加了⼀个SQL(Structured Query Language,结构化查询语⾔)翻译程序,该版本叫做Postgres95,在开放源代码社区发放。
PostgreSQL数据库介绍
PostgreSQL是什么
PostgreSQL的发布遵从经典的 BSD 版权。它允许用户不限目的地使用 PostgreSQL,甚至你可以销售 PostgreSQL 而不含源代码也可以,唯一的限制 就是你不能因软体自身问题而向我们追诉法律责任,另外就是要求所有的软体拷 贝中须包括以下版权声明。下面就是我们所使用的BSD版权声明内容:
PostgreSQL发展历程
PostgreSQL是什么
伯克利的 POSTGRES 项目:
Michael Stonebraker 领导的 POSTGRES 项目是由防务高级研究项目局( DARPA), 陆军研究办公室(ARO),国家科学基金(NSF), 以及 ESL, Inc 共同赞助的。POSTGRES 的实现始于 1986 年, 第一个"演示性"系统在 1987 年便可使用了, 并且在 1988 年的 ACM-SIGMOD 大会上展出。在 1989 年六 月发布了版本 1给一些外部的用户使用。用于源代码维护的时间日益增加 占用了 太多本应该用于数据库研究的时间, 为了减少支持的负担,伯克利的 POSTGRES 项目在版本 4.2 时正式终止。
Postgres8.X:
可以在windows下运行,事务保存点功能,改变字段的类型,表空间
即时恢复: 即时恢复允许对服务器进行连续的备份。你既可以恢复到失败那个点 ,也可以恢复到以前的任意事务。
新的 Perl 服务器端编程语言
PostgreSQL9.X
HOT standby功能
PostgreSQL版权是什么?
PostgreSQL 是自由免费的,并且所有源代码都可以获得。
PostgreSQL 的开发队伍主要为志愿者,他们遍布世界各地并通过互联网进行联 系,这是一个社区开发项目,它不被任何公司控制。
大数据平台架构-巨衫
1。
技术实现框架1.1大数据平台架构1.1.1大数据库是未来提升业务能力的关键要素以“大数据”为主导的新一波信息化浪潮正席卷全球,成为全球范围内加速企业技术创新、推动政府职能转变、引领社会管理变革的利器。
目前,大数据技术已经从技术研究步入落地实施阶段,数据资源成为未来业务的关键因素。
通过采集和分析数据,我们可以获知事物背后的原因,优化生产/生活方式,预知未来的发展动态。
经过多年的信息化建设,省地税已经积累了丰富的数据资源,为下一步的优化业务、提升管理水平,奠定了坚实的基础.未来的数据和业务应用趋势,大数据才能解决这些问题。
《1.巨杉软件SequoiaDB产品和案例介绍v2》P12 “银行的大数据资产和应用“,说明税务数据和业务分析,需要用大数据解决。
《1。
巨杉软件SequoiaDB产品和案例介绍v2》P14 “大数据与传统数据处理",说明处理模式的差异。
1.1.2大数据平台总体框架大数据平台总体技术框架分为数据源层、数据接口层、平台架构层、分析工具层和业务应用层.如下图所示:(此图要修改,北明)数据源层:包括各业务系统、服务系统以及社会其它单位的结构化数据和非结构化数据;数据接口层:是原始数据进入大数据库的入口,针对不同类型的数据,需要有针对性地开发接口,进行数据的缓冲、预处理等操作;平台架构层:基于大数据系统存储各类数据,进行处理?;分析工具层:提供各种数据分析工具,例如:建模工具、报表开发、数据分析、数据挖掘、可视化展现等工具;业务应用层:根据应用领域和业务需求,建立分析模型,使用分析工具,发现获知事物背后的原因,预知未来的发展趋势,提出优化业务的方法。
例如,寻找服务资源的最佳配置方案、发现业务流程中的短板进行优化等。
1.1.3大数据平台产品选型针对业务需求,我们选择巨杉数据库作为大数据基础平台.1.1.3.1传统数据库与大数据库的差异(丰富一下内容,说明应该选择大数据平台)传统的关系型数据库,只能存储结构化数据,在当前互联网快速发展的时代,僵硬的数据模型已经无法适应快速开发、快速迭代的互联网思维。
postgresql集群的搭建
postgresql集群的搭建⽬录架构图部署详情postgresql的安装与配置pgpool的安装与配置写在安装前postgresql是⼀款很强⼤的数据库,具体有多强⼤呢,请⾕歌。
⽹上的相关资料不是很多,参考了⼤神们的⽂档,结合⾃⼰趟了的坑,写了pg集群的安装⽂档。
可能有⼀些参数没有配置好,希望⼤神们指出,谢谢。
参照本⽂档,基本能实现pg的⾼可⽤,稍后会写出测试⽂档。
架构图部署详情ip host系统vip部署192.168.123.180master CentOS 6.8192.168.123.183postgresql、pgpool192.168.123.181slave1CentOS 6.8192.168.123.183postgresql、pgpool192.168.123.182slave2CentOS 6.8192.168.123.183postgresqlpostgresql的安装1、安装2、安装:yum install -y postgresql95-libs-9.5.8-1PGDG.rhel6.x86_64.rpmyum install -y postgresql95-contrib-9.5.8-1PGDG.rhel6.x86_64.rpmyum install -y postgresql95-9.5.8-1PGDG.rhel6.x86_64.rpmyum install -y postgresql95-server-9.5.8-1PGDG.rhel6.x86_64.rpm3、初始化db:service postgresql-9.5 initdb4、设置为开机启动:chkconfig postgresql-9.5 on5、安装的⽬录:/var/lib/pgsql/9.5配置⽩名单与流复制1、 master的配置PostgreSQL流复制默认是异步的。
在主服务器上提交事务和从服务器上变化可见之间有⼀个⼩的延迟,这个延迟远⼩于基于⽂件⽇志传送,通常1秒能完成。