阿里云宣布与数据库厂商EnterpriseDB(EDB)达成深度合作 提供优秀的Oracle兼容性
自2015年起,阿里云已经与EnterpriseDB公司就云数据库产品进行业务合作,基于阿里云飞天架构及EDB Postgres Advanced Server推出 云数据库PPAS版。针对Postgres市场的持续升温,9月20日,阿里云宣布与EDB公司加强源代码级别的技术合作,为全球用户提供基于云计算架构,更优秀的Postgres云数据库服务及产品。
阿里云数据库事业部总经理与EnterpriseDB CEO达成战略合作
EnterpriseDB基于PostgreSQL开源关系型数据库为用户提供优秀的Oracle兼容性。EnterpriseDB所服务的用户包括众多“全球财富500”企业,为他们提供基于Postgres数据库的企业级解决方案。EDB Postgres协助用户降低迁移到Postgres数据库的技术难度,为企业用户大量节省总体TCO成本。
“让不同数据库技术背景的用户,都可以轻松地迁移并使用云数据库技术,对于云计算的发展至关重要。”阿里云总裁 胡晓明 说,“我们将通过与EnterpriseDB公司的合作,加强云数据库PostgreSQL及PPAS版的深度合作,为用户迁移上云提供更为广泛及灵活的数据库产品及解决方案。”
“在过去的3年中,阿里云已经成为EnterpriseDB公司重要的合作伙伴。扩大双方的技术合作,将为阿里云的客户带来更大的价值。”EnterpriseDB总裁兼首席执行官Ed Boyajian“展望未来,双方将为中国和世界各地的客户提供更好的服务。”
关于阿里云创立于2009年,是全球领先的云计算及人工智能科技公司,为200多个国家和地区的企业、开发者和政府机构提供服务。2017年1月阿里云成为奥运会全球指定云服务商。2017年8月阿里巴巴财报数据显示,阿里云付费云计算用户超过100万。阿里云致力于以在线公共服务的方式,提供安全、可靠的计算和数据处理能力,让计算和人工智能成为普惠科技。阿里云在全球18个地域开放了49个可用区(了解全球基础设施),为全球数十亿用户提供可靠的计算支持。此外,阿里云为全球客户部署200多个飞天数据中心,通过底层统一的飞天操作系统,为客户提供全球独有的混合云体验。更多信息请浏览:www.aliyun.com。
关于EnterpriseDBEnterpriseDB (EDB)是一家数据库平台提供商,为企业的数字化业务,提供重要的开源数据库平台,以实现新的应用程序开发、业务上云重构、现代化应用改造,和数据库过保迁移。EDB Postgres平台集成了企业级的技术和基础设施,用于混合云管理、数据集成和数据仓库。我们的客户都已经受益于此高性能、高可靠、灵活、开放,且高性价比的数据库管理平台。EnterpriseDB总部设在马萨诸塞州的贝德福德,更多信息请浏览: www.EnterpriseDB.com。
文章
人工智能 · Oracle · 关系型数据库 · 数据库 · 云计算
2018-09-22
为什么可以先上云再去O
楚人有涉江者,其剑自舟中坠于水,遽契其舟,曰:“是吾剑之所从坠。”舟止,从其所契者入水求之。舟已行矣,而剑不行,求剑若此,不亦惑乎?——《吕氏春秋.察今》
最近碰到一个项目,要将线下的Oracle 数据库迁移上云,且时间紧迫。我们知道阿里云有一整套的去O上云工具箱,包括迁移工具ADAM、高度兼容Oracle的云数据库PPAS或PolarDB Oracle兼容版,但使用这些工具进行迁移时难免会涉及到一些前期的调研分析和评估,甚至要对部分应用代码进行修改调整,假如客户要马上上云,怎么办?
为此我的建议是:可以先上云再去O,直接用单机ECS运行Oracle的单实例,并在云上去O。
看到这里,有一些架构师肯定认为这样并不可行:用单机来运行Oracle,太不靠谱了吧?因为一般Oracle 数据承载的生产系统一般都是关键业务系统,对性能和可靠性的要求都非常高,单机能满足么?
要说硬件PC服务器的确有点悬,但阿里云ECS则另当别论。原因是在云计算在诞生之初,单个计算节点的可靠性确实不高,当时主要是通过云原生架构来解决高可用问题。但在国内由于IT技术发展的水平并不均衡,在云计算的初始用户中运行着大量的传统应用,即便到今天为止还依然存在大量的传统架构应用无法马上迁移到云原生架构,因此国内的云计算厂商都在单计算节点的可靠性上下足了功夫,其中尤以阿里云为甚,通过主动的基于AI大数据分析的故障预警和在线热迁移,阿里云ECS的可靠性和性能已经无限逼近小型机。请看数据:
阿里云ECS的承诺SLA为每个运行周期(月)不低于99.975%,相当于停机时间在10分钟以内,而一个月的时间足够完成去O了。
阿里云ECS最大支持到208 vCPU,3072 GiB内存,可碾压绝大多数小型机。
阿里云ESSD 单盘性能可达100万IOPS,妥妥中高端存储的性能水平。
此外,在云上还有额外的保障性措施:
阿里云DBS服务,支持对Oracle数据库的DataGuard 在线实时备份,并可做到秒级恢复。
阿里云ECS快照服务,支持对每块磁盘保留1000个自动快照,一个小时生成一个快照也可以保留一个月以上。另外通过快照可以随时生成生产系统的副本用于迁移验证测试。
阿里云堡垒机,去O服务团队不用去客户现场也能通过堡垒机统一登录并对所有操作进行录像留存。
先上云,再去O,解锁去O新姿势。
文章
存储 · 弹性计算 · 人工智能 · Oracle · Cloud Native · 架构师 · 关系型数据库 · 数据库 · 云计算 · PolarDB
2020-08-22
PostgreSQL Oracle 兼容性 - Oracle 19c 新特性在PostgreSQL中的使用
背景
《PostgreSQL 覆盖 Oracle 18c 重大新特性》
Oracle 19c 新特性摘自盖老师《Oracle 19c 新特性及官方文档抢鲜下载》文章,其中有一些特性在PostgreSQL中很早以前已经支持。本文旨在介绍PG如何使用这些特性。
1.Data Guard 备库DML自动重定向
在使用 ADG 作为备库进行读写分离部署时,可能因为应用的原因,会有偶然的DML操作发送到备库上,在 19c 中,Oracle 支持自动重定向备库 DML,具体执行步骤为:
更新会自动重定向到主库; 主库执行更新、产生和发送Redo日志到备库;
在Redo备库应用后,ADG会话会透明的看到更新信息的落地实施;
这一特性可以通过在系统级或者会话级设置参数 ADG_REDIRECT_DML 参数启用,通过这种方式,ADG 会话的 ACID 一致性得以保持,同时透明的支持『多数读,偶尔更新』应用的自然读写分离配置。
这个特性的引入,将进一步的增加 ADG 的灵活性,帮助用户将备库应用的更加充分。
PostgreSQL 如何支持
1 修改内核支持
PostgreSQL standby与primary通信采用流复制协议
https://www.postgresql.org/docs/11/protocol-replication.html
如果要让PG支持只读从库转发DML到上游节点,首先需要协议层支持。
digoal@pg11-test-> psql
psql (11.1)
Type "help" for help.
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)
postgres=# create table a (id int);
ERROR: cannot execute CREATE TABLE in a read-only transaction
postgres=# \set VERBOSITY verbose
postgres=# create table a (id int);
ERROR: 25006: cannot execute CREATE TABLE in a read-only transaction
LOCATION: PreventCommandIfReadOnly, utility.c:246
postgres=# insert into a values (1);
ERROR: 25006: cannot execute INSERT in a read-only transaction
LOCATION: PreventCommandIfReadOnly, utility.c:246
当前写操作报错,判定为如下SQL请求类型时,直接报错。
/*
* check_xact_readonly: is a utility command read-only?
*
* Here we use the loose rules of XactReadOnly mode: no permanent effects
* on the database are allowed.
*/
static void
check_xact_readonly(Node *parsetree)
{
/* Only perform the check if we have a reason to do so. */
if (!XactReadOnly && !IsInParallelMode())
return;
/*
* Note: Commands that need to do more complicated checking are handled
* elsewhere, in particular COPY and plannable statements do their own
* checking. However they should all call PreventCommandIfReadOnly or
* PreventCommandIfParallelMode to actually throw the error.
*/
switch (nodeTag(parsetree))
{
case T_AlterDatabaseStmt:
case T_AlterDatabaseSetStmt:
case T_AlterDomainStmt:
case T_AlterFunctionStmt:
case T_AlterRoleStmt:
case T_AlterRoleSetStmt:
case T_AlterObjectDependsStmt:
case T_AlterObjectSchemaStmt:
case T_AlterOwnerStmt:
case T_AlterOperatorStmt:
case T_AlterSeqStmt:
case T_AlterTableMoveAllStmt:
case T_AlterTableStmt:
case T_RenameStmt:
case T_CommentStmt:
case T_DefineStmt:
case T_CreateCastStmt:
case T_CreateEventTrigStmt:
case T_AlterEventTrigStmt:
case T_CreateConversionStmt:
case T_CreatedbStmt:
case T_CreateDomainStmt:
case T_CreateFunctionStmt:
case T_CreateRoleStmt:
case T_IndexStmt:
case T_CreatePLangStmt:
case T_CreateOpClassStmt:
case T_CreateOpFamilyStmt:
case T_AlterOpFamilyStmt:
case T_RuleStmt:
case T_CreateSchemaStmt:
case T_CreateSeqStmt:
case T_CreateStmt:
case T_CreateTableAsStmt:
case T_RefreshMatViewStmt:
case T_CreateTableSpaceStmt:
case T_CreateTransformStmt:
case T_CreateTrigStmt:
case T_CompositeTypeStmt:
case T_CreateEnumStmt:
case T_CreateRangeStmt:
case T_AlterEnumStmt:
case T_ViewStmt:
case T_DropStmt:
case T_DropdbStmt:
case T_DropTableSpaceStmt:
case T_DropRoleStmt:
case T_GrantStmt:
case T_GrantRoleStmt:
case T_AlterDefaultPrivilegesStmt:
case T_TruncateStmt:
case T_DropOwnedStmt:
case T_ReassignOwnedStmt:
case T_AlterTSDictionaryStmt:
case T_AlterTSConfigurationStmt:
case T_CreateExtensionStmt:
case T_AlterExtensionStmt:
case T_AlterExtensionContentsStmt:
case T_CreateFdwStmt:
case T_AlterFdwStmt:
case T_CreateForeignServerStmt:
case T_AlterForeignServerStmt:
case T_CreateUserMappingStmt:
case T_AlterUserMappingStmt:
case T_DropUserMappingStmt:
case T_AlterTableSpaceOptionsStmt:
case T_CreateForeignTableStmt:
case T_ImportForeignSchemaStmt:
case T_SecLabelStmt:
case T_CreatePublicationStmt:
case T_AlterPublicationStmt:
case T_CreateSubscriptionStmt:
case T_AlterSubscriptionStmt:
case T_DropSubscriptionStmt:
PreventCommandIfReadOnly(CreateCommandTag(parsetree));
PreventCommandIfParallelMode(CreateCommandTag(parsetree));
break;
default:
/* do nothing */
break;
}
}
2 修改内核支持
利用fdw,读写操作重新向到FDW表(fdw为PostgreSQL的外部表,可以重定向到主节点)
例如
create rule r1 as on insert to a where pg_is_in_recovery() do instead insert into b values (NEW.*);
这个操作需要一个前提,内核层支持standby可写FDW表。
并且这个方法支持的SQL语句有限,方法1更加彻底。
3 citus插件,所有节点完全对等,所有节点均可读写数据库
《PostgreSQL sharding : citus 系列7 - topn 加速(count(*) group by order by count(*) desc limit x) (use 估值插件 topn)》
《PostgreSQL sharding : citus 系列6 - count(distinct xx) 加速 (use 估值插件 hll|hyperloglog)》
《PostgreSQL sharding : citus 系列5 - worker节点网络优化》
《PostgreSQL sharding : citus 系列4 - DDL 操作规范 (新增DB,TABLE,SCHEMA,UDF,OP,用户等)》
《PostgreSQL sharding : citus 系列3 - 窗口函数调用限制 与 破解之法(套用gpdb执行树,分步执行)》
《PostgreSQL sharding : citus 系列2 - TPC-H》
《PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)》
2.Oracle Sharding 特性的多表家族支持
在Oracle Sharding特性中,被分片的表称为 Sharded table,这些sharded table的集合称为表家族(Table Family),表家族之中的表具备父-子关系,一个表家族中没有任何父表的表叫做根表(root table),每个表家族中只能有一个根表。表家族中的所有Sharded table都按照相同的sharding key(主键)来分片。
在12.2,在一个SDB中只支持一个表家族,在 19c 中,SDB 中允许存在多个表家族,每个通过不同的 Sharding Key进行分片,这是 Sharding 特性的一个重要增强,有了 Multiple Table Families 的支持,Sharding 才可能找到更多的应用场景。
PostgreSQL 如何支持
PostgreSQL sharding支持非常丰富:
1、plproxy
《PostgreSQL 最佳实践 - 水平分库(基于plproxy)》
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 4 水平分库(plproxy) 之 节点扩展》
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 3 水平分库(plproxy) vs 单机 性能》
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 2 教你RDS PG的水平分库(plproxy)》
《ZFS snapshot used with PostgreSQL PITR or FAST degrade or PG-XC GreenPlum plproxy MPP DB's consistent backup》
《A Smart PostgreSQL extension plproxy 2.2 practices》
《使用Plproxy设计PostgreSQL分布式数据库》
2、citus
《PostgreSQL sharding : citus 系列7 - topn 加速(count(*) group by order by count(*) desc limit x) (use 估值插件 topn)》
《PostgreSQL sharding : citus 系列6 - count(distinct xx) 加速 (use 估值插件 hll|hyperloglog)》
《PostgreSQL sharding : citus 系列5 - worker节点网络优化》
《PostgreSQL sharding : citus 系列4 - DDL 操作规范 (新增DB,TABLE,SCHEMA,UDF,OP,用户等)》
《PostgreSQL sharding : citus 系列3 - 窗口函数调用限制 与 破解之法(套用gpdb执行树,分步执行)》
《PostgreSQL sharding : citus 系列2 - TPC-H》
《PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)》
3、pg-xl
https://www.postgres-xl.org/
4、antdb
https://github.com/ADBSQL/AntDB
5、sharding sphere
http://shardingsphere.apache.org/
6、乘数科技出品勾股数据库,使用fdw支持sharding
7、pg_pathman+FDW支持sharding
https://github.com/postgrespro/pg_shardman
《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》
3.透明的应用连续性支持增强
在Oracle RAC集群中,支持对于查询的自动切换,当一个节点失效,转移到另外一个节点,在19c中,Oracle 持续改进和增强了连续性保持,数据库会自动记录会话状态,捕获用于重演的信息,以便在切换时,在新节点自动恢复事务,使DML事务同样可以获得连续性支持:
在事务提交后自动禁用状态捕获,因为提交成功的事务将不再需要在会话级恢复;
在事务开始时,自动重新启用状态跟踪;
PostgreSQL 如何支持
要将一个会话内的请求转移到另一个节点,需要支持同样的快照视角,否则会出现查询不一致的情况。PostgreSQL支持快照的导出,分析给其他会话,使得所有会话可以处于同一视角。
《PostgreSQL 共享事务快照功能 - PostgreSQL 9.2 can share snapshot between multi transactions》
这个技术被应用在:
1、并行一致性逻辑备份
2、会话一致性的读写分离
《PostgreSQL 10.0 preview 功能增强 - slave支持WAITLSN 'lsn', time;用于设置安全replay栅栏》
为了能够支持透明应用连续性,1、可以在SQL中间层支持(例如为每个会话创建快照,记录快照信息,转移时在其他节点建立连接并导入快照),2、SQL驱动层支持,3、也可以在内核层支持转移。
会增加一定的开销。
4.自动化索引创建和实施
对于关系型数据库来说,索引是使得查询加速的重要手段,而如何设计和创建有效的索引,长期以来是一项复杂的任务。
在 Oracle 19c 中,自动化索引创建和实施技术被引入进来,Oracle 通过模拟人工索引的思路,建立了内置的专家系统。
数据库内置的算法将会通过捕获、识别、验证、决策、在线验证、监控的全流程管控索引自动化的过程。
这一特性将会自动帮助用户创建有效的索引,并通过提前验证确保其性能和有效性,并且在实施之后进行监控,这一特效将极大缓解数据库索引维护工作。
自动化还将删除由新创建的索引(逻辑合并)废弃的索引,并删除自动创建但长时间未使用的索引。
PostgreSQL 如何支持
1、EDB PPAS版本,支持自动建议索引
《PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) 索引推荐功能使用》
2、PG社区版本,根据统计信息,top SQL,LONG SQL等信息,自动创建索引
《PostgreSQL SQL自动优化案例 - 极简,自动推荐索引》
《自动选择正确索引访问接口(btree,hash,gin,gist,sp-gist,brin,bitmap...)的方法》
PG 虚拟索引
《PostgreSQL 索引虚拟列 - 表达式索引 - JOIN提速》
《PostgreSQL 虚拟|虚假 索引(hypothetical index) - HypoPG》
PostgreSQL 优势
PG 支持9种索引接口(btree, hash, gin, gist, spgist, brin, bloom, rum, zombodb),同时PG支持索引接口扩展,支持表达式索引,支持partial索引。以支持各种复杂业务场景。
5.多实例并行重做日志应用增强
在Oracle Data Guard环境中,备库的日志应用速度一直是一个重要挑战,如果备库不能够及时跟上主库的步调,则可能影响备库的使用。
自Oracle 12.2 版本开始,支持多实例并行应用,这极大加快了恢复进度,在 18c 中,开始支持 In-Memory 列式存储,在 19c 中,并行应用开始支持 In-Memory列式存储。
PostgreSQL 如何支持
对于逻辑从库,支持一对一,一对多,多对一,多对多的部署方法。PG 逻辑订阅每个通道一个worker process,可以通过创建多个订阅通道来实现并行。
对于物理从库,异步STANDBY的WAL APPLY延迟通常是毫秒级。
6.Oracle的混合分区表支持
在 19c 中,Oracle 增强了分区特性,可以将外部对象存储上的文件,以外部表的方式链接到分区中,形成混合分区表,借助这个特性,Oracle 将数据库内外整合打通,冷数据可以剥离到外部存储,热数据在数据库中在线存储。
这个特性借助了外部表的特性实现,以下是一个示例:
CREATE TABLE orders ( order_idnumber,
order_dateDATE, … )
EXTERNAL PARTITION ATTRIBUTES
( TYPE oracle_loaderDEFAULTDIRECTORY data_dir
ACCESS PARAMETERS (..) REJECT LIMIT unlimited)
PARTITION BY RANGE(order_date)
( partition q1_2015 values less than(‘2014-10-01’)
EXTERNAL LOCATION (‘order_q1_2015.csv’),
partition q2_2015 values less than (‘2015-01-01’),
partition q3_2015 values less than (‘2015-04-01’),
partition q4_2015 values less than (‘2015-07-01’));
PostgreSQL 如何支持
PostgreSQL 的fdw为外部存储(可以是外部任意数据源,包括文件,DB,WWW,S3,OSS等)。
使用PG继承技术,即可完成分区的混合存储(本地存储,外部存储混合),甚至SHARDING。
《ApsaraDB的左右互搏(PgSQL+HybridDB+OSS) - 解决OLTP+OLAP混合需求》
《PostgreSQL 9.6 sharding based on FDW & pg_pathman》
7.在线维护操作增强
在不同版本中,Oracle 持续增强在线维护操作,例如在 12.2 开始支持的Online Move、在线修改普通表为分区表等特性。
在19c 中,持续增强了智能的、细粒度的游标失效控制,将DDL操作对于游标失效的影响降至最低,例如,在 19c 中,comment on table的操作,将不会引起游标的失效。
针对分区维护的操作,例如Truncate分区等,Oracle 将进行细粒度的控制,和DDL操作无关的SQL将不受DDL失效影响。
PostgreSQL 如何支持
PostgreSQL 设计之初就支持了DDL事务,可以将DDL与DML混合在一个事务中处理。
begin;
insert into tbl values (...);
drop table xx;
create table xx;
alter table xx;
insert xx;
end;
又例如切换表名,可以封装为一个事务。
另外对于普通表转分区表,可以这样操作:
《PostgreSQL 普通表在线转换为分区表 - online exchange to partition table》
8.自动的统计信息管理
随着表数据的变化,优化器表数据统计数据将近实时刷新,以防止次优执行计划
统计的在线维护内置于直接路径加载操作中
当数据显着变化时运行自动统计信息收集作业,例如。,自上次收集统计信息以来,表中超过10%的行被添加/更改
第一个看到需要重新编译SQL游标的会话(例如,由于新的优化器统计信息)执行重新编译
其他会话继续使用旧的SQL游标,直到编译完成
避免因重新编译而导致大量会话停顿
PostgreSQL 如何支持
PostgreSQL autovacuum 设计之初就是采用的动态统计信息收集,并且支持到了集群、TABLE级别可设置,用户可以根据不同表的负载情况,设置自动收集统计信息的阈值。
相关参数
autovacuum_analyze_scale_factor
autovacuum_analyze_threshold
autovacuum_naptime
autovacuum_max_workers
autovacuum_work_mem
同时统计信息的柱状图个数支持动态设置到表、集群级。
表级设置
alter table xx SET STATISTICS to xx;
相关参数
default_statistics_target
9.自动化的SQL执行计划管理
在 19c 中,数据库缺省的就会启用对于所有可重用SQL的执行计划捕获(当然SYS系统Schema的SQL除外),然后进行自动的执行计划评估,评估可以针对AWR中的TOP SQL、SGA、STS中的SQL进行。
如果被评估的执行计划优于当前执行计划(一般是要有效率 50%以上的提升),会被加入到执行计划基线库中,作为后续的执行选择,而不佳的执行计划则会被标记为不可接受。
有了这个特性,SQL执行计划的稳定性将更进一步。
PostgreSQL 如何支持
PostgreSQL 自适应执行计划插件AQO,支持类似功能。对于复杂SQL尤为有效。
https://github.com/postgrespro/aqo
Adaptive query optimization is the extension of standard PostgreSQL cost-based query optimizer. Its basic principle is to use query execution statistics for improving cardinality estimation. Experimental evaluation shows that this improvement sometimes provides an enormously large speed-up for rather complicated queries.
10.SQL功能的增强
在 19c 中,SQL 功能获得了进一步的增强,这其中包括对于 COUNT DISTINCT的进一步优化,在12c中引入的近似 Distinct 操作已经可以为特定SQL带来极大性能提升,现在基于位图的COUNT DISTINCT 操作继续为查询加速。
除此之外,LISTAGG 增加了 DISTINCT 关键字,用于对操作数据的排重。
ANY_VALUE 提供了从数据组中获得随机值的能力,如果你以前喜欢用 Max / Min 实现类似的功能,新功能将显著带来效率的提升。ANY_VALUE 函数在 MySQL 早已存在,现在应该是 Oracle 借鉴和参考了 MySQL 的函数做出的增强。
PostgreSQL 如何支持
PostgreSQL 支持近似聚合,支持流计算,支持聚合中的排序,支持自定义聚合函数等。
例如
1、使用hyperloglog插件,PostgreSQL可以实现概率计算,包括count distinct的概率计算。
https://github.com/citusdata/postgresql-hll
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 3》
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 2》
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 1》
[《[转]流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms》](https://github.com/digoal/blog/blob/master/201801/20180116_01.md)
2、TOP-N插件
https://github.com/citusdata/cms_topn
3、pipelinedb 插件
《PostgreSQL 流计算插件 - pipelinedb 1.x 参数配置介绍》
《PostgreSQL pipelinedb 流计算插件 - IoT应用 - 实时轨迹聚合》
通过流计算,适应更多的实时计算场景。
小结
PostgreSQL是一款非常优秀的企业级开源数据库,不仅有良好的Oracle兼容性,同时在Oracle面前也有很大更加优秀的地方:
插件化,可扩展(包括类型、索引接口、函数、操作符、聚合、窗口、FDW、存储过程语言(目前支持plpgsql,plsql,c,pljava,plperl,pltcl,pllua,plv8,plpython,plgo,...几乎所有编程语言的存储过程),采样,...)。
如何从O迁移到PG:
《xDB Replication Server - PostgreSQL, MySQL, Oracle, SQL Server, PPAS 全量、增量(redo log based, or trigger based)同步(支持single-master, mult-master同步, 支持DDL)》
《MTK使用 - PG,PPAS,oracle,mysql,ms sql,sybase 迁移到 PG, PPAS (支持跨版本升级)》
《ADAM,从Oracle迁移到PPAS,PG的可视化评估、迁移产品》
混合使用情况下的资源隔离管理
《PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) HTAP功能之资源隔离管理 - CPU与刷脏资源组管理》
参考
http://www.sohu.com/a/294160243_505827
https://www.postgresql.org/docs/11/protocol-replication.html
《xDB Replication Server - PostgreSQL, MySQL, Oracle, SQL Server, PPAS 全量、增量(redo log based, or trigger based)同步(支持single-master, mult-master同步, 支持DDL)》
《MTK使用 - PG,PPAS,oracle,mysql,ms sql,sybase 迁移到 PG, PPAS (支持跨版本升级)》
PostgreSQL 许愿链接
您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.
9.9元购买3个月阿里云RDS PostgreSQL实例
PostgreSQL 解决方案集合
文章
SQL · 存储 · Oracle · 关系型数据库 · MySQL · 数据库 · PostgreSQL · 流计算 · 索引 · RDS
2020-09-12
阿里云发布数据库产品HybridDB 兼容23种数据类型
12月9日,阿里云宣布数据库产品 HybridDB 正式商业化。HybridDB(ApsaraDB HybridDB)是一款在线MPP大规模并行处理数据仓库的服务。它基于 Pivotal 公司的开源数据库项目 Greenplum Database 开发,并由阿里云数据库团队在云计算架构下深度扩展。
该服务支持了OSS存储、JSON数据类型、HyperLogLog预估分析等功能特性。通过符合SQL2008标准查询语法及OLAP分析聚合函数,提供灵活的混合分析能力。提供在线扩容、备份、性能监测等服务。
阿里云数据库产品研究员褚霸介绍,随着各行各业信息技术的发展催生了以数据分析场景为主要业务的企业。特别是物联网和广告分析领域的企业,对云上复杂场景数据分析有强需求。“这个产品可以简化大量工作,如数据库管理员、开发者以及数据分析师可以专注于如何通过 SQL 挖掘数据价值,无需再自行维护复杂的大规模并行数据集群。”
HybridDB 是此款产品的名字,也体现了“混合”的特点。HybridDB 兼容数据类型多达23种,比市面上云计算厂商的同类产品多一倍。同时,它支持横向扩展,当用户数据量变大,内存及CPU计算能力需求增大时,随时可以添加节点,以线性扩展分析性能,提高计算能力。
7月公测以来的数据显示,JSON 和 GIS 类型的数据量高达TB级别时,查询也可以在1秒内完成。此外,广告分析领域的公司在做互联网海量数据的 PV、UV 预估分析时,统计性能提升20-100倍。
在MySQL和ProstgreSQL之外,数据库用户为什么还需要全新的产品?褚霸表示,HybridDB的混合数据类型及混合存储(行存、列存、OSS外部表)能力,可以与阿里云现有的RDS、NoSQL数据库方案实现数据融合分析。同时补全了EMR(Hadoop)分析场景中实时性不足的问题,为用户提供基于开源OLTP、OLAP、BigData生态的一站式解决方案。
Greenplum 诞生于2006年,是一个分布式大规模并行处理数据库,常用于大数据的存储引擎、计算引擎和分析引擎。它和HybridDB将形成云上云下业务场景的互补,软件开发过程中,云上HybridDB环境与云下Greenplum商业版本、Greenplum Database开源版本环境可以采用同一套代码,节省开发及维护成本。
阿里云数据库团队的愿景是打造一站式在线分析引擎。从数据的传输、存储、计算到管理,让客户的数据需求能够在同一个产品环境体系内实现,进一步降低数据处理的整体成本。未来,阿里云将围绕 HybridDB 做数据库生态的努力。一方面,加速与阿里云数据类产品实现互通,让用户可以通过SQL快速分析从不同渠道存储下来的数据。另一方面,引入合作伙伴认证机制,邀请更多ISV开发商及BI/ETL厂商支持,共同为用户创造价值。实时分析
支持SQL语法进行分布式GIS地理信息数据类型实时分析,协助物联网、互联网实现LBS位置服务统计
支持SQL语法进行分布式JSON、XML、模糊字符串等数据实时分析,助金融、政企行业实现报文数据处理及模糊文本统计稳定可靠
支持分布式ACID数据一致性,实现跨节点事务一致,所有数据双节点同步冗余
分布式部署,计算单元、服务器、机柜三重防护,提高重要数据基础设施保障简单易用
丰富的OLAP SQL语法及函数支持,众多Oracle函数支持,业界流行的BI软件可直接联机使用
可与云数据库RDS(PostgreSQL/PPAS)实现数据通讯,实现OLTP+OLAP(HTAP)混合事务分析解决方案性能卓越
支持行列混合存储,列存性能在OLAP分析时相比行存储可达100倍性能提升
支持高性能OSS并行数据导入,避免单通道导入的性能瓶颈灵活扩展
按需进行计算单元,CPU、内存、存储空间的等比扩展,OLAP性能平滑上升致数百TB
支持透明的OSS数据操作,非在线分析的冷数据可灵活转存到OSS对象存储,数据存储容量无限扩展
原文发布时间为: 2016年12月9日
本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。
文章
SQL · 存储 · 数据库 · 对象存储 · OLAP · 关系型数据库 · 数据格式 · JSON · 定位技术 · RDS
2017-09-01
十分钟教你了解阿里云数据库RDS
什么是云数据库RDS ?
阿里云关系型数据库(Relational Database Service,简称RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。基于阿里云分布式文件系统和SSD盘高性能存储,RDS支持MySQL、SQL Server、PostgreSQL、PPAS(Postgre Plus Advanced Server,高度兼容Oracle数据库)和MariaDB TX引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。
功能简介
阿里云数据库RDS版包含有MySQL、SQL Server、PostgreSQL、PPAS和MariaDB TX,用户可以在几分钟内创建出适合自己应用场景的数据库实例,迅速投产,按需付费。本文我们将以MySQL为例,向大家展示如何点几下鼠标就生成业务所需的数据库。
开始动手实践之前我们先介绍一下阿里云数据库RDS for MySQL版的几个基本知识,便于您准确选择适用于您业务场景的MySQL配置。
选地域和可用区
阿里云在国内外多个地域部署了数据中心,并提供多线BGP骨干网线路接入。请根据您以及目标用户所在的地理位置选择地域,从而提升用户访问速度。一般情况下RDS应该和ECS服务器选择在同一地域,这样您部署于ECS服务器中的应用和数据库之间的网络连接效率是最高的。
可用区是指在同一地域内,拥有独立电力和网络的物理区域,实现故障隔离。在同一地域内多个可用区采用高速链路互通,您可以选择将RDS与应用软件的ECS创建在同一可用区或不同的可用区,因为同一地域的不同可用区之间没有实质性区别。同时,MySQL在特定地域提供了多可用区部署的选择,也就是说,高可用版的主节点和备节点分别位于不同的可用区,从而提供跨可用区的容灾高可用能力。
选版本
阿里云上的MySQL提供三种版本的实例:基础版、高可用版和金融版。
基础版:一般用于个人学习或开发测试。目前基础版只提供MySQL 5.7版本,采用单节点部署,性价比非常高。基础版采用计算节点与存储分离的实现方式,当计算节点宕机时MySQL服务不可用,但存储在云盘里的数据不会丢失。基础版的缺陷是可用性不高,适用于相对不重要的场景,所以不建议您在生产环境中使用基础版。
高可用版:RDS MySQL高可用版采用一主一备的经典高可用架构,采用基于binlog的数据复制技术维护数据库的可用性和数据一致性。同时,高可用版的性能也可以满足业务生产环境的需求,配置上采用物理服务器和本地SSD硬盘,提供最佳性能,各方面表现均衡。
金融版:金融版主要应用于金融、证券、保险等行业的核心数据库,他们对数据安全性、可用性要求非常高。金融版采用三节点,实现一主两备的部署架构,通过binlog日志多副本多级别复制,确保数据的强一致性,可提供金融级的数据可靠性和跨机房容灾能力。
选规格
**阿里云上MySQL实例有三种规格类型:通用型、独享型和独占型。**通用型和独享型都是在一台物理服务器上划分多个资源隔离的区域,为不同用户提供MySQL数据库实例。他们的不同点在于,通用型对于CPU和存储空间采用了复用的技术。当部署在同一台服务器上的所有MySQL实例都很繁忙的情况下,有可能会出现实例间的CPU争抢,或存储的争抢;而独享型虽然也是多个数据库实例共享一台物理服务器,但资源隔离策略确保每个实例都可以独享所分配到的CPU、内存、I/O、存储,不会出现多个实例发生资源争抢的情况。
最高级别的是独占型,是指一个MySQL实例独占一台服务器,会获得最好的性能,当然价格也最贵。追求极致性能但对价格不敏感的客户一般会在重要业务系统采用独占型实例。
关于通用型和独享型实例的性能,我们以MySQL 5.6实例做了基准实测,可参见如下结果。
应用上云
现有业务系统的数据库有可能跑在自己的机房、托管的IDC、VMware虚拟机、OpenStack私有云,或在阿里云ECS云服务器上。阿里云数据传输服务DTS(Data Transmission Service)提供了多种数据迁移方案,可满足不同上云或迁云的业务需求,使您在不影响业务的情况下将数据库平滑迁移至云数据库RDS上。
您可以实现MySQL数据库的结构迁移、全量迁移和增量迁移。另外,您也不用担心被云锁定,无法从阿里云迁回本地。RDS支持通过物理备份或逻辑备份的方式,将云上数据迁移到本地数据库。
通过上面的学习,相信您已经对阿里云上的MySQL具有了初步的认识,现在一定正跃跃欲试地想要实践体验吧?RDS具有非常简单易用的用户界面,下面,我们一起“鼠标点点,即刻开通”。
即刻开通
1、通过控制台进入云数据库RDS版,在右上角单击创建实例的按钮,进入创建实例页面。
2、选择所希望的地域,建议RDS实例和ECS实例在同一地域。
3、选择数据库版本、系列,以及对应的存储类型和可用区。目前MySQL 5.7支持基础版和高可用版。MySQL 5.6支持高可用版和金融版。MySQL 5.5支持高可用版。
4、选择网络类型、实例规格、存储空间以及购买时长。网络类型默认是VPC,即专有网络。除非您是老客户已经在用经典网络,否则推荐使用VPC专有网络,组网比较灵活也更加安全。关于购买时长,我们推荐包年包月,毕竟数据库支撑业务系统不会经常释放资源,而且包年包月订购的时间越长折扣越好,可以帮助您的业务应用省好多钱。但如果您只是用于测试或学习,可以创建实例时在左上角切换到按量付费。
5、提交订单和付款
几分钟后,当您收到短信和邮件的通知时,RDS实例就创建成功了,可以在管理控制台上查看和使用。
最后,您打算如何连接访问MySQL?如何管理云上的MySQL?当然相信您也是高手一定知道SQLyog、phpMyAdmin等独立管理工具。这些都没有问题,但更专业的用法,还是使用阿里云为数万研发人员量身打造的数据管理软件DMS。
DMS是一款用于访问云数据库的Web服务,支持MySQL、SQL Server、PostgreSQL、Redis和MongoDB等数据源。DMS提供了数据管理、对象管理、数据流转和实例管理等功能,使用方式也非常简单,让我们来看一看吧。
1、登录云数据库RDS的管理控制台。
2、在页面左上角,选择实例所在的地域。
3、找到目标实例,单击实例ID,进入基本信息页面。
4、在右上角单击登录数据库跳转到DMS登录页面,具体功能请参见DMS功能总览。
了解更多:云数据库RDS MySQL 视频简介
文章
存储 · SQL · 弹性计算 · 容灾 · 关系型数据库 · MySQL · 数据库 · PostgreSQL · 数据库管理 · RDS
2020-07-16
PostgreSQL Oracle 兼容性 - Oracle 19c 新特性在PostgreSQL中的使用
标签
PostgreSQL , Oracle 兼容性 , Oracle 19c
背景
《PostgreSQL 覆盖 Oracle 18c 重大新特性》
Oracle 19c 新特性摘自盖老师《Oracle 19c 新特性及官方文档抢鲜下载》文章,其中有一些特性在PostgreSQL中很早以前已经支持。本文旨在介绍PG如何使用这些特性。
1.Data Guard 备库DML自动重定向
在使用 ADG 作为备库进行读写分离部署时,可能因为应用的原因,会有偶然的DML操作发送到备库上,在 19c 中,Oracle 支持自动重定向备库 DML,具体执行步骤为:
更新会自动重定向到主库;主库执行更新、产生和发送Redo日志到备库;在Redo备库应用后,ADG会话会透明的看到更新信息的落地实施;
这一特性可以通过在系统级或者会话级设置参数 ADG_REDIRECT_DML 参数启用,通过这种方式,ADG 会话的 ACID 一致性得以保持,同时透明的支持『多数读,偶尔更新』应用的自然读写分离配置。
这个特性的引入,将进一步的增加 ADG 的灵活性,帮助用户将备库应用的更加充分。
PostgreSQL 如何支持
1 修改内核支持
PostgreSQL standby与primary通信采用流复制协议
https://www.postgresql.org/docs/11/protocol-replication.html
如果要让PG支持只读从库转发DML到上游节点,首先需要协议层支持。
digoal@pg11-test-> psql
psql (11.1)
Type "help" for help.
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)
postgres=# create table a (id int);
ERROR: cannot execute CREATE TABLE in a read-only transaction
postgres=# \set VERBOSITY verbose
postgres=# create table a (id int);
ERROR: 25006: cannot execute CREATE TABLE in a read-only transaction
LOCATION: PreventCommandIfReadOnly, utility.c:246
postgres=# insert into a values (1);
ERROR: 25006: cannot execute INSERT in a read-only transaction
LOCATION: PreventCommandIfReadOnly, utility.c:246
当前写操作报错,判定为如下SQL请求类型时,直接报错。
/*
* check_xact_readonly: is a utility command read-only?
*
* Here we use the loose rules of XactReadOnly mode: no permanent effects
* on the database are allowed.
*/
static void
check_xact_readonly(Node *parsetree)
{
/* Only perform the check if we have a reason to do so. */
if (!XactReadOnly && !IsInParallelMode())
return;
/*
* Note: Commands that need to do more complicated checking are handled
* elsewhere, in particular COPY and plannable statements do their own
* checking. However they should all call PreventCommandIfReadOnly or
* PreventCommandIfParallelMode to actually throw the error.
*/
switch (nodeTag(parsetree))
{
case T_AlterDatabaseStmt:
case T_AlterDatabaseSetStmt:
case T_AlterDomainStmt:
case T_AlterFunctionStmt:
case T_AlterRoleStmt:
case T_AlterRoleSetStmt:
case T_AlterObjectDependsStmt:
case T_AlterObjectSchemaStmt:
case T_AlterOwnerStmt:
case T_AlterOperatorStmt:
case T_AlterSeqStmt:
case T_AlterTableMoveAllStmt:
case T_AlterTableStmt:
case T_RenameStmt:
case T_CommentStmt:
case T_DefineStmt:
case T_CreateCastStmt:
case T_CreateEventTrigStmt:
case T_AlterEventTrigStmt:
case T_CreateConversionStmt:
case T_CreatedbStmt:
case T_CreateDomainStmt:
case T_CreateFunctionStmt:
case T_CreateRoleStmt:
case T_IndexStmt:
case T_CreatePLangStmt:
case T_CreateOpClassStmt:
case T_CreateOpFamilyStmt:
case T_AlterOpFamilyStmt:
case T_RuleStmt:
case T_CreateSchemaStmt:
case T_CreateSeqStmt:
case T_CreateStmt:
case T_CreateTableAsStmt:
case T_RefreshMatViewStmt:
case T_CreateTableSpaceStmt:
case T_CreateTransformStmt:
case T_CreateTrigStmt:
case T_CompositeTypeStmt:
case T_CreateEnumStmt:
case T_CreateRangeStmt:
case T_AlterEnumStmt:
case T_ViewStmt:
case T_DropStmt:
case T_DropdbStmt:
case T_DropTableSpaceStmt:
case T_DropRoleStmt:
case T_GrantStmt:
case T_GrantRoleStmt:
case T_AlterDefaultPrivilegesStmt:
case T_TruncateStmt:
case T_DropOwnedStmt:
case T_ReassignOwnedStmt:
case T_AlterTSDictionaryStmt:
case T_AlterTSConfigurationStmt:
case T_CreateExtensionStmt:
case T_AlterExtensionStmt:
case T_AlterExtensionContentsStmt:
case T_CreateFdwStmt:
case T_AlterFdwStmt:
case T_CreateForeignServerStmt:
case T_AlterForeignServerStmt:
case T_CreateUserMappingStmt:
case T_AlterUserMappingStmt:
case T_DropUserMappingStmt:
case T_AlterTableSpaceOptionsStmt:
case T_CreateForeignTableStmt:
case T_ImportForeignSchemaStmt:
case T_SecLabelStmt:
case T_CreatePublicationStmt:
case T_AlterPublicationStmt:
case T_CreateSubscriptionStmt:
case T_AlterSubscriptionStmt:
case T_DropSubscriptionStmt:
PreventCommandIfReadOnly(CreateCommandTag(parsetree));
PreventCommandIfParallelMode(CreateCommandTag(parsetree));
break;
default:
/* do nothing */
break;
}
}
2 修改内核支持
利用fdw,读写操作重新向到FDW表(fdw为PostgreSQL的外部表,可以重定向到主节点)
例如
create rule r1 as on insert to a where pg_is_in_recovery() do instead insert into b values (NEW.*);
这个操作需要一个前提,内核层支持standby可写FDW表。
并且这个方法支持的SQL语句有限,方法1更加彻底。
3 citus插件,所有节点完全对等,所有节点均可读写数据库
《PostgreSQL sharding : citus 系列7 - topn 加速(count(*) group by order by count(*) desc limit x) (use 估值插件 topn)》
《PostgreSQL sharding : citus 系列6 - count(distinct xx) 加速 (use 估值插件 hll|hyperloglog)》
《PostgreSQL sharding : citus 系列5 - worker节点网络优化》
《PostgreSQL sharding : citus 系列4 - DDL 操作规范 (新增DB,TABLE,SCHEMA,UDF,OP,用户等)》
《PostgreSQL sharding : citus 系列3 - 窗口函数调用限制 与 破解之法(套用gpdb执行树,分步执行)》
《PostgreSQL sharding : citus 系列2 - TPC-H》
《PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)》
2.Oracle Sharding 特性的多表家族支持
在Oracle Sharding特性中,被分片的表称为 Sharded table,这些sharded table的集合称为表家族(Table Family),表家族之中的表具备父-子关系,一个表家族中没有任何父表的表叫做根表(root table),每个表家族中只能有一个根表。表家族中的所有Sharded table都按照相同的sharding key(主键)来分片。
在12.2,在一个SDB中只支持一个表家族,在 19c 中,SDB 中允许存在多个表家族,每个通过不同的 Sharding Key进行分片,这是 Sharding 特性的一个重要增强,有了 Multiple Table Families 的支持,Sharding 才可能找到更多的应用场景。
PostgreSQL 如何支持
PostgreSQL sharding支持非常丰富:
1、plproxy
《PostgreSQL 最佳实践 - 水平分库(基于plproxy)》
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 4 水平分库(plproxy) 之 节点扩展》
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 3 水平分库(plproxy) vs 单机 性能》
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 2 教你RDS PG的水平分库(plproxy)》
《ZFS snapshot used with PostgreSQL PITR or FAST degrade or PG-XC GreenPlum plproxy MPP DB's consistent backup》
《A Smart PostgreSQL extension plproxy 2.2 practices》
《使用Plproxy设计PostgreSQL分布式数据库》
2、citus
《PostgreSQL sharding : citus 系列7 - topn 加速(count(*) group by order by count(*) desc limit x) (use 估值插件 topn)》
《PostgreSQL sharding : citus 系列6 - count(distinct xx) 加速 (use 估值插件 hll|hyperloglog)》
《PostgreSQL sharding : citus 系列5 - worker节点网络优化》
《PostgreSQL sharding : citus 系列4 - DDL 操作规范 (新增DB,TABLE,SCHEMA,UDF,OP,用户等)》
《PostgreSQL sharding : citus 系列3 - 窗口函数调用限制 与 破解之法(套用gpdb执行树,分步执行)》
《PostgreSQL sharding : citus 系列2 - TPC-H》
《PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)》
3、pg-xl
https://www.postgres-xl.org/
4、antdb
https://github.com/ADBSQL/AntDB
5、sharding sphere
http://shardingsphere.apache.org/
6、乘数科技出品勾股数据库,使用fdw支持sharding
7、pg_pathman+FDW支持sharding
https://github.com/postgrespro/pg_shardman
《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》
3.透明的应用连续性支持增强
在Oracle RAC集群中,支持对于查询的自动切换,当一个节点失效,转移到另外一个节点,在19c中,Oracle 持续改进和增强了连续性保持,数据库会自动记录会话状态,捕获用于重演的信息,以便在切换时,在新节点自动恢复事务,使DML事务同样可以获得连续性支持:
在事务提交后自动禁用状态捕获,因为提交成功的事务将不再需要在会话级恢复;
在事务开始时,自动重新启用状态跟踪;
PostgreSQL 如何支持
要将一个会话内的请求转移到另一个节点,需要支持同样的快照视角,否则会出现查询不一致的情况。PostgreSQL支持快照的导出,分析给其他会话,使得所有会话可以处于同一视角。
《PostgreSQL 共享事务快照功能 - PostgreSQL 9.2 can share snapshot between multi transactions》
这个技术被应用在:
1、并行一致性逻辑备份
2、会话一致性的读写分离
《PostgreSQL 10.0 preview 功能增强 - slave支持WAITLSN 'lsn', time;用于设置安全replay栅栏》
为了能够支持透明应用连续性,1、可以在SQL中间层支持(例如为每个会话创建快照,记录快照信息,转移时在其他节点建立连接并导入快照),2、SQL驱动层支持,3、也可以在内核层支持转移。
会增加一定的开销。
4.自动化索引创建和实施
对于关系型数据库来说,索引是使得查询加速的重要手段,而如何设计和创建有效的索引,长期以来是一项复杂的任务。
在 Oracle 19c 中,自动化索引创建和实施技术被引入进来,Oracle 通过模拟人工索引的思路,建立了内置的专家系统。
数据库内置的算法将会通过捕获、识别、验证、决策、在线验证、监控的全流程管控索引自动化的过程。
这一特性将会自动帮助用户创建有效的索引,并通过提前验证确保其性能和有效性,并且在实施之后进行监控,这一特效将极大缓解数据库索引维护工作。
自动化还将删除由新创建的索引(逻辑合并)废弃的索引,并删除自动创建但长时间未使用的索引。
PostgreSQL 如何支持
1、EDB PPAS版本,支持自动建议索引
《PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) 索引推荐功能使用》
2、PG社区版本,根据统计信息,top SQL,LONG SQL等信息,自动创建索引
《PostgreSQL SQL自动优化案例 - 极简,自动推荐索引》
《自动选择正确索引访问接口(btree,hash,gin,gist,sp-gist,brin,bitmap...)的方法》
PG 虚拟索引
《PostgreSQL 索引虚拟列 - 表达式索引 - JOIN提速》
《PostgreSQL 虚拟|虚假 索引(hypothetical index) - HypoPG》
PostgreSQL 优势
PG 支持9种索引接口(btree, hash, gin, gist, spgist, brin, bloom, rum, zombodb),同时PG支持索引接口扩展,支持表达式索引,支持partial索引。以支持各种复杂业务场景。
5.多实例并行重做日志应用增强
在Oracle Data Guard环境中,备库的日志应用速度一直是一个重要挑战,如果备库不能够及时跟上主库的步调,则可能影响备库的使用。
自Oracle 12.2 版本开始,支持多实例并行应用,这极大加快了恢复进度,在 18c 中,开始支持 In-Memory 列式存储,在 19c 中,并行应用开始支持 In-Memory列式存储。
PostgreSQL 如何支持
对于逻辑从库,支持一对一,一对多,多对一,多对多的部署方法。PG 逻辑订阅每个通道一个worker process,可以通过创建多个订阅通道来实现并行。
对于物理从库,异步STANDBY的WAL APPLY延迟通常是毫秒级。
6.Oracle的混合分区表支持
在 19c 中,Oracle 增强了分区特性,可以将外部对象存储上的文件,以外部表的方式链接到分区中,形成混合分区表,借助这个特性,Oracle 将数据库内外整合打通,冷数据可以剥离到外部存储,热数据在数据库中在线存储。
这个特性借助了外部表的特性实现,以下是一个示例:
CREATE TABLE orders ( order_idnumber,
order_dateDATE, … )
EXTERNAL PARTITION ATTRIBUTES
( TYPE oracle_loaderDEFAULTDIRECTORY data_dir
ACCESS PARAMETERS (..) REJECT LIMIT unlimited)
PARTITION BY RANGE(order_date)
( partition q1_2015 values less than(‘2014-10-01’)
EXTERNAL LOCATION (‘order_q1_2015.csv’),
partition q2_2015 values less than (‘2015-01-01’),
partition q3_2015 values less than (‘2015-04-01’),
partition q4_2015 values less than (‘2015-07-01’));
PostgreSQL 如何支持
PostgreSQL 的fdw为外部存储(可以是外部任意数据源,包括文件,DB,WWW,S3,OSS等)。
使用PG继承技术,即可完成分区的混合存储(本地存储,外部存储混合),甚至SHARDING。
《ApsaraDB的左右互搏(PgSQL+HybridDB+OSS) - 解决OLTP+OLAP混合需求》
《PostgreSQL 9.6 sharding based on FDW & pg_pathman》
7.在线维护操作增强
在不同版本中,Oracle 持续增强在线维护操作,例如在 12.2 开始支持的Online Move、在线修改普通表为分区表等特性。
在19c 中,持续增强了智能的、细粒度的游标失效控制,将DDL操作对于游标失效的影响降至最低,例如,在 19c 中,comment on table的操作,将不会引起游标的失效。
针对分区维护的操作,例如Truncate分区等,Oracle 将进行细粒度的控制,和DDL操作无关的SQL将不受DDL失效影响。
PostgreSQL 如何支持
PostgreSQL 设计之初就支持了DDL事务,可以将DDL与DML混合在一个事务中处理。
begin;
insert into tbl values (...);
drop table xx;
create table xx;
alter table xx;
insert xx;
end;
又例如切换表名,可以封装为一个事务。
另外对于普通表转分区表,可以这样操作:
《PostgreSQL 普通表在线转换为分区表 - online exchange to partition table》
8.自动的统计信息管理
随着表数据的变化,优化器表数据统计数据将近实时刷新,以防止次优执行计划
统计的在线维护内置于直接路径加载操作中
当数据显着变化时运行自动统计信息收集作业,例如。,自上次收集统计信息以来,表中超过10%的行被添加/更改
第一个看到需要重新编译SQL游标的会话(例如,由于新的优化器统计信息)执行重新编译
其他会话继续使用旧的SQL游标,直到编译完成
避免因重新编译而导致大量会话停顿
PostgreSQL 如何支持
PostgreSQL autovacuum 设计之初就是采用的动态统计信息收集,并且支持到了集群、TABLE级别可设置,用户可以根据不同表的负载情况,设置自动收集统计信息的阈值。
相关参数
autovacuum_analyze_scale_factor
autovacuum_analyze_threshold
autovacuum_naptime
autovacuum_max_workers
autovacuum_work_mem
同时统计信息的柱状图个数支持动态设置到表、集群级。
表级设置
alter table xx SET STATISTICS to xx;
相关参数
default_statistics_target
9.自动化的SQL执行计划管理
在 19c 中,数据库缺省的就会启用对于所有可重用SQL的执行计划捕获(当然SYS系统Schema的SQL除外),然后进行自动的执行计划评估,评估可以针对AWR中的TOP SQL、SGA、STS中的SQL进行。
如果被评估的执行计划优于当前执行计划(一般是要有效率 50%以上的提升),会被加入到执行计划基线库中,作为后续的执行选择,而不佳的执行计划则会被标记为不可接受。
有了这个特性,SQL执行计划的稳定性将更进一步。
PostgreSQL 如何支持
PostgreSQL 自适应执行计划插件AQO,支持类似功能。对于复杂SQL尤为有效。
https://github.com/postgrespro/aqo
Adaptive query optimization is the extension of standard PostgreSQL cost-based query optimizer. Its basic principle is to use query execution statistics for improving cardinality estimation. Experimental evaluation shows that this improvement sometimes provides an enormously large speed-up for rather complicated queries.
10.SQL功能的增强
在 19c 中,SQL 功能获得了进一步的增强,这其中包括对于 COUNT DISTINCT的进一步优化,在12c中引入的近似 Distinct 操作已经可以为特定SQL带来极大性能提升,现在基于位图的COUNT DISTINCT 操作继续为查询加速。
除此之外,LISTAGG 增加了 DISTINCT 关键字,用于对操作数据的排重。
ANY_VALUE 提供了从数据组中获得随机值的能力,如果你以前喜欢用 Max / Min 实现类似的功能,新功能将显著带来效率的提升。ANY_VALUE 函数在 MySQL 早已存在,现在应该是 Oracle 借鉴和参考了 MySQL 的函数做出的增强。
PostgreSQL 如何支持
PostgreSQL 支持近似聚合,支持流计算,支持聚合中的排序,支持自定义聚合函数等。
例如
1、使用hyperloglog插件,PostgreSQL可以实现概率计算,包括count distinct的概率计算。
https://github.com/citusdata/postgresql-hll
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 3》
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 2》
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 1》
《[转]流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms》
2、TOP-N插件
https://github.com/citusdata/cms_topn
3、pipelinedb 插件
《PostgreSQL 流计算插件 - pipelinedb 1.x 参数配置介绍》
《PostgreSQL pipelinedb 流计算插件 - IoT应用 - 实时轨迹聚合》
通过流计算,适应更多的实时计算场景。
小结
PostgreSQL是一款非常优秀的企业级开源数据库,不仅有良好的Oracle兼容性,同时在Oracle面前也有很大更加优秀的地方:
插件化,可扩展(包括类型、索引接口、函数、操作符、聚合、窗口、FDW、存储过程语言(目前支持plpgsql,plsql,c,pljava,plperl,pltcl,pllua,plv8,plpython,plgo,...几乎所有编程语言的存储过程),采样,...)。
如何从O迁移到PG:
《xDB Replication Server - PostgreSQL, MySQL, Oracle, SQL Server, PPAS 全量、增量(redo log based, or trigger based)同步(支持single-master, mult-master同步, 支持DDL)》
《MTK使用 - PG,PPAS,oracle,mysql,ms sql,sybase 迁移到 PG, PPAS (支持跨版本升级)》
《ADAM,从Oracle迁移到PPAS,PG的可视化评估、迁移产品》
混合使用情况下的资源隔离管理
《PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) HTAP功能之资源隔离管理 - CPU与刷脏资源组管理》
参考
http://www.sohu.com/a/294160243_505827
https://www.postgresql.org/docs/11/protocol-replication.html
《xDB Replication Server - PostgreSQL, MySQL, Oracle, SQL Server, PPAS 全量、增量(redo log based, or trigger based)同步(支持single-master, mult-master同步, 支持DDL)》
《MTK使用 - PG,PPAS,oracle,mysql,ms sql,sybase 迁移到 PG, PPAS (支持跨版本升级)》
免费领取阿里云RDS PostgreSQL实例、ECS虚拟机
文章
SQL · 存储 · Oracle · 关系型数据库 · MySQL · 数据库 · PostgreSQL · 流计算 · 索引 · RDS
2020-02-25
阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,为用户提供基于开源 OLTP、OLAP、BigData 生态的一站式解决方案
12 月 9 日,阿里云宣布数据库产品 HybridDB 正式商业化。
HybridDB(ApsaraDB HybridDB)是一款在线 MPP 大规模并行处理数据仓库的服务。它基于 Pivotal 公司的开源数据库项目 Greenplum Database 开发,并由阿里云数据库团队在云计算架构下深度扩展。
该服务支持了 OSS 存储、JSON 数据类型、HyperLogLog 预估分析等功能特性。通过符合 SQL2008 标准查询语法及 OLAP 分析聚合函数,提供灵活的混合分析能力。提供在线扩容、备份、性能监测等服务。
阿里云数据库产品研究员褚霸介绍,随着各行各业信息技术的发展催生了以数据分析场景为主要业务的企业。特别是物联网和广告分析领域的企业,对云上复杂场景数据分析有强需求。“这个产品可以简化大量工作,如数据库管理员、开发者以及数据分析师可以专注于如何通过 SQL 挖掘数据价值,无需再自行维护复杂的大规模并行数据集群。”
HybridDB 是此款产品的名字,也体现了“混合”的特点。HybridDB 兼容数据类型多达 23 种,比市面上云计算厂商的同类产品多一倍。同时,它支持横向扩展,当用户数据量变大,内存及 CPU 计算能力需求增大时,随时可以添加节点,以线性扩展分析性能,提高计算能力。
7 月公测以来的数据显示,JSON 和 GIS 类型的数据量高达 TB 级别时,查询也可以在 1 秒内完成。此外,广告分析领域的公司在做互联网海量数据的 PV、UV 预估分析时,统计性能提升 20-100 倍。
在 MySQL 和 ProstgreSQL 之外,数据库用户为什么还需要全新的产品?褚霸表示,HybridDB 的混合数据类型及混合存储(行存、列存、OSS 外部表)能力,可以与阿里云现有的 RDS、NoSQL 数据库方案实现数据融合分析。同时补全了 EMR(Hadoop)分析场景中实时性不足的问题,为用户提供基于开源 OLTP、OLAP、BigData 生态的一站式解决方案。
Greenplum 诞生于 2006 年,是一个分布式大规模并行处理数据库,常用于大数据的存储引擎、计算引擎和分析引擎。它和 HybridDB 将形成云上云下业务场景的互补,软件开发过程中,云上 HybridDB 环境与云下 Greenplum 商业版本、Greenplum Database 开源版本环境可以采用同一套代码,节省开发及维护成本。
阿里云数据库团队的愿景是打造一站式在线分析引擎。从数据的传输、存储、计算到管理,让客户的数据需求能够在同一个产品环境体系内实现,进一步降低数据处理的整体成本。未来,阿里云将围绕 HybridDB 做数据库生态的努力。一方面,加速与阿里云数据类产品实现互通,让用户可以通过 SQL 快速分析从不同渠道存储下来的数据。另一方面,引入合作伙伴认证机制,邀请更多 ISV 开发商及 BI/ETL 厂商支持,共同为用户创造价值。
实时分析
支持 SQL 语法进行分布式 GIS 地理信息数据类型实时分析,协助物联网、互联网实现 LBS 位置服务统计
支持 SQL 语法进行分布式 JSON、XML、模糊字符串等数据实时分析,助金融、政企行业实现报文数据处理及模糊文本统计
稳定可靠
支持分布式 ACID 数据一致性,实现跨节点事务一致,所有数据双节点同步冗余
分布式部署,计算单元、服务器、机柜三重防护,提高重要数据基础设施保障
简单易用
丰富的 OLAP SQL 语法及函数支持,众多 Oracle 函数支持,业界流行的 BI 软件可直接联机使用
可与云数据库 RDS (PostgreSQL/PPAS)实现数据通讯,实现 OLTP+OLAP (HTAP)混合事务分析解决方案
性能卓越
支持行列混合存储,列存性能在 OLAP 分析时相比行存储可达 100 倍性能提升
支持高性能 OSS 并行数据导入,避免单通道导入的性能瓶颈
灵活扩展
按需进行计算单元,CPU、内存、存储空间的等比扩展,OLAP 性能平滑上升致数百 TB
支持透明的 OSS 数据操作,非在线分析的冷数据可灵活转存到 OSS 对象存储,数据存储容量无限扩展
转自:https://news.cnblogs.com/n/558691/
本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6483247.html,如需转载请自行联系原作者
文章
SQL · 存储 · OLAP · 数据库 · 对象存储 · 关系型数据库 · 数据格式 · JSON · 定位技术 · RDS
2017-11-09
云场景实践研究第21期:畅捷通信息技术
更多云场景实践研究案例,点击这里:【云场景实践研究合集】联合不是简单的加法,而是无限的生态,谁会是下一个独角兽
以“信息化推动社会及商业进步”为使命,畅捷通在成熟的互联网时期,让PostgreSQL踏上云计算之路,在不用考虑HA的前提下,实现聚焦PostgreSQL、DB平台化一步到位,通过阿里云的云盾让PostgreSQL高枕无忧、大大节约成本。本文将介绍畅捷通在阿里云PostgreSQL助力下的优化以及对产品的未来展望。
“畅捷通使用阿里云PostgreSQL之后只需要简单的三步:打开URL;选择配置;付款。省去了硬件、软件选择步骤,节约成本。”
——张玉彬
畅捷通信息技术股份有限公司核心DBA
畅捷通信息技术股份有限公司成立于2010年,致力于为小微企业等提供信息化产品及专业服务,在选用PostgreSQL作为云产品数据库之前,几经波折,走过一段漫长的岁月,从未转型前使用Oracle,到阿里去IOE大趋势下采用MySQL,经过不断探索,再到借助阿里云PostgreSQL实现DB平台化一步到位。
采用的阿里云产品
阿里云云数据库 PostgreSQL 版
阿里云 DDoS 高防 IP (云盾)
阿里云云数据库 PPAS 版
为什么使用阿里云
尽管使用未上云的PostgreSQL,成本还是没有降下来
还是采用传统的运维方式,要求DBA大量的人工干预操作
关于 畅捷通
畅捷通信息技术股份有限公司以“信息化推动社会及商业进步”为使命,致力于为小微企业、政府、公共事业及非营利组织提供专业、标准、灵活、易用的信息化产品及专业的服务。畅捷通将通过推进“S+S”的业务策略,为客户提供基于互联网的延伸服务。2012年荣获“2012中国软件和信息服务云应用创新企业”。
挑战即机遇——劳民伤财之痛
在上云之前,畅捷通云产品选型PostgreSQL为指定数据库,下图是畅捷通基于PostgreSQL打造的系统架构图,主体采用Streaming replication+Hot Standby,也就是常见的一主一备架构,主机用于为业务OLTB提供服务,备用机器用于抽取、分析、查询数据等。
畅捷通在上线PostgreSQL之后收获颇丰,同时也给畅捷通带来很多痛:第一成本还是没有降下来;第二还是采用传统的运维方式,要求DBA大量的人工干预操作。
为什么选择阿里云?
畅捷通上云之路
在具体PostgreSQL实施时,硬件方面需要考虑以下几个点:
机柜的选择(电源、承载多少服务器);
交换机的选择、网络布线;
跨机房的专线;
服务器不同厂家的调研评测;
服务器的选型(计算型、存储型);
硬盘的选择(SAS、SSD、PCIE卡、盘柜),需要考虑成本的问题;
网卡(万兆、千兆),优先级高的使用前者,优先级低的使用后者。
软件方面同样需要考虑很多因素:
RAID10或RAID5;
操作系统(CentOS或Ubuntu),目前畅捷通使用的是前者;
系统BIOS的优化;
系统参数的优化、PostgreSQL参数优化;
中间件的选择(pgpool还是自主研发);
对部分业务的调整优化,并对监控及安全进行加固。
PostgreSQL上云之后只需要简单的三步:打开URL;选择配置;付款。省去了硬件、软件选择步骤。
当PostgreSQL遇见阿里云
PostgreSQL上云之后给畅捷通带来了很多根本性的变化:
从DBA外围工作解脱出来,聚焦PostgreSQL;
大大节约了成本,可以按量付费,可以先低配再升级;
完全不用考虑HA,不用做JA预案及HA演练;
同时阿里云的云盾让PostgreSQL高枕无忧;
数据库云平台让DB平台化一步到位;
此外,可以实现快速地打PostgreSQL补丁,DBA更加聚焦业务,处理业务相关的seesion、SQL等。
关于畅捷通的更多实践详情:PostgreSQL 助力小微企业管理系统变革
原文发布日期:2016-11-04
云栖社区场景研究小组成员:丁匀泰,仲浩。
文章
关系型数据库 · 数据库 · PostgreSQL · 数据库管理
2018-02-05
什么是数据库?什么是云数据库?
什么是数据库?什么是云数据库?
什么是数据库?传统数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查由统一软件进行管理和控制。
数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。
目前主流的数据库的构建方式不外乎两种:线下自己构建或者是使用在线的数据库。至于自己构建数据库方面,比较主流的就是使用像MySQL、DB2、ACCESS或者Oracle这些数据库,进行构建。这些主流的关系型数据库中,只有MySQL是免费的,开源的(但是其所有权还是在Oracle手里,之后会不会收费就不知到了),其他的像IBM的DB2,Microsoft的ACCESS还有Oracle的数据库,一般大家都可以下载镜像,之后在自己的购买的服务器上安装之后就可以使用了。但是如果大家想用于商业用途的话就需要购买许可了,并且这还没有完。数据库构建完以后需要运维,要有专门的运维人员,而且要保证数据中心不能断电(地震了咋办...我也不知道),还要做好备份,这些工作往往是非常消耗人力和物力的,另外就是数据的安全性问题,不光是外部的那些破坏者给你玩什么DDOS或者暴力破解或者SQL注入什么的,而且有时候还要担心数据库中的数据被自己的运维人员删掉了(毕竟有...从删库到跑路).而且在购买了商用数据库许可之后,还有可能需要向数据库公司付服务费用。这些数据库公司往往都有自己的圈子,甚至可以有定价权...所以对于开发者或者初创公司而言会有很多的不便之处。
还有一种新的数据库构建方式就是使用在线数据库了,这种方式就是由一般的云计算服务提供商,提供的云数据库服务。这种构建数据库的方式也就是虽然我们看不到运行数据库的实体主机,但是我们可以随时访问自己的云数据库中的数据,并且使用这样的云数据库。通过这样的云数据库服务,我们就不需要担心数据的安全性,因为值得信赖的云数据库服务商往往会提供冗余算法保障数据的安全,就是相当于只要不是我们操作问题,其他的数据安全问题全部都交给服务商了。这种方式不仅非常的方便,可以保障数据安全,而且将会节省了用于数据库运维的大量的人力和物力。目前在国内,云数据库做的比较成熟的是阿里云,产品和技术都比较靠谱。
什么是云数据库,与普通数据库的主要区别是什么?
云数据库,构建数据库的方式也就是虽然我们看不到运行数据库的实体主机,但是我们可以随时访问自己的云数据库中的数据。通过这样的云数据库服务,我们就不需要担心数据的安全性,因为值得信赖的云数据库服务商往往会提供冗余算法保障数据的安全,就是相当于只要不是我们操作问题,其他的数据安全问题全部都交给服务商了。这种方式不仅非常的方便,可以保障数据安全,而且将会节省了用于数据库运维的大量的人力和物力。目前在国内,云数据库做的比较成熟的是阿里云,产品和技术都比较靠谱。
云数据库RDS与自建传统数据库性能对比:
1.服务可用性:
在服务可用性方面,参考阿里云的数据,云数据库RDS是99.95%可用的;而在自购服务器搭建的传统数据库服务中,需自行保障, 自行搭建主从复制,自建RAID等。
2.数据可靠性:
对数据的可靠性来说,阿里云提供的云数据库RDS是保证99.9999%可靠的;而在自购服务器搭建的传统数据库服务中,需自行保障, 自行搭建主从复制,自建RAID等。
3.系统安全性:
云数据库RDS可防DDoS攻击,流量清洗,能及时有效地修复各种数据库安全漏洞;而在自购服务器搭建的传统数据库,则需自行部署,价格高昂,同时也需自行修复数据库安全漏洞。
4.数据库备份:
云数据库RDS可自动为数据库进行备份,而自购服务器搭建的传统数据库需自行实现,同时需要寻找备份存放空间以及定期验证备份是否可恢复。
5.软硬件投入
云数据库RDS无软硬件投入,并按需付费;而自购服务器搭建的传统数据库服务器成本相对较高,对于SQL Server需支付许可证费用。
6.系统托管
云数据库RDS无需托管费用,而自购服务器搭建的传统数据库每台2U服务器每年超过5000元(如果需要主从,两台服务器需超过10000元/年)。
7.维护成本
云数据库RDS无需运维,而自购服务器搭建的传统数据库需招聘专职DBA来维护,花费大量人力成本。
8.部署扩容
云数据库RDS即时开通,快速部署,弹性扩容,按需开通,而自购服务器搭建的传统数据库需硬件采购、机房托管、部署机器等工作,周期较长。
9.资源利用率
一般云数据库RDS按实际结算,100%利用率,而自购服务器搭建的传统数据库需考虑峰值,资源利用率很低。
从阿里云的云数据库的数据来看,云数据库RDS产品是高性能、高安全、高可靠、便宜易用的数据库服务系统,并且可以有效地减轻用户的运维压力,为用户带来安全可靠的全新体验。
阿里云云数据库基于飞天分布式系统和全SSD盘高性能存储,支持MySQL、SQL Server、PostgreSQL和PPAS(高度兼容Oracle)引擎,默认部署主备架构且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。
阿里云数据库RDS的优点
1.3层安全防护体系,通过十项安全合规认证,能抵御90%以上的网络攻击
2.3重高可用(容灾)架构,提供99.95%的业务可用性保障
3.弹性扩展,实现100%资源利用率
4.内网外网同时连接,方便本地化管理
5.自动备份,两年内数据恢复,解决90%以上的系统故障
6.自动监控预警,定期性能巡检,可以分担60%以上的运维工作
文章
存储 · 安全 · 关系型数据库 · 数据库 · RDS
2016-11-05
PostgreSQL 覆盖 Oracle 18c 重大新特性
标签
PostgreSQL , Oracle , 兼容性 , 18c
背景
Oracle 18c 发布了诸多新特性,其中大部分Oracle 18c的重大特性,在早期版本的PostgreSQL数据库已支持。
如下
一、开发特性
1 图式搜索
Oracle 18c
SQL-Based Property Graph Query and Analytics
https://docs.oracle.com/en/database/oracle/oracle-database/18/spgdg/sql-based-property-graph-query-analytics.html#GUID-C5CC6650-0375-4F32-8317-BAF859C1909C
PostgreSQL 8.4+ (2009 year+)
1、2009年PostgreSQL社区版本8.4,加入CTE递归语法的支持,支持图式搜索。
《PostgreSQL 图式搜索(graph search)实践 - 百亿级图谱,毫秒响应》
《PostgreSQL 实践 - 内容社区(如论坛)图式搜索应用》
《小微贷款、天使投资(风控助手)业务数据库设计(图式搜索\图谱分析) - 阿里云RDS PostgreSQL, HybridDB for PostgreSQL最佳实践》
2、2017年3月,基于PostgreSQL的专业图数据库AgensGraph发布1.0,兼容标准SQL和图式搜索语法openCypher。
AgensGraph supports ANSI-SQL and openCypher (http://www.opencypher.org).
https://github.com/bitnine-oss/agensgraph
2 JSON 增强
Oracle 18c
SQL Enhancements for JSON
支持行转JSON。
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=ADJSN-GUID-8C9B00DD-45D8-499B-919C-8632E034B664
PostgreSQL 9.2+ (2012 year+)
2012年PostgreSQL社区版本9.2,加入JSON的支持。
https://www.postgresql.org/docs/current/static/datatype-json.html
9.2已支持行转JSON
row_to_json(record [, pretty_bool])
除此之外,PostgreSQL还支持嵌套JSON,K-V转JSON,K-V类型。支持数组类型,LTREE,RANGE,XML,TS,IP 等类型,对开发更加的友好。
https://www.postgresql.org/docs/devel/static/functions.html
https://www.postgresql.org/docs/devel/static/hstore.html
https://www.postgresql.org/docs/current/static/ltree.html
3 空间数据sharding
Oracle 18c
支持空间数据字段作为SHARDING字段
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=SPATL-GUID-1EFFDD77-9666-4190-ACD2-EE3DCA7B326D
PostgreSQL 8.2+ (2007 year+)
1、早在2008年以前,就可以使用plproxy来实现PostgreSQL sharding,在skype内核心数据库用的就是plproxy做的sharding。sharding算法完全由用户控制,不管是空间数据还是什么数据,都可以支持。
https://plproxy.github.io/
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 4 水平分库 之 节点扩展》
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 3 水平分库 vs 单机 性能》
《阿里云ApsaraDB RDS for PostgreSQL 最佳实践 - 2 教你RDS PG的水平分库》
《PostgreSQL 最佳实践 - 水平分库(基于plproxy)》
《A Smart PostgreSQL extension plproxy 2.2 practices》
《使用Plproxy设计PostgreSQL分布式数据库》
2、除了plproxy分库分表以外,PostgreSQL社区还有一些NewSQL或MPP架构的数据库或插件,例如postgres-xl, antdb, citusDB, Greenplum:
https://github.com/ADBSQL/AntDB
http://www.postgres-xl.org/
https://www.citusdata.com/product
http://www.greenplum.org/
https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases
3、2016年发布的PostgreSQL 9.6与pg_pathman插件,支持外部表继承,同时支持外部表的查询下推,支持表达式分区。这些特性决定了用户可以使用PostgreSQL 9.6+, pg_pathman, postgis(st_geohash)来实现空间字段的sharding。
《PostgreSQL 11 preview - Parallel Append (多表并行计算) sharding架构并行计算核心功能之一》
《PostgreSQL 10 + PostGIS + Sharding(pg_pathman) + MySQL(fdw外部表) on ECS 部署指南(适合新用户)》
《PostgreSQL 10.0 preview sharding增强 - 支持分布式事务》
《PostgreSQL 10.0 preview sharding增强 - pushdown 增强》
《PostgreSQL 10.0 preview sharding增强 - 支持Append节点并行》
《PostgreSQL 10.0 preview sharding增强 - postgres_fdw 多节点异步并行执行》
《PostgreSQL 9.6 sharding based on FDW & pg_pathman》
《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》
《PostgreSQL 9.6 sharding + 单元化 (based on postgres_fdw) 最佳实践 - 通用水平分库场景设计与实践》
《PostgreSQL 9.6 单元化,sharding (based on postgres_fdw) - 内核层支持前传》
4 Text: Automatic Background Index Maintenance
Oracle 18c
后台自动维护文本索引。
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=CCAPP-GUID-54F2466B-7D05-45AC-A64E-04717F75C507
PostgreSQL 8.2+ (2007 year+)
PostgreSQL 从8.2 (2007年)开始,支持全文检索,全文检索索引。索引自动维护,不需要人工干预。
PostgreSQL GIN索引不仅可用于全文检索字段,同时还支持其他多值类型,实时build+pending list(autovacuum),可调整pending list size合并写入。写入与查询互不堵塞,兼顾了写性能和读性能。
实际上PostgreSQL的设计理念是开放接口,所以索引接口也是开放的,因此我们看到PostgreSQL已支持的索引接口就达9种之多(hash,btree,gin,gist,spgist,brin,bloom,rum,zombdb),覆盖普通类型,多值类型,空间类型,时序数据,多字段任意组合搜索,全文检索,时空搜索等。
《PostgreSQL 9种索引的原理和应用场景》
5 Text: Wildcard Search
Oracle 18c
支持通配符匹配。
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=CCAPP-GUID-67A2ACB4-FB50-4EEB-9DC0-58BDA85014BA
PostgreSQL 8.3+ (2008 year+)
严格来说,PostgreSQL 8.2以前的版本已经支持了通配符搜索,(支持正则表达式)。
从8.3 (2008年)开始,支持pg_trgm,因此能够支持通配符搜索的索引检索加速。目前Oracle还做不到模糊查询、正则查询、全文检索的索引加速。PostgreSQL可以做到。
https://www.postgresql.org/docs/current/static/pgtrgm.html
《PostgreSQL 1000亿数据量 正则匹配 速度与激情》
《PostgreSQL UDF实现tsvector(全文检索), array(数组)多值字段与scalar(单值字段)类型的整合索引(类分区索引) - 单值与多值类型复合查询性能提速100倍+ 案例 (含,单值+多值列合成)》
《PostgreSQL 相似搜索分布式架构设计与实践 - dblink异步调用与多机并行(远程 游标+记录 UDF实例)》
《PostgreSQL 相似搜索设计与性能 - 地址、QA、POI等文本 毫秒级相似搜索实践》
《PostgreSQL 全文检索之 - 位置匹配 过滤语法(例如 '速度 <1> 激情')》
《PostgreSQL 模糊查询 与 正则匹配 性能差异与SQL优化建议》
《PostgreSQL 遗传学应用 - 矩阵相似距离计算 (欧式距离,...XX距离)》
《多流实时聚合 - 记录级实时快照 - JSON聚合与json全文检索的功能应用》
《PostgreSQL - 全文检索内置及自定义ranking算法介绍 与案例》
《用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询》
《HTAP数据库 PostgreSQL 场景与性能测试之 17 - (OLTP) 数组相似查询》
《HTAP数据库 PostgreSQL 场景与性能测试之 16 - (OLTP) 文本特征向量 - 相似特征(海明...)查询》
《HTAP数据库 PostgreSQL 场景与性能测试之 14 - (OLTP) 字符串搜索 - 全文检索》
《HTAP数据库 PostgreSQL 场景与性能测试之 13 - (OLTP) 字符串搜索 - 相似查询》
《HTAP数据库 PostgreSQL 场景与性能测试之 12 - (OLTP) 字符串搜索 - 前后模糊查询》
《HTAP数据库 PostgreSQL 场景与性能测试之 9 - (OLTP) 字符串模糊查询 - 含索引实时写入》
《HTAP数据库 PostgreSQL 场景与性能测试之 7 - (OLTP) 全文检索 - 含索引实时写入》
《PostgreSQL 中英文混合分词特殊规则(中文单字、英文单词) - 中英分明》
《多国语言字符串的加密、全文检索、模糊查询的支持》
《Greenplum 模糊查询 实践》
《全文检索 不包含 优化 - 阿里云RDS PostgreSQL最佳实践》
《17种文本相似算法与GIN索引 - pg_similarity》
《PostgreSQL 模糊查询最佳实践 - (含单字、双字、多字模糊查询方法)》
《PostgreSQL 10.0 preview 功能增强 - JSON 内容全文检索》
《PostgreSQL结合余弦、线性相关算法 在文本、图片、数组相似 等领域的应用 - 3 rum, smlar应用场景分析》
《PostgreSQL结合余弦、线性相关算法 在文本、图片、数组相似 等领域的应用 - 2 smlar插件详解》
《PostgreSQL结合余弦、线性相关算法 在文本、图片、数组相似 等领域的应用 - 1 文本(关键词)分析理论基础 - TF(Term Frequency 词频)/IDF(Inverse Document Frequency 逆向文本频率)》
《导购系统 - 电商内容去重\内容筛选应用(实时识别转载\盗图\侵权?) - 文本、图片集、商品集、数组相似判定的优化和索引技术》
《PostgreSQL 全表 全字段 模糊查询的毫秒级高效实现 - 搜索引擎颤抖了》
《从难缠的模糊查询聊开 - PostgreSQL独门绝招之一 GIN , GiST , SP-GiST , RUM 索引原理与技术背景》
《从相似度算法谈起 - Effective similarity search in PostgreSQL》
《聊一聊双十一背后的技术 - 毫秒分词算啥, 试试正则和相似度》
《PostgreSQL 全文检索加速 快到没有朋友 - RUM索引接口(潘多拉魔盒)》
《PostgreSQL 文本数据分析实践之 - 相似度分析》
《中文模糊查询性能优化 by PostgreSQL trgm》
《PostgreSQL 行级 全文检索》
《使用阿里云PostgreSQL zhparser中文分词时不可不知的几个参数》
《PostgreSQL 百亿数据 秒级响应 正则及模糊查询》
《PostgreSQL chinese full text search 中文全文检索》
《PostgreSQL 9.3 pg_trgm imporve support multi-bytes char and gist,gin index for reg-exp search》
《PostgreSQL 使用 nlpbamboo chinesecfg 中文分词》
6 Text: Concurrent DML Support
Oracle 18c
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=CCAPP-GUID-67A2ACB4-FB50-4EEB-9DC0-58BDA85014BA
PostgreSQL 8.2+ (2007 year+)
PostgreSQL 从8.2 (2007年)开始,支持全文检索,全文检索索引。索引自动维护,不需要人工干预。
PostgreSQL GIN索引不仅可用于全文检索字段,同时还支持其他多值类型,实时build+pending list(autovacuum),可调整pending list size合并写入。写入与查询互不堵塞,兼顾了写性能和读性能。
二、sharding
1 User-Defined Sharding Method
Oracle 18c
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=SHARD-GUID-4FFB5665-B925-4DB6-ACDD-807D6E699365
PostgreSQL 8.2+ (2007 year+)
1、早在2008年以前,就可以使用plproxy来实现PostgreSQL sharding,在skype内核心数据库用的就是plproxy做的sharding。sharding算法完全由用户控制,不管是空间数据还是什么数据,都可以支持。
三、Big Data and Data Warehousing
1 Analytic View FILTER FACT and ADD MEASURE Keywords
聚合前,对输入聚合函数的数据进行过滤,也就是说支持基于条件聚合。并不是WHERE条件,请注意。
Analytic views provide a fast and efficient way to create analytic queries of data stored in existing database tables and views.
Analytic views organize data using a dimensional model. They allow you to easily add aggregations and calculations to data sets and to present data in views that can be queried with relatively simple SQL.
Oracle 18c
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=DWHSG-GUID-BEE5DB77-C00D-46F7-8543-F4EE3356BCE2
PostgreSQL 9.4+ (2014 year+)
https://www.postgresql.org/docs/10/static/sql-expressions.html#SYNTAX-AGGREGATES
aggregate_name (expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name (ALL expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name (DISTINCT expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name ( * ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name ( [ expression [ , ... ] ] ) WITHIN GROUP ( order_by_clause ) [ FILTER ( WHERE filter_clause ) ]
除了FILTER,PostgreSQL聚合还支持ORDER BY,即输入到聚合函数中的记录可以按顺序进入,从而影响聚合结果。
PostgreSQL 将开放存储接口、压缩接口,意味着以分析视图为代表的维度组织形式存储将来可以支持。
https://commitfest.postgresql.org/17/1283/
https://commitfest.postgresql.org/17/1294/
2 Data Mining
Oracle 18c
Exponential Smoothing
Random Forest
Neural Network
Explicit Semantic Analysis extension to classification
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=DMCON-GUID-EABE920F-1196-49C0-89CD-F25E062E16EF
PostgreSQL 8.4+ (2009 year+)
PostgreSQL 支持语言接口扩展,例如支持 plpython 存储过程语言。因此社区提供了madlib插件,可以用于在PostgreSQL内部使用plpython函数接口实现机器学习。
1、madlib
https://github.com/apache/madlib
http://madlib.apache.org/index.html
《[转载]易上手的数据挖掘、可视化与机器学习工具: Orange介绍》
《一张图看懂MADlib能干什么》
《PostgreSQL 多元线性回归 - 1 MADLib Installed in PostgreSQL 9.2》
如果你用的是PostgreSQL 9.6+,则支持并行计算,性能更加。而如果你用的是greenplum(基于PostgreSQL的MPP数据库)那么就可以支持多机并行的机器学习。
2、可视化分析软件orange3,同样支持python扩展
https://orange.biolab.si/
3、流式计算pipeline ,支持流式计算。阅后即焚或insert on conflict实现实时或批量计算。
《PostgreSQL APP海量FEED LOG实时质量统计CASE(含percentile_disc)》
《Greenplum roaring bitmap与业务场景 (类阿里云RDS PG varbitx, 应用于海量用户 实时画像和圈选、透视)》
《SQL流式案例 - 旋转门压缩(前后计算相关滑窗处理例子)》
《超时流式处理 - 没有消息流入的数据异常监控》
《阿里云RDS PostgreSQL varbitx实践 - 流式标签 (阅后即焚流式批量计算) - 万亿级,任意标签圈人,毫秒响应》
《多流实时聚合 - 记录级实时快照 - JSON聚合与json全文检索的功能应用》
《人、机客户服务质量 - 实时透视分析 - (多股数据流上下文相关实时分析,窗口保持)》
《PostgreSQL 业务数据质量 实时监控 实践》
《用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询》
《PostgreSQL手机行业经营分析、决策系统设计 - 实时圈选、透视、估算》
《PostgreSQL 流式统计 - insert on conflict 实现 流式 UV(distinct), min, max, avg, sum, count ...》
《PostgreSQL 异步消息实践 - Feed系统实时监测与响应(如 电商主动服务) - 分钟级到毫秒级的实现》
《HTAP数据库 PostgreSQL 场景与性能测试之 33 - (OLAP) 物联网 - 线性字段区间实时统计》
《HTAP数据库 PostgreSQL 场景与性能测试之 32 - (OLTP) 高吞吐数据进出(堆存、行扫、无需索引) - 阅后即焚(JSON + 函数流式计算)》
《HTAP数据库 PostgreSQL 场景与性能测试之 31 - (OLTP) 高吞吐数据进出(堆存、行扫、无需索引) - 阅后即焚(读写大吞吐并测)》
《HTAP数据库 PostgreSQL 场景与性能测试之 27 - (OLTP) 物联网 - FEED日志, 流式处理 与 阅后即焚 (CTE)》
《泛电网系统 海量实时计算+OLTP+OLAP DB设计 - 阿里云(RDS、HybridDB) for PostgreSQL最佳实践》
《行为、审计日志 (实时索引/实时搜索)建模 - 最佳实践 2》
《(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践》
《行为、审计日志 (实时索引/实时搜索)建模 - 最佳实践 1》
《流计算风云再起 - PostgreSQL携PipelineDB力挺IoT》
《在PostgreSQL中实现update | delete limit - CTID扫描实践 (高效阅后即焚)》
《旋转门数据压缩算法在PostgreSQL中的实现 - 流式压缩在物联网、监控、传感器等场景的应用》
《"物联网"流式处理应用 - 用PostgreSQL实时处理(万亿每天)》
《PostgreSQL 流计算指 pipelinedb 实时处理Kafka消息流》
《基于PostgreSQL的流式PipelineDB, 1000万/s实时统计不是梦》
4、估值计算hll插件,实现估值计算
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 3》
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 2》
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 1》
《[转]流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms》
四、General
1 Manual termination of run-away queries
Oracle 18c
A SQL query consuming excessive resources, including parallel servers, can be terminated using the ALTER SYSTEM CANCEL SQL statement.
This feature enables the database administrator to terminate a runaway SQL query using a SQL statement. This frees the system resources consumed by the runaway SQL query so that other SQL queries can use them.
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=ADMIN-GUID-7D8E5E00-515D-4338-8B86-C2044F6D2957
PostgreSQL 8.0+ (2005 year+)
Name
Return Type
Description
pg_cancel_backend(pid int)
boolean
Cancel a backend's current query
pg_terminate_backend(pid int)
boolean
Terminate a backend
重点是runaway sql的检查。这个功能可以结合OS来判定。因为PG是基于进程的模型,只要看进程的资源消耗和统计就可以。可以用cgroup进行统计。
《Linux cgroup - memory子系统讲解》
《为什么cgroup blkio不能限制分区》
《Linux cgroup - cpu与cpuset子系统讲解》
《xfs logdev 完美解决cgroup iops限制时ext4 data=writeback才能解决的问题》
《cgroup告诉你如何计算 PostgreSQL 数据库实例用了多少内存》
《PostgreSQL 商用版本EPAS(阿里云ppas) HTAP功能之资源隔离管理 - CPU与刷脏资源组管理》
2 Inline External Tables
Oracle 18c
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=ADMIN-GUID-621E5DDE-36D9-4661-9D14-80DE35858C3F
PostgreSQL 8.4+ (2009 year+)
PostgreSQL 从8.4开始支持FDW接口,即foreign data wrapper。对目标数据源实现这个接口,就可以访问该数据源。作为PostgreSQL的一张外表来使用。因此在PostgreSQL中访问Oracle的数据是非常轻松的。
目前可访问的数据源不完全列表如下,包括 “普通数据库,NOSQL,文件,网络服务,大数据服务,搜索引擎,操作系统,对象存储,空间数据库” 等,只要有网络接口的数据源,都可以访问。
https://wiki.postgresql.org/wiki/Fdw
Generic SQL Database Wrappers
Specific SQL Database Wrappers
NoSQL Database Wrappers
File Wrappers
Geo Wrappers
LDAP Wrappers
Generic Web Wrappers
Specific Web Wrappers
Big Data Wrappers
Column-Oriented Wrappers
Scientific Wrappers
Operating System Wrappers
Exotic Wrappers
RDS PG OSS 外部表文档:https://help.aliyun.com/knowledge_detail/43352.html
HDB PG OSS 外部表文档:https://help.aliyun.com/document_detail/35457.html
3 Approximate Top-N Query Processing
Oracle 18c
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=DWHSG-GUID-07B31A40-6AD9-4843-B5B3-D2424ACE39D5
PostgreSQL 9.0+ (2010 year+)
使用hyperloglog插件,PostgreSQL可以实现概率计算,包括count distinct的概率计算。
https://github.com/citusdata/postgresql-hll
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 3》
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 2》
《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 1》
《[转]流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms》
五、Container Database Architecture
Container Database Architecture
Oracle 18c
https://docs.oracle.com/en/database/oracle/oracle-database/18/newft/new-features.html#GUID-028D54E7-DEDB-44FD-9C42-75725032B697
PostgreSQL 8.0+ (2005 year+)
PostgreSQL设计之初就是PDB模式,即一个实例,多个数据库。围绕数据库,支持多种操作,如:
1、克隆数据库
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ] ]
例如
create database new_db with template old_db;
2、DUMP 数据库
pg_dump。 采用repeatable read隔离级别导出,库级别一致。
3、IMPORT 数据库
pg_restore
4、快照功能,(9.2+ )
pg_export_snapshot(),支持导出当前快照。
《PostgreSQL 9.5 new feature - pg_dump use --snapshot taken by another session (exp. slot, pg_export_snapshot())》
《PostgreSQL 事务快照功能 - Parallel Export consistent data or Parallel Query use snapshot transaction feature》
《PostgreSQL 共享事务快照功能 - PostgreSQL 9.2 can share snapshot between multi transactions》
5、订阅数据库,(10+ )
通过订阅功能,支持数据库、表级别的逻辑订阅。
《PostgreSQL 逻辑订阅 - DDL 订阅 实现方法》
《使用PostgreSQL逻辑订阅实现multi-master》
《PostgreSQL 逻辑订阅 - 给业务架构带来了什么希望?》
《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》
6、内核层面理论是也可以实现针对库级的WAL。
六、Globalization
PostgreSQL 10+ (2017 year+)
支持ICU库
The ICU library has versioning that allows detection of collation changes between versions.
It is enabled via configure option --with-icu.
The default still uses the operating system's native collation library.
《PostgreSQL 10.0 preview 功能增强 - 国际化功能增强,支持ICU(International Components for Unicode)》
七、分区
1 Parallel Partition-Wise SQL Operations
Oracle 18c
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=DWHSG-GUID-9CEE2551-7E43-472E-9B68-89E738F42C0A
PostgreSQL 11+ (2018 year+)
PostgreSQL 11支持分区表的智能JOIN。
《PostgreSQL 11 preview - 分区表智能并行JOIN (已类似MPP架构,性能暴增)》
在PostgreSQL 11前,通过dblink异步调用,可以实现同样功能,不过需要用户自己关注分区定义是否一致。
《PostgreSQL dblink异步调用实现 并行hash分片JOIN - 含数据交、并、差 提速案例 - 含dblink VS pg 11 parallel hash join VS pg 11 智能分区JOIN》
2 Online Merging of Partitions and Subpartitions
Oracle 18c
The ONLINE keyword is specified to enable concurrent DML operations while a partition maintenance operation is ongoing.
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=VLDBG-GUID-0E7793F7-B38A-427E-846B-7A8651F2A523
PostgreSQL 9.5+ (2015 year+)
pg_pathman ,通过这个插件,可以实现高效的分区管理。
https://github.com/postgrespro/pg_pathman
自动或手动分区管理
Both automatic and manual partition management;
自动新增分区,无需人工干预
Automatic partition creation for new INSERTed data (only for RANGE partitioning);
支持字段或表达式分区
Partitioning by expression and composite key;
将单表转换为分区表时,不堵塞DML
Non-blocking concurrent table partitioning;
partition_table_concurrently(relation REGCLASS,
batch_size INTEGER DEFAULT 1000,
sleep_time FLOAT8 DEFAULT 1.0)
分区表执行计划自动根据分区定义进行优化
Effective query planning for partitioned tables (JOINs, subselects etc);
分区表支持外部数据源
FDW support (foreign partitions);
合并和分裂分区接口例子
merge_range_partitions(partitions REGCLASS[])
split_range_partition(partition REGCLASS,
split_value ANYELEMENT,
partition_name TEXT DEFAULT NULL)
如果是PostgreSQL 10+,则可以使用SQL语法来绑定和解绑分区,结合订阅,DDL事务功能,可以实现在线合并、分裂分区。
https://www.postgresql.org/docs/devel/static/sql-altertable.html
逻辑订阅, ddl 支持事务, detach, attach
3 Modifying the Partitioning Strategy
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=VLDBG-GUID-763391C6-44E8-401D-8119-DC12926F5877
PostgreSQL 10+ (2018 year+)
通过逻辑订阅来实现,分区定义的修改,不堵塞dml
1、db2创建新表
2、db1创建发布
3、db1将旧表添加到发布
4、db2创建订阅
5、db2创建发布
6、db2将新表添加到发布
7、db1创建新表
8、db1创建订阅
9、db1切换新、旧表
(目前可能需要借助一个临时库绕一圈,同一数据库中无法订阅)
八、安全
1 Integration of Active Directory Services with Oracle Database
Oracle 18c
https://www.oracle.com/pls/topic/lookup?ctx=en/database/oracle/oracle-database/18/newft&id=DBSEG-GUID-9739D541-FA9D-422A-95CA-799A4C6F488D
PostgreSQL 8.2+ (2007 year+)
PostgreSQL 8.2即引入了LDAP的认证。
除了LDAP,PostgreSQL还支持多种认证接口:
https://www.postgresql.org/docs/current/static/auth-methods.html
20.3.1. Trust Authentication
20.3.2. Password Authentication
20.3.3. GSSAPI Authentication
20.3.4. SSPI Authentication
20.3.5. Ident Authentication
20.3.6. Peer Authentication
20.3.7. LDAP Authentication
20.3.8. RADIUS Authentication
20.3.9. Certificate Authentication
20.3.10. PAM Authentication
20.3.11. BSD Authentication
《PostgreSQL LDAP认证之 search bind配置》
《PostgreSQL LDAP认证之 simple bind配置》
《PostgreSQL Windows AD认证配置》
小结
PostgreSQL是一个全栈数据库,不输于现在的商用数据库,有非常弹性的许可协议(like BSD),有非常广泛的行业群众基础,生态健全。
下面是一篇较为全面的PostgreSQL数据库介绍:
《阿里云 PostgreSQL:云生态、企业案例、开发实践、管理实践、学习资料、学习视频》
参考
https://docs.oracle.com/en/database/oracle/oracle-database/18/whats-new.html
文章
Web App开发 · 算法 · 关系型数据库 · 物联网 · 数据库 · 索引
2018-02-28