Posts by Year

2018

PostgreSQL(PPAS 兼容Oracle) 从零开始入门手册 - 珍藏版

17 minute read

背景 云数据库PPAS版,是阿里云与EnterpriseDB公司(简称EDB)合作基于PostgreSQL高度兼容Oracle语法的数据库服务,为用户提供易于操作的迁移工具,兼容范围涵盖:PL/SQL、数据类型、高级函数、表分区等。 用户可以直接在阿里云购买PPAS进行使用。 如果在购买PPAS前,想试用一下...

PostgreSQL pipelinedb 流计算插件 - IoT应用 - 实时轨迹聚合

1 minute read

背景 IoT场景,车联网场景,共享单车场景,人的行为位点等,终端实时上报的是孤立的位点,我们需要将其补齐成轨迹。 例如共享单车,下单,开锁,生成订单,骑行,关闭订单,关锁。这个过程有一个唯一的订单号,每次上报的位点会包含时间,订单号,位置。 根据订单号,将点聚合为轨迹。 使用pipelinedb插件,可以实...

PostgreSQL datediff 日期间隔(单位转换)兼容SQL用法

1 minute read

背景 使用datediff,对时间或日期相减,得到的间隔,转换为目标单位(日、月、季度、年、小时、秒。。。等)的数值。 DATEDIFF ( datepart, {date|timestamp}, {date|timestamp} ) 周 select datediff(week,'2009-01-0...

PostgreSQL DNS 解析功能 - get ip, get host name

11 minute read

背景 在数据库中,根据主机名获得IP,根据IP解析主机名。 这个功能没有什么花哨,可以通过C函数或者PYTHON函数得到。 src/common/ip.c /* * pg_getnameinfo_all - get name info for Unix, IPv4 and IPv6 sock...

PostgreSQL 分区表、继承表 记录去重方法

2 minute read

背景 当使用数据库分区或继承功能,在PK层面上出现分区与分区,或分区与主表出现了重复的键值时,可以通过tableoid进行甄别,同时通过ONLY TABLE的操作方法进行删除。 select tableoid::regclass delete|select|update|truncate only ...

阿里云ppas 逻辑备份(导出)、还原 - 导出到本地、从本地导入

2 minute read

背景 阿里云RDS PPAS是PG的企业版本,兼容PG同时兼容Oracle。 由于ppas做了很多兼容ORACLE的工作,所以元数据与PG社区版本有很大不同,那么用户在使用RDS PPAS时,如果有导出、导入的需求,请使用EDB 的pg_dump, pg_restore,请不要使用pg社区版本的pg_dump与...

AWS redshift->hdb pg(Greenplum),DDL语法转换规则

5 minute read

背景 redshift 和 Greenplum都是源自PostgreSQL的MPP数据库: https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases 语法上有一些差异,从redshift切换到greenplum(或阿里云hdb pg)时,DDL...

PostgreSQL JOIN limit 优化器 成本计算 改进 - mergejoin startup cost 优化

7 minute read

背景 PostgreSQL limit N的成本估算,是通过计算总成本A,以及估算得到的总记录数B得到: (N/B)*A 大概意思就是占比的方法计算 对于单表查询,这种方法通常来说比较适用,但是如果数据分布有倾斜,实际上也并不一定适用,例如以下两种情况: 1、符合条件的数据占总记录数的50%...

PostgreSQL Mastering book 序

less than 1 minute read

背景 从互联网、移动互联网到互联网+、再到IoT、万物互联、人工智能,计算机数十年就从科技行业渗透到了几乎所有的传统行业,线上线下打通,甚至将来会完全融合的状态。企业数据爆炸性增长,数据库在整个变革中承担了非常重要的角色,掀起了数据驱动的狂潮。 PostgreSQL数据库凭借丰富的功能,强大的扩展接口能力,稳定...

PostgreSQL bloom filter index 扩展 for bigint

2 minute read

背景 凡是支持HASH函数,以及相等operator的类型,都可以使用bloom filter index . 扩展方法见本文。 原文 https://obartunov.livejournal.com/201027.html Bloom index by default works for int4 an...

PostgreSQL pg_top pgcenter - 实时top类工具

3 minute read

背景 PostgreSQL 的统计信息、实时会话信息、操作系统状态信息等汇总,统计,展示。 https://www.postgresql.org/docs/devel/static/monitoring-stats.html 1 pgcenter https://github.com/lesovsky/pgc...

PostgreSQL pgmetrics - 多版本、健康监控指标采集、报告

23 minute read

背景 pgmetrics,GO写的一款PostgreSQL 多版本、健康监控指标采集、报告开源软件。 https://github.com/rapidloop/pgmetrics 结合pgdash,可以实现被监控PG实例的可视化,指标值变更告警等。 https://pgdash.io/ pgmetrics...

PostgreSQL PostGIS point join polygon (by ST_xxxx) - pglz_decompress 性能优化

1 minute read

背景 在空间数据中,通常会有轨迹、点、面的数据,假设有两张表,一张为面的表,一张为点的表,使用包含 ST_xxxx(c.geom, p.geom) 来进行JOIN(例如以面为单位,聚合统计点的数量)。 本文介绍了空间JOIN的性能分析,瓶颈分析,优化方法。 原文 http://blog.cleverele...

PostgreSQL Heap Only Tuple - HOT (降低UPDATE引入的索引写IO放大)

30 minute read

背景 PostgreSQL目前默认的存储引擎在更新记录时,会在堆内产生一条新版本,旧版本在不需要使用后VACUUM回收,回收旧版本前,需要先回收所有关联这个版本的所有索引POINT。 PG的索引的KEY为索引字段或表达式的值,VALUE为行号。 8.3以前,每个TUPLE版本(行号)都有对应的索引POINT,...

PostgreSQL 内存表可选项 - unlogged table

10 minute read

背景 内存表,通常被用于不需要持久化,变更频繁,访问RT低的场景。 目前社区版本PostgreSQL没有内存表的功能,postgrespro提供了两个插件可以实现类似内存表的功能。 https://postgrespro.com/docs/enterprise/10/in-memory 《PostgreSQ...

PostgreSQL undo多版本存储引擎 zheap测试

5 minute read

背景 undo 存储引擎,由于大量使用inplace update,所以大幅度降低了表膨胀的概率。并且减少了垃圾回收引入的IO。 预计会在PG 12的版本中release。 目前可以下源码进行测试。 部署zheap引擎 1、源码使用 https://github.com/EnterpriseDB/zhea...

PostgreSQL 11 1Kw TPCC , 1亿 TPCB 7*24 强压耐久测试

29 minute read

背景 TPCC, TPCB是工业标准的OLTP类型业务的数据库测试,包含大量的读、写、更新、删除操作。 7*24小时强压耐久测试,主要看数据库在长时间最大压力下的 性能、稳定性、可靠性。 测试CASE : 1、1000万 tpcc 2、1亿 tpcb 测试时长7天。 测试环境 与如下测试同一台ECS虚...

PostgreSQL pgbench tpcb 海量数据库测试 - 分区表测试优化

3 minute read

背景 pgbench是PG的一款测试工具,内置的测试CASE为tpcb测试。同时支持用户自己写测试CASE。 大量自定义CASE参考 https://github.com/digoal/blog/blob/master/201711/readme.md 当我们使用tpcb测试CASE时,如果生成的数据量过于...

PostgreSQL pgbench tpcb 数据生成与SQL部分源码解读

4 minute read

背景 pgbench是PG的一款测试工具,内置的测试CASE为tpcb测试。同时支持用户自己写测试CASE。 大量自定义CASE参考 https://github.com/digoal/blog/blob/master/201711/readme.md 本文为pgbench 内置tpcb的解读。 源码 s...

PostgreSQL pageinspect 诊断与优化GIN (倒排) 索引合并延迟导致的查询性能下降问题

2 minute read

背景 GIN索引为PostgreSQL数据库多值类型的倒排索引,一条记录可能涉及到多个GIN索引中的KEY,所以如果写入时实时合并索引,会导致IO急剧增加,写入RT必然增加。为了提高写入吞吐,PG允许用户开启GIN索引的延迟合并技术,开启后,数据会先写入pending list,并不是直接写入索引页,当pendi...

PostgreSQL 11 100亿 tpcb 性能测试 on ECS

19 minute read

背景 PostgreSQL 11 发布在即,以下是tpcc与tpch测试的结果: 《PostgreSQL 11 tpcc 测试(103万tpmC on ECS) - use sysbench-tpcc by Percona-Lab》 《(TPC-H测试 SF=10,SF=200) PostgreSQL 11 ...

PostgreSQL 大版本升级方法之一 - 不落地并行导出导入

1 minute read

背景 尽量快的大版本升级的方法。 一、9.4以下版本,使用pg_dump并行导出,pg_restore并行导入,迁移 (导出使用源版本pg_dump,导入使用目标版本pg_restore。如果是ppas请使用enterprisedb对应版本。) 1、(源库)全局元数据(用户、表空间)导出 需要superus...

PostgreSQL 块级 snapshot (flash back) - postgrespro improvement

1 minute read

背景 Postgrepro提供了一个snapshot fs的功能,允许用户对数据库状态打快照,并可以在将来迅速的闪回到某个过去的快照。 这个功能是通过数据库page级COW来实现的,类似ZFS文件系统的快照功能,在PostgreSQL 内核层面实现了。 snapshot fs与逻辑flashback quer...

PostgreSQL 任意字段数组合 ANDOR 条件,指定返回结果条数,构造测试数据算法举例

1 minute read

背景 在进行一些实际的POC测试时,需要根据业务提出的需求构造数据,比如按照任意字段数组合 AND\OR 条件,指定返回结果条数,构造测试数据。 需求 表记录数A 表字段数B 1、N个字段等值OR,命中M条记录 (两个条件无法同时满足) 2、X个字段等值AND,命中Y条记录 字段取值空间如何计算? ...

PostgreSQL sharding : citus 系列5 - worker节点网络优化

4 minute read

背景 citus 节点间的网络需求: 1、cn节点访问所有worker节点。oltp业务的访问较频繁。 2、重分布数据时,worker节点间相互访问。访问频度不大,OLAP业务常见,一旦有可能数据交换吞吐较大。 citus的cn节点连worker节点为有两种模式, 一种为事务级保持连接模式(每条SQL发起...

PostgreSQL 相似搜索插件介绍大汇总 (cube,rum,pg_trgm,smlar,imgsmlr,pg_similarity) (rum,gin,gist)

2 minute read

背景 在搜索业务场景中,相似搜索是一个非常常见的需求。 PostgreSQL有很多插件、索引可以支持海量数据的高效率搜索。 以下是一些案例: 《Greenplum 轨迹相似(伴随分析)》 《PostgreSQL 相似文本检索与去重 - (银屑病怎么治?银屑病怎么治疗?银屑病怎么治疗好?银屑病怎么能治疗好?...

Greenplum 优化CASE - 对齐JOIN字段类型,使用数组代替字符串,降低字符串处理开销,列存降低扫描开销

2 minute read

背景 Greenplum通常被用作OLAP,在一些用户使用过程中,可能因为数据结构设计,SQL问题等原因导致性能不佳,虽然通过增加节点可以解决问题,但是如果能优化的话,可以节约不少硬件资源。 例如 1、对齐JOIN字段类型。如果等值JOIN的字段类型不一致,无法使用HASH JOIN。 2、对齐where条...

Deepgreen(Greenplum) 多机部署测试 , TPC-H VS citus

16 minute read

背景 多机部署deepgreen,与greenplum部署方法类似。 本文仅用于测试。 1 环境 与之前测试citus的环境一致,9台ECS虚拟机。 xxx.xxx.xxx.228 digoal-citus-gpdb-test001 xxx.xxx.xxx.224 digoal-citus-gpdb-t...

PostgreSQL dblink异步调用实践,跑并行多任务 - 例如开N个并行后台任务创建索引, 开N个后台任务跑若干SQL

5 minute read

背景 使用DBLINK异步接口,可以非常方便的实现跑后台任务,如果要让数据库执行若干条SQL,开N个并行执行,同样可以使用DBLINK封装成API进行调用。 例如,结合我前面的一些文字,可以实现自动选择索引接口、指定并行度、指定表空间、给所有字段创建索引。 《自动选择正确索引访问接口(btree,hash,g...

PostgreSQL sharding : citus 系列2 - TPC-H

6 minute read

背景 紧接着上一篇文档,本文测试citus的tpc-h能力(包括兼容性). 《PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)》 《(TPC-H测试 SF=10,SF=200) PostgreSQL 11 vs 10 vs Deepgreen》 h...

PostgreSQL citus, Greenplum 分布式执行计划 DEBUG

17 minute read

背景 开启DEBUG,可以观察citus, Greenplum的SQL分布式执行计划,下发情况,主节点,数据节点交互情况。 执行explain前,打开DEBUG。 set client_min_messages ='debug5'; \set VERBOSITY verbose explain...

[转载] TPCH 22条SQL语句分析

9 minute read

背景 原文链接 https://yq.aliyun.com/articles/149715 作者, 阿福 原文 使用TPC-H进行性能测试,需要有很多工作配合才能获得较高性能,如建立索引,表数据的合理分布(使用表空间和聚簇技术)等。 本文从查询优化技术的角度,对TPC-H的22条查询语句和主流数据库执行每...

PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)

17 minute read

背景 《(TPC-H测试 SF=10) PostgreSQL 11 vs 10 vs Deepgreen》 测试结果证明PG已经是一个HTAP数据库,可以同时满足OLTP,OLAP的需求。 citus是PG的一个sharding插件,可以把PG变成一个分布式数据库。目前在苏宁有大量的生产应用跑在citus+p...

Greenplum csvlog(日志数据)检索、释义(gp_toolkit.gp_log*)

8 minute read

背景 由于GP为分布式数据库,当查看它的一些日志时,如果到服务器上查看,会非常的繁琐,而且不好排查问题。 例如这是某个节点的日志 2018-08-23 15:34:30.004070 CST,"digoal","postgres",p12775,th-1756479360,"127.0.0.1","52802...

PostgreSQL 12 preview - plan_cache_mode参数控制强制使用plan cache或强制custom plan (force_custom_plan and force_generic_plan)

1 minute read

背景 plan cache在OLTP中,可以大幅降低生成sql parser, 执行计划的开销。 但是在某些场景中,plan cache可能成为问题,比如AP类型的场景中,由于SQL 输入条件的变化(通常AP业务涉及的条件可能比较容易出现这样的问题),可能导致plan cache并不是最佳的执行计划。 Pos...

PostgreSQL json内容特殊字符使用unicode代替

less than 1 minute read

背景 json中包含特殊字符时,可能导致输入异常,可以转换为UNICODE后,即可正常输入。 格式为 \u[0-f]{4} postgres=# select '{"id1":1, "id2":2, "info":"digoal d\u0061t\u0061 ab", "c1":123, "c2":1.1, ...

PostgreSQL 快速给指定表每个字段创建索引 - 1 (不够完美)

1 minute read

背景 如何快速给表的所有字段,每个字段都加上索引。 《PostgreSQL 设计优化case - 大宽表任意字段组合查询索引如何选择(btree, gin, rum) - (含单个索引列数超过32列的方法)》 满足任意字段组合查询的需求。 例子 (PostgreSQL 11) 1、如果需要在单个事务中要创建...

MSSQL(SQL Server) on Linux 简明部署与使用

4 minute read

背景 本文介绍MS SQL on Linux的简单部署,使用。 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2017 后面简单介绍如何将MS SQL迁移到Postgr...

PostgreSQL Oracle 兼容性之 - DBMS_OUTPUT.PUT_LINE

1 minute read

背景 在函数、存储过程中需要进行一些debug,输出一些过程变量的值时,PG中使用raise notice可以非常方便的得到。 Oracle put_line在存储过程、函数中通常被用于调试,输出一些变量,时间值。 CREATE FUNCTION dept_salary (dnum NUMBER) RETUR...

PostgreSQL 无会话、有会话模式 - 客服平均响应速度(RT)实时计算实践(窗口查询流计算)

19 minute read

背景 通常客服系统可能存在一对多,多对多的情况。 例如, 我们在使用淘宝时,与店家交流时,你根本不知道后面的小二是一个人还是多个人共用一个账号,还有可能是多个人使用了多个账号但是对消费者只看到一个。 例如: 小二(n)账号 -> 统一对外账号 -> 消费者 还有的情况是一个小二为多个消费者服...

MySQL 不落地迁移、导入 PostgreSQL - 推荐 rds_dbsync

2 minute read

背景 将MySQL数据不落地的方式导入PostgreSQL。 1 rds_dbsync (推荐使用) 《MySQL准实时同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync》 这个效率最高,支持不落地,支持流式导入,支持单表并发(通过配置文件,写WHERE条件,拆成多个并发导同...

PostgreSQL 恢复模式错误日志增强 - 提供正在恢复的WAL(XLOG)文件位置

1 minute read

背景 当数据库异常停库,再次启动时。又或者由于进程CRASH后自动重启时。需要进入恢复模式,恢复完成后,数据库才能正常交互。 在启动过程中,正在恢复时,如果此时连接数据库,会报错如下: the database system is starting up 用户只看这个信息,并不知道数据库还要启动多久,...

PostgreSQL 内容随机推荐系统开发实践 - 文章随机推荐

3 minute read

背景 内容推荐是蛮普遍的需求,例如论坛、电商、新闻客户端等。 比较简单的需求:编辑精选一些内容ID,生成推荐列表。(例如每天生成一个这样的推荐列表。)然后随机的推荐给用户(同时过滤已读的内容)。 更高级的推荐需求:应该是根据不同口味产生的,例如对会员本身进行画像,归类。服务端针对不同口味生成不同的推荐列表。定...

PostgreSQL PostGIS 空间数据约束使用

2 minute read

背景 空间数据有一定的规范,例如SRID的规范。空间类型geometry包罗万象,除了能存储POINT,还能存储多边形,线段等。 这就带来一个有意思的烦恼,当我们业务不够规范时,你可以往GEOMETRY里面存储任意SRID的数据,存储任意的空间对象。 1、SRID错乱,可能导致一些查询,索引问题。 2、本身...

PostgreSQL 当有多个索引可选时,优化器如何选择

11 minute read

背景 当一个表有很多索引时,并且一个QUERY可以使用到其中的多个索引时,数据库会如何做出选择?最终选择哪个,或者哪几个索引呢? 《PostgreSQL 多查询条件,多个索引的选择算法与问题诊断方法》 选择单个索引时,PATH可以选择index scan , index only scan, bitmap s...

PostgreSQL psql 绘制饼图

3 minute read

背景 图像相比文字是更容易被理解的东西,在BI可视化领域,经常会使用图像来代替数值,展示一些信息,例如柱状图、饼图、线图等。 AWR文字报告里面,如果多几个图像来代替列表,其实也是不错的。 那么SQL能直接画图吗,把一行行的结果,转换成图像。 例如 1、TOP SQL的总耗时占比饼图。 2、数据库对象类...

PostgreSQL 消息平台实践

less than 1 minute read

背景 一个多渠道消息平台的数据库设计。 业务规则 1、消息发送给最终用户,一则消息可以发送给多个社交软件平台(因为一个用户可能使用多个软件平台(比如旺旺,WEB版旺旺,淘宝。。。))。 使用数组存储 社交软件平台 2、一条消息在某社交软件平台已读,则该消息在其他社交软件平台也需要为已读。因为同一条...

PostgreSQL 设计优化case - 大宽表任意字段组合查询索引如何选择(btree, gin, rum) - (含单个索引列数超过32列的方法)

20 minute read

背景 大宽表,任意字段组合查询,透视。是实时分析系统中的常见需求: 1、实时写入。 2、实时任意字段组合查询、透视。 PostgreSQL中,有多种方法支持这种场景: 《PostgreSQL 9种索引的原理和应用场景》 1、方法1,每个字段加一个索引(普通类型用btree, 多值类型(数组,json,全...

PostgreSQL 设计优化case - 多对多 转 一对多(数组)

less than 1 minute read

背景 某个系统存储了会员的标签,以及标签的描述信息。业务上需要通过会员ID得到会员的标签,再得到描述信息。 每个会员有若干标签,原来是这么存储的 1、会员标签表,人数5亿左右,每个人平均有几百个标签,1500亿行左右。 create table a(uid int8, tag int); 2、标签描...

PostgreSQL AB表切换最佳实践 - 提高切换成功率,杜绝雪崩 - 珍藏级

6 minute read

背景 AB表切换经常出现在数据导入的场景中,例如每天或者每个固定周期,需要全量导入一批数据到数据库,同时被导入的数据要持续的被查询。 为了尽量避免导入影响查询,通常会使用AB表切换的方法。使用如下步骤: 1、建新表 2、全量数据导入到新表 3、在新表上面建必要的索引 4、切换新、老表名 但是,注意,由...

PostgreSQL 生成空间热力图

6 minute read

背景 结合空间数据,计算基于地理位置信息的热力图,在空间数据可视化场景中是一个非常常见的需求。 结合流计算,可以实现实时的热力图计算。 结合并行计算,可以高效率的对海量数据进行热力图计算。 计算热力图中bucket的方法 https://www.postgresql.org/docs/devel/st...

PostgreSQL 空间位置(geometry 经纬、点、线、面…)、行政地址(门牌、商圈、行政区…) 相互转换方法

2 minute read

背景 空间位置(geometry 经纬、点、线、面…)、行政地址(门牌、商圈、行政区…) 相互转换需求,如果你有这方面的素材库,在PostgreSQL里面转换,性能是非常高效的。 例如输入任意一个空间对象,扫描出附近的空间对象,或者包含它的对象,或者它包含的对象。(构图) 输入任意一个空间对象,搜索离他最近的...

PostgreSQL 异步消息(LISTEN/NOTIFY)缓存多大?

4 minute read

背景 PostgreSQL异步消息功能的一些应用: 《PostgreSQL 流式处理应用实践 - 二手商品实时归类》 《PostgreSQL 事件触发器应用 - DDL审计记录 + 异步通知(notify)》 《从电波表到数据库小程序之 - 数据库异步广播(notify/listen)》 《use Pos...

PostgreSQL Oracle 兼容性之 - 全局临时表 global temp table

1 minute read

背景 PostgreSQL 临时表结构是会话级别的,而在Oracle中,临时表的结构是全局有效的,只是数据会话之间独立。 为了让PostgreSQL临时表的使用与Oracle兼容,除了内核层面兼容之外,目前只能在使用时注意。 使用以下方式: 1、plpgsql中 创建普通表(默认会创建对应的复合类型), ...

PostgreSQL Oracle 兼容性 - connect by 2

3 minute read

背景 Oracle connect by语法经常用于有树形关系的记录查询,PostgreSQL使用CTE递归语法,可以实现同样的功能。 《PostgreSQL Oracle 兼容性之 - connect by 高级选项 CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH、CONNECT_...

PostgreSQL 随机数据生成(tablefunc.normal_rand 指定mean stddev)

1 minute read

背景 生成测试数据,PostgreSQL有各种各样的方法,建本文参考文档。 本文提供一种生成指定任意个数、平均值、标准方差的数值。使用tablefunc插件的normal_rand即可。 ``` F.38.1.1. normal_rand normal_rand(int numvals, float8 me...

PostgreSQL 流式处理应用实践 - 二手商品实时归类(异步消息notify/listen、阅后即焚)

4 minute read

背景 因为二手商品没有太多的活动、硬性分类,广告等活动,所以购买或者销售速度没有新商品那么快。为了提高二手商品的销售效率,需要提供一套归类策略。 当商品新增或商品内容发生变化时,需要根据商品属性,以及定义的规则,实时进行商品归类(鱼塘,圈子等)方便用户查询。 结构设计 1、商品ID,属性 create ta...

PostgreSQL oracle 兼容性 - 字符串内嵌 NULL字符(空字符)chr(0) 转换为 chr(32)

less than 1 minute read

背景 在Oracle中,存储字符串时,允许用户将空字符存到字符串中,虽然这种用法可能不常见,但是给Oracle迁移到PG的用户带来了一些小麻烦,因为PG中chr(0)是作为结束符来处理的,不允许作为用户输入传入字符串中。 如果要存储chr(0)字符,PostgreSQL 必须存储在字节流类型中。 Oracle...

PostgreSQL 空间类型统计信息(Statistics, Cardinality, Selectivity, Estimate)不准确导致SQL执行计划不准(包含、相交查询)的优化实践

6 minute read

背景 PostgreSQL 通过几何类型以及PostGIS插件,支持丰富的空间类型,空间数据类型包括KNN检索,空间包含,空间相交,方位搜索,空间计算等操作。 为了得到正确的执行计划,在数据库优化器中,评估满足某个操作符条件的行数,是一个重要的CBO依据。 而评估选择性又依赖统计信息,同时依赖每种操作符的选择...

PostgreSQL quorum based同步复制模式在极端情况下的0丢失破坏问题

1 minute read

背景 PostgreSQL 9.6开始支持了quorum based 同步复制机制,当客户端发起事务结束请求时,必须要等这笔事务对应的redo日志复制到了指定副本,主库才响应客户端。 从而保证客户端正常收到主库反馈后,WAL日志一定已经有了多个副本,保证数据的0丢失。 但是在极端情况下,可能无法保障0丢失,为...

PostgreSQL 如何检测分布式死锁 - postgrespro pg_shardman

3 minute read

背景 单机的死锁检测是比较容易实现的,通过判断等待中的事务是否查询环状,即可实现。例如下面的图,A等B, B等C, C等A,出现环状,即认为死锁。 而对于分布式事务,由于相互等待的事务可能出现在不同的数据节点上,如何判断分布式死锁呢? 为了判断是否有环,必须引入全局事务号,或者有标识可以在每个数据节点上标...

PostgreSQL 模拟两个update语句死锁 - 利用扫描方法

1 minute read

背景 在单条UPDATE中模拟死锁,需要借助扫描方法,以及明确让AB两个会话分别锁定一条记录后再锁定对方已经锁定的记录。 利用批量update的语法以及values子句即可实现,这里利用了嵌套循环,确保被更新的表被多次扫描,并且每次扫描时两个会话更新的记录被错开,达到死锁效果。 同时为了让速度慢下来,使用pg...

PostgreSQL 电商业务(任意维度商品圈选应用) - json包range数组的命中优化 - 展开+索引优化

4 minute read

背景 电商,任意维度商品圈选应用,其中一个查询请求是这样的: 求 “某个国家、某个时间点、调价+折扣后的价格” 落在某个价格范围的商品。 首先需要有的要素包括: 1、商品ID 2、不同国家的商品价格 3、商品原价 4、商品日常价 5、不同时间段的价格折扣 6、调价系数 例子 1、表结构设计 ...

PostgreSQL 函数式索引使用注意 - 暨非immutable函数不适合索引的原因

2 minute read

背景 PostgreSQL支持表达式索引,但是表达式必须是immutable的,也即是当输入参数不变时,结果是永恒不变的。 因为当表达式涉及的变量不变时,索引本身不会变化。 给个例子,如果我们有一张表存储了商品价格,另一张表存储了商品折扣 ,如果我们想通过折扣后的价格范围搜索符合价格区间的商品ID,可以使用索...

如何让json里面的value支持索引范围检索

1 minute read

背景 JSON,JSONB是PG从9就开始引入的数据类型,开发人员非常喜欢,对于JSON里面的内容的检索,我们可以使用GIN索引,目前直接对JSON字段创建GIN索引,可以支持任意PATH的等值、包含检索。 https://www.postgresql.org/docs/10/static/datatype-j...

HybridDB for PostgreSQL , Greenplum 写入性能优化实践

2 minute read

背景 Greenplum写入数据的性能优化实践。 1 链路 尽量缩短客户端和数据库的链路,不要太多的跳数,比如NAT,PROXY,等越多,性能越差。 2 连接方式 尽量使用长连接,不要使用短连接,短连接的打开开销非常大。 3 存储属性 where storage_parameter is: APP...

PostgreSQL stable 函数调用次数

2 minute read

背景 immutable 函数,输入参数静态时,返回结果不变,所以它在plan前先计算,得到一个常量后,放到QUERY里面再生成执行计划。 stable 函数,输入参数静态时,如果在一个事务中多次调用它,返回结果不变。 显然一个immutable 函数在同一个SQL中,永远只调用一次,(在bind , exe...

PostgreSQL vacuum 的页内tuple move收缩空间

13 minute read

背景 当往数据库内插入记录时,PostgreSQL heap page内部的空间分配是这样的,lp内容为对应tuple在当前页的OFFSET,lp的位置固定长度固定(固定page head后面就是lp),lp固定方便tuple的搜索(例如ctid的第二个部分就是lp信息)。 lp从page head...

PostgreSQL 多值列的选择性 - Statistics, Cardinality, Selectivity, Estimate

15 minute read

背景 基于成本的优化器,选择性估算是重要的环节,对于单值列,通过表的行数,数据分布柱状图、高频值、唯一值比例、空值比例等统计信息(pg_class, pg_stats),以及用户输入的条件,可以估算得到输入条件的选择性。 对于多个条件的估算,之前PG给了比较暴力的AND,OR的叠加选择性计算。 PG 10开始...

Greenplum支持人为多阶段聚合的方法 - 直连segment(PGOPTIONS=’-c gp_session_role=utility’) Or gp_dist_random(‘gp_id’) Or 多阶段聚合 prefunc

7 minute read

背景 聚合操作是分析型场景中最常见的需求之一,在Greenplum中,数据已分布存储,聚合操作需要多阶段执行。 实际上PostgreSQL 9.6开始支持并行聚合后,聚合的方法也与分布式数据库的多阶段聚合类似。 创建聚合函数时,必须实现多阶段的API才能够让聚合操作真正的并行起来。 有些插件可能因为某些原因...

Greenplum 与 PostgreSQL 修改元数据(catalog)的方法 allow_system_table_mods

1 minute read

背景 PostgreSQL大量的信息保存在元数据中,所有的元数据都是内部维护的,例如建表、建索引、删表等操作,自动维护元数据。 在某些迫不得已的情况下才可能需要直接对元数据进行修改。 默认情况下,用户是允许修改元数据的。 postgres=# \set VERBOSITY verbose post...

在PostgreSQL中跑后台长任务的方法 - 使用dblink异步接口

2 minute read

背景 如果业务上需要在数据库中跑LONG SQL,并且不希望跑的过程中因为窗口断开,导致数据库任务用户主动cancel query。有什么方法? 使用DBLINK异步调用是不错的方法,相当于数据库内部建立了连接在后台跑。 方法 1、创建任务表,方便观察任务状态 create table tbl_task (...

[转载] gdb 调试打印完整字符串

less than 1 minute read

背景 原文 https://blog.csdn.net/shuizhizhiyin/article/details/53227913 正文 在使用gdb调试过程中,经常需要查看变量的值,最常用的方法: (gdb) print {变量名} 一般情况下,打印并不存在问题。但当一个字符串比较长时,打印出来的...

PostgreSQL 对象权限如何在元数据中获取 - 权限解读、定制化导出权限

10 minute read

背景 在PostgreSQL中,如何查询出指定用户的:系统权限、角色权限,以及其他用户的对象权限? 实际上PostgreSQL中所有权限都以ACL的形式存储在元数据中,所以权限并不是在某一张与用户挂钩的元数据表里面,而是分散在不同类型的对象的元数据中,以一个ACL字段存在。 导出与某个用户相关的权限方法1 用...

线下PG迁移到阿里云RDS PG - 兼容性、性能评估、迁移

3 minute read

背景 用户如果需要将线下的PG数据库迁移到阿里云RDS PG,应该评估哪些东西,如何迁移? 1 规格、性能评估 主要评估线下PG实例所在主机的性能指标 1、CPU主频 2、CPU核数 3、磁盘使用容量 4、网络带宽 5、磁盘读写IOPS 6、磁盘读写带宽 这些指标应该尽量与阿里云RDS PG对齐。...

PostgreSQL 开启“审计日志、时间记录”带来的性能影响有多少?

13 minute read

背景 开启审计日志,或者开启数据库的SQL耗时记录,会给数据库带来多大的性能开销? 1、审计日志通过log_statement设置,可以设置为all, ddl, mod, none,分别表示审计所有SQL,DDL SQL,DML SQL,不审计。 开启审计时,在执行SQL的时候(提交SQL请求时),数据库日志...

PostgreSQL 流复制协议交互式调试 - replication=true

2 minute read

背景 当客户端连接到PG服务端时,startup包里面可以带入一些信息。 src/interfaces/libpq/fe-connect.c 当postmaster解析startup包时,如果解析到replication的参数信息,则会启动wal sender进程与客户端交互,交互采用stream repli...

PostgreSQL libpq multi-host 配置与简单HA实现

1 minute read

背景 PostgreSQL libpq 是数据库的一个连接驱动,支持多主机配置,同时支持target_session_attrs 主机角色判断配置。 当配置了多个主机时,会按顺序尝试连接,之道获取到成功的连接为止。 什么是成功的连接,满足以下两点: 1、能与之成功建立连接。 2、如果target_sess...

[未完待续] PostgreSQL 一键诊断项 - 珍藏级

11 minute read

背景 一、诊断项类目 - 规格、配置 一 规格 1 数据库实例规格 检测方法 规格配置是否与实际配置相符 cpu mem iops network bandwidth disk size 告警规则 处理方法 背景知识 二 配置 1 ROLE,DB级定制配置 检测方法 select * from p...

PostgreSQL 实时健康监控 大屏 - 低频指标 - 珍藏级

7 minute read

背景 最关键的一些数据库健康指标,趋势监测。 1 数据年龄 年龄不能超过20亿(大概值),建议当达到15亿时,应尽快安排freeze。 postgres=# select datname,age(datfrozenxid) from pg_database order by 2 desc; datn...

PostgreSQL 实时健康监控 大屏 - 高频指标 - 珍藏级

6 minute read

背景 最关键的一些数据库健康指标,趋势监测。 1 总连接数 主要看趋势,直接与业务量挂钩 如果连接数接近max_connection水位,需要注意。 同时连接数应与数据库主机可用内存挂钩,每个连接保守估计10MB内存开销(这里还未计算SYSCACHE,RELCACHE)。 select count(*) ...

PostgreSQL , Oracle command reference 语法手册解读

less than 1 minute read

背景 我们在查语法手册是,比如Oracle, PostgreSQL 语法手册,经常看到里面很多这样的东西, postgres=# \h insert Command: INSERT Description: create new rows in a table Syntax: [ WIT...

PostgreSQL 登陆登出(login logout)事件触发方法

less than 1 minute read

背景 PostgreSQL 支持event trigger,但是event局限于DDL。当发生DDL时,可以触发一些动作调用用户自定义的event trigger函数,函数内容随意,比如审计,比如DDL逻辑复制,比如权限控制等。 对事件触发器感兴趣可以见我的GITHUB。 《PostgreSQL 登陆登出(l...

理解数据库扫描方法 - 利用扫描方法对数据存储进行优化

3 minute read

背景 假设一个黑盒中有三种水果:苹果,香蕉、菠萝。一共有若干个水果。 假设你需要拿10个苹果,你需要拿多少次呢? 最差的情况,你可能需要把所有的水果都拿完。(全表扫描,扫到最后才拿到10个或者不足10个) 最好的情况,你可能10次就拿完。(全表扫描,扫10行全都是苹果。) PS:索引扫描这里就不说了,因为...

Greenplum 轨迹相似(伴随分析)

2 minute read

背景 《阿里云 PostgreSQL 产品生态;案例、开发实践、管理实践、学习资料、学习视频 - 珍藏级》 以上有个CASE是讲:如何找出在同一辆车内的人,实际上就是通过车辆、人物的轨迹点数据,进行多轮的求交集,将结果收敛到一个较小的范围。 Greenplum伴随分析测试 1、创建测试表 create t...

PostgreSQL + PostGIS 时态分析

6 minute read

背景 假设我们有一些物体的轨迹数据(经纬度、measure(通常存为epoch时间戳)),比如车辆、人、传感器等。 给定一个物体在某个时间范围的轨迹数据,查找有没有与这个物体接触的轨迹,并按亲密度排序。 http://postgis.net/docs/manual-2.4/geometry_distance_...

Greenplum & PostgreSQL UPSERT udf 实现 - 2 batch批量模式

5 minute read

背景 《Greenplum & PostgreSQL UPSERT udf 实现 - 1 单行模式》 批量模式,接口函数的输入参数如下 1、schemaname 2、表名 3、分布键名(数组) 4、每一次请求的内容,JSON或JSONB 数组。(每次请求的字段可能各不相同,所以务必每个JSON或...

PostgreSQL PostGIS 的5种空间距离排序(knn)算法

2 minute read

背景 PostgreSQL GiST索引支持排序接口,可以支撑空间、标准、数组、文本向量、文本等类型的排序。 分别表示: 1、给定一空间位置,按空间距离排序输出 2、给定一数组、全文检索值、字符串,按数组、全文检索、字符串相似度排序输出 3、给定一标准类型的值,按标准类型的距离排序 数据库目前支持哪些排...

Greenplum & PostgreSQL UPSERT udf 实现 - 1 单行模式

6 minute read

背景 PostgreSQL 9.5 开始支持了upsert的语法, PostgreSQL 9.5 以前的版本,可以使用CTE语法来代替insert into on conflict(upsert),实现UPSERT。或者使用UDF来实现。 [《HTAP数据库 PostgreSQL...

CentOS 7 动态调节CPU频率 - 给CPU升降频

2 minute read

背景 以下内容出自互联网: https://blog.csdn.net/zhenwenxian/article/details/6196943 cpufreq是一个动态调整cpu频率的模块,系统启动时生成一个文件夹/sys/devices/system/cpu/cpu0/cpufreq/,里面有几个文件, ...

PostgreSQL standby会不会做检查点? 以及做检查点的用处

2 minute read

背景 当数据库异常关闭时,数据库关闭时来不及或根本没有机会创建一个一致性的检查点,所以需要从上一个一致性检查点开始恢复。 实际上是数据库启动时检查控制文件中的数据库状态,如果状态不是shutdown的,那么说明数据库是异常关闭的(当然我们说,除了recovery状态),总之就需要从检查点开始恢复。 src/i...

PostgreSQL 如何确定某个opclass支持哪些操作符(支持索引),JOIN方法,排序

12 minute read

背景 PostgreSQL有很多的索引接口,同时索引接口还支持用户扩展,当扩展索引时,需要提供opclass。 那么每一个扩展的opclass,支持什么操作符,支持什么JOIN方法,支持排序吗,是默认的OPCLASS吗? 以btree_gin扩展包为例,它扩展了标准类型的GIN索引接口。那么扩展后支持哪些呢?...

PostgreSQL 推荐 TPC-C 测试工具 sqlbench

4 minute read

背景 TPC-C测试工具比较多,比如使用JAVA写的BenchmarkSQL。 sqlbench是阿里云数据库内核团队的mark wong大大开源的一款TPC-C测试软件,完全遵循TPC-C标准编写,关键它是纯C的,效率非常高,并且在遵循TPC-C的标准同时对请求模型进行优化。 https://github....

PostgreSQL wal_buffers 自动计算算法

1 minute read

背景 当wal_buffers设置为-1时,PG会自动计算一个值,取决于几个因素,wal_segment_size, shared_buffer. 算法 src/backend/access/transam/xlog.c /* * GUC check_hook for wal_buffers *...

PostgreSQL Oracle checksum 配置与性能

10 minute read

背景 开启数据库block checksum可以发现磁盘、存储、IO系统的问题引入一些的物理错误。 PostgreSQL checksum 在PostgreSQL中,默认强制对XLOG(WAL)开启了checksum,因此可以保证从redo buffer写入redo file里面的数据是一致的,读取的时候也会根...

PostgreSQL 9.x, 10, 11 hash分区表 用法举例

5 minute read

背景 PostgreSQL 10开始内置分区表语法,当时只支持了range,list两种分区,实际上可以通过LIST实现HASH分区。 PostgreSQL 10 hash 分区表 使用list支持hash分区 postgres=# create table p (id int , info text, cr...

[招聘] [杭州米雅] PostgreSQL 开发 DBA

less than 1 minute read

招聘 PostgreSQL 开发 DBA 1 公司名称 杭州米雅信息科技有限公司 2 公司人数 3 公司简介 出自 https://www.zhipin.com/gongsi/599f316e50481d5803d62Ny6.html?ka=company-intro 米雅是一家新兴的基于移动互联网,专...

[招聘] [招商仁和人寿] PostgreSQL 开发 DBA

less than 1 minute read

招聘 PostgreSQL 开发DBA 公司名称 招商仁和人寿 公司人数 公司简介 https://www.cmrh.com/ 公司网站 https://www.cmrh.com/ 坐标 深圳 职位 PostgreSQL 开发DBA 岗位描述 岗位职责: 1、参与业务系统数据模型设计、开发和优化...

PostgreSQL 多场景 阿里云沙箱实验 预告

3 minute read

背景 为了能够让用户可以更快的上手PostgreSQL,与云栖团队的小伙伴制作了一系列阿里云RDS PostgreSQL沙箱实验。 所有实验内容都结合了应用场景,非常具有代表性,兴趣性与一定的挑战性。 沙箱简介 基础知识准备 http://www.postgresqltutorial.com/ 客户端准备 ...

EDB PPAS (PostgreSQL plus advanced server) 10 参数模板 - 珍藏级

6 minute read

背景 系统参数模板 《PostgreSQL on Linux 最佳部署手册 - 珍藏级》 PostgreSQL 10 参数模板 《PostgreSQL 10 参数模板》 PPAS 10 参数模板 除以下参数模板以外,其他参数参考 《PostgreSQL 10 参数模板》 1、通用部分参数 #------...

PostgresPro buildin pool(内置连接池)版本 原理与测试

10 minute read

背景 PostgreSQL 与Oracle dedicate server 一样采用了线程模式,在连接数非常多时,性能下降会比较严重。 通常社区用户的做法是使用连接池,比如pgbouncer,但是使用PGbouncer也会引入一些使用上的不便利,比如transaction模式不能使用绑定变量等。在以下文章中做过...

[转载] 面试必备:什么是一致性Hash算法?

less than 1 minute read

背景 原文 https://blog.csdn.net/bntX2jSQfEHy7/article/details/79549368 正文 最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件...

[转载] 什么是一致性哈希算法

2 minute read

背景 原文 https://mp.weixin.qq.com/s/bCH-aU8cKS3uT6PwRYNJtA 正文 1,对于待存储的海量数据,如何将它们分配到各个机器中去?—数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的...

PostgreSQL 11 preview - pgbench 压测软件增强

8 minute read

背景 PostgreSQL 11 pgbench压测软件增强。 详细用法参考, pgbench非常强大,且性能非常好。 https://www.postgresql.org/docs/devel/static/pgbench.html 使用pgbench实施的一些压测场景 《HTAP数据库 Postgre...

PostgreSQL 11 preview - pg_resetwal 在线修改 WAL segment size

2 minute read

背景 PostgreSQL 11 允许用户在线修改WAL segment size。默认为16MB, 以往的版本,我们必须重新编译PG,并且不同–wal-segsize设置的postgresql软件相互不兼容。 Allow pg_resetwal to change the WAL segment size v...

PostgreSQL 11 preview - TOAST切片阈值表级可配置

1 minute read

背景 还记得我在13年的时候写过几篇关于变长字段优化的CASE,如果变长字段不怎么被更新,建议放到TOAST存储,因为放TOAST后,TUPLE中就只存指向TOAST的指针了。 [《PostgreSQL large row column performance tuni...

PostgreSQL 11 preview - 索引 增强 汇总

1 minute read

背景 PostgreSQL 11 索引特性的增强。 E.1.3.1.3. Indexes Allow indexes to INCLUDE columns that are not part of the unique constraint but are available for index...

PostgreSQL 11 preview - 分区表 增强 汇总

1 minute read

背景 PostgreSQL 11 分区表有非常多的增强特性。 E.1.3.1.1. Partitioning Allow faster partition elimination during query processing (Amit Langote, David Rowley, Dili...

PostgreSQL Oracle兼容性之 - text - text隐式转换

1 minute read

背景 Oracle的两个文本详见,会自动转换为数值进行相减操作。 PostgreSQL默认并不会将文本转换为数值进行相减操作。 为了实现兼容,有两种方法: 1、创建text到numeric的隐式转换 2、创建text-text的操作符。 PostgreSQL 内置CAST 可以看到varchar是有隐...

PostgreSQL Oracle兼容性之 - ‘’ 空字符

less than 1 minute read

背景 Oracle 对’‘有一些特殊的处理,默认会转成NULL。使得’‘可以适合任意的数据类型。 然而对于PostgreSQL来说,没有做这层转换,所以’‘并不能输入给任意类型。 Oracle SQL> create table a(id int, c1 varchar2(10) default ''...

PostgreSQL HooK 介绍

3 minute read

背景 PostgreSQL 的HOOK机制,结合PostgreSQL的_PG_init与_PG_fini两个初始化函数(加载SO时自动load _PG_init(), 退出会话时自动加载_PG_fini()),使得用户可以在不修改源码的情况下,使用HOOK来实现一些数据库的功能扩展。 比如实现改写SQL执行计划...

PostgreSQL 服务端COPY和客户端COPY - 暨PG有哪些服务端操作接口

2 minute read

背景 有些朋友在使用COPY命令对数据库进行数据导入导出时,可能会发现COPY到文件时,怎么和想象的不一样,COPY到文件并没有落到指定的地方。实际上原因是COPY命令是服务端命令,COPY到某个文件实际上是COPY到数据库所在的服务器上面了,而不是客户端所在的服务器。

PostgreSQL pgbench 支持100万连接

less than 1 minute read

背景 《阿里云 RDS PostgreSQL 高并发特性 vs 社区版本 (1.6万并发: 3倍吞吐,240倍响应速度)》 最近测试的阿里云高并发版本的性能,在1.6万个连接下,实际SQL的响应速度是社区版本的240倍。但是很多网友问怎么测的1.6万个连接,因为pgbench默认只能连1000个连接。 超过1...

PostgreSQL Failover slot - 支持将slot信息发送给物理备库

2 minute read

背景 PostgreSQL主库创建的slot(物理或逻辑的都算),在备库是否存在? 目前的版本,PG在主库创建的SLOT,备库是没有的(不会通过流复制协议复制到备库) (但是,2ND提出的failover slot,就是来解决这个问题的,在主库创建的slot,会通过流复制协议,发送给物理备库。) 测试 主...

从代码层判断 pg_basebackup 是否已正常结束 - 暨改进建议

1 minute read

背景 用户通常会使用pg_basebackup来对PostgreSQL实施在线备份,对于超级大的数据库实例,可能需要备份很久。 如果将任务分解来看,假设备份是任务流中的一个步骤,如果设置了超时时间,那么在超时导致该步骤失败之后,如何判断pg_basebackup是否已执行成功? 1、从pg_basebacku...

PostgreSQL, SQL Server 逻辑增量 (通过逻辑标记update,delete) 同步到 Greenplum, PostgreSQL

8 minute read

背景 异构数据的增量同步是比较繁琐的事情,需要考虑很多事情,比如: 1、同步延迟 2、DDL的同步 3、同步时对上游性能的影响 4、上下游数据一致性 5、上游事务原子性在目标端是否能保证原子性 6、上下游数据类型兼容性 7、上下游字符集一致性 8、同步时对下游性能的影响 9、可以同步哪些操作(I...

PostgreSQL Oracle 兼容性 - Analysis函数之keep

4 minute read

背景 Oracle 分析函数KEEP,类似OVER的语法结构(当然,含义与之不同)。keep可以用于普通的查询,也可以用于分组聚合,同时亦可用于窗口中。 SELECT deptno, MIN(t.mgr) KEEP (DENSE_RANK FIRST ORDER BY t.sal) a from emp ...

PostgreSQL copy (quote,DELIMITER,…) single byte char 的输入

less than 1 minute read

背景 PostgreSQL 可以通过COPY批量导入或导出数据,如果是文件操作是在数据库的SERVER端操作,如果是STDIN, STDOUT则是通过协议透传到客户端。 Command: COPY Description: copy data between a file and a table ...

Greenplum Oracle 兼容性之 - LOG ERRORS INTO

5 minute read

背景 Oracle支持DML的log errors,是一个很赞的功能。 https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_errlog.htm#CEGEJAAJ https://oracle-base.com/articles/10g/dml-e...

PostgreSQL 自动创建分区实践 - 写入触发器

3 minute read

背景 数据写入时,自动创建分区。 目前pg_pathman这个分区插件,有这个功能,如果你不是用的这个插件,可以考虑一下用触发器写入,并在触发器中实现自动创建分区。 《PostgreSQL 9.6 sharding based on FDW & pg_pathman》 《PostgreSQL 9.5...

阿里云 RDS PostgreSQL 高并发特性 vs 社区版本 (1.6万并发: 3倍吞吐,240倍响应速度)

8 minute read

背景 进程模型数据库,需要为每个会话指派独立的进程与之服务,在连接数非常多,且大都是活跃连接时,进程调度浪费或引入的开销甚至远远大于实际任务需要的开销(例如上下文切换,MEMCPY等),性能下降会较为严重。 PostgreSQL与Oracle Dedicate Server一样,属于进程模型。在非常高并发的...

Become a PostgreSQL DBA

less than 1 minute read

背景 一系列PostgreSQL DBA喜爱的BLOG https://severalnines.com/blog?series=690 digoal’s 大量PostgreSQL文章入口

ETL for Oracle to PostgreSQL 3 - DATAX

less than 1 minute read

背景 Datax是阿里巴巴开源的一款ETL工具,在云端可以作为服务直接使用,同时用户也可以下载开源代码自行部署。 1 开源Datax http://gitlab.alibaba-inc.com/datax/datax/wikis/quick_start 配置源端数据源 Oracle reader http:/...

[未完待续] PostgreSQL 道德经 智慧 - 57

less than 1 minute read

背景 道德经篇 57、以正治国,以奇用兵,以无事取天下。吾何以知其然哉?以此。天下多忌讳而民弥贫。民多利器国家滋昏。人多伎巧奇物泫起。法令滋彰盗贼多有。故圣人云我无为而民自化。我好静而民自正。我无事而民自富。我无欲而民自朴。 PostgreSQL 道德经智慧 发掘 开放的接口,共建生态,用户可以在Postgr...

[未完待续] PostgreSQL 道德经 智慧 - 3

less than 1 minute read

背景 道德经篇 03.不尚贤, 使民不争。不贵难得之货,使民不为盗。不见可欲,使民心不乱。是以圣人之治,虚其心,实其腹,弱其志,强其骨;常使民无知、无欲,使夫智者不敢为也。为无为,则无不治。 22.曲则全,枉则直,洼则盈,敝则新少则得,多则惑。是以圣人抱一为天下式。不自见故明;不自是故彰;不自伐故有功;不自矜...

PostgreSQL 批量导入性能 (采用dblink 异步调用)

13 minute read

背景 批量导入数据,怎样能挖掘出系统的比较极限的潜能? 瓶颈通常在哪里? 1、WAL lock 2、INDEX lock 3、EXTEND LOCK 4、autovacuum 干扰 因此最好的方法就是排除以上问题,例如 1、使用多表,解决单表EXTEND LOCK问题 2、使用unlogged t...

PostgreSQL 改元信息 invalid index

2 minute read

背景 某些时候,可能想避免一些索引的影响,特意让优化器不选择使用某些索引。 通常的做法可能有: 1、HINT 《关键时刻HINT出彩 - PG优化器的参数优化、执行计划固化CASE》 《PostgreSQL SQL HINT的使用(pg_hint_plan)》 2、设置开关,(注意它不能只影响某一个索引...

Oracle DBA 增值 PostgreSQL,Greenplum 学习计划 - 珍藏级

3 minute read

背景 去O很大程度上是国家层面的战略考虑,比如斯诺登事件,最近贸易战的“中兴”事件,使得去O成为一个不可不做的事情。 但是去O喊了若干年,并没有真正意义上成为轻松愉快的全民运动,比较大的原因可能是 1、去O的成本 2、去O后的责任方 3、利益 随着云计算的兴起,第2,3点应该可以得到很好的解决(有问题找...

Greenplum 海量数据,大宽表 行存 VS 列存

8 minute read

背景 GPDB支持行存列存,而且相关的选择原理我们之前的文章也有很详细的分析,同时在性能方面也做过较多的评测对比。 但是在大宽表上,相差到底有多悬殊我们之前没有对其进行过对比。主要的差异来自deform和QUERY扫描的存储空间(理论上,数据量越大,同时访问的列越少,列存的优势越明显。或者是访问到的列越靠后,优...

[转载] Oracle record、varray、table和%type、%rowtype的使用详解

1 minute read

背景 原文 http://www.ibloger.net/article/230.html 1 说明 1.1 RECORD 定义记录数据类型。它类似于c语言中的结构数据类型(structure),pl/sql提供了将几个相关的、分离的、基本数据类型的变量组成一个整体的方法,即record复合数据类型。在使用...

Oracle migration to Greenplum - (含 Ora2pg)

4 minute read

背景 Oracle在OLTP领域毫无疑问是非常不错的数据库,但是OLAP领域,可以有更好的选择,特别是在数据量大到一定程度的时候,Oracle用来做数据分析会显得有点力不从心。 Greenplum是一个很好的替代Oracle来处理OLAP业务场景的数据库,支持多机并行、列存储、丰富的OLAP SQL语法,存储过...

PostgreSQL 实践 - 实时广告位推荐 1 (任意字段组合、任意维度组合搜索、输出TOP-K)

14 minute read

背景 店铺,广告推荐位,自动计算,高效检索,高效更新。 根据:本店、全网用户行为,库存等进行运算,得到每个商品的分值,推荐排行靠前的商品。 维度可能很多,例如:北京的男性用户在秋天买袜子的可能性是0.431,这里面就是4个维度。实际场景维度可能有几十个,几百个,甚至几千个。 需要支持任意维度,排序,求TOP...

PostgreSQL 分区表的逻辑复制(逻辑订阅)

less than 1 minute read

背景 PostgreSQL 10 引入了内置分区语法,同时引入了逻辑订阅的功能。 《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》 逻辑订阅简单来说就是 1、创建pub, 2、将需要订阅的表加入到pub中, 3、在接收端创建订阅sub,指定订阅哪个pub。 4、然后发布...

PostgreSQL Oracle 兼容性之 - round interval

less than 1 minute read

背景 Oracle 可以将interval当成一个秒为单位的数值,并允许对其值进行round。 PostgreSQL的round没有写这个,不过我们可以自定义一个兼容函数。 create or replace function round(interval, int) returns float8 as $$...

PostgreSQL bit运算CASE - 最近7天消费金额大于N的用户bits

less than 1 minute read

背景 有一个这样的数据结构 日期, 消费金额,userbitmaps。表示这一天这些设置为1的BIT位对应对用户消费了这么多金额。 需求,最近7天,消费大于多少的用户有哪些。 create table t_test ( dt date, -- 日期 amount int, -...

PostgreSQL 滴滴派单 高峰区域集中打车冲突优化1 - 宇宙大爆炸理论与PostgreSQL实践

2 minute read

背景 在打车高峰时期,通常会出现某个区域打车的人特别多的情况,比如在下班时,写字楼。比如在演唱会结束时,演唱会现场。 这个场景有一个特点,同一个点发出请求,按距离搜索最近的车,然后锁定车辆。 在数据库中,如果大家都这么操作,会带来锁冲突的问题。我在上一篇文档中,介绍了adlock,可以大幅提高吞吐,但是还有一...

PostgreSQL PostGIS so 预加载(preload) 性能提升 - 暨什么动态库建议预加载

1 minute read

背景 PostgreSQL是一个可扩展的数据库,如果你的扩展是C扩展,代码在动态库中。那么在使用时需要加载这个动态库来实现一些功能例如创建类型,创建函数,创建操作符等。 PostgreSQL允许多种加载动态库的方法,例如数据库启动时加载,会话连接(启动backend_process)时加载,或者在会话中调用到对...

滴滴打车派单系统思考 数据库设计与实现 - 每月投入6140元, 1天最多可盈利117亿 -_-!

14 minute read

背景 打车类应用,如果完全按调度系统来派单,而非抢单的话,调度系统要非常的健硕。 比如滴滴打车,如何处理供给双方的需求,并高效的完成派单呢? 随着业务的需求增多,调度规则也会增加,比如拼车,预约,等。 下面是一个简单的派单系统的思考,如何使用PostgreSQL与空间数据库插件PostGIS来实现一个简单的...

PostgreSQL 大表扫描策略 - BAS_BULKREAD , synchronize_seqscans

4 minute read

背景 数据库BUFFER是一个对物理IO对冲非常有效的组件,所以BUFFER的稳态对IO波动影响很大。 在一些操作时,可能会导致一些IO的波动,比如刷脏页,检查点。但是PostgreSQL在这方面都有很好的调度策略,避免IO的波动。具体见PG文档的介绍,或如下 《PostgreSQL 9.6 平滑fsync,...

[未完待续] pgloader - mysql , sqlserver 迁移到 PostgreSQL - (含DDL自动迁移)

less than 1 minute read

背景 pgloader是一款开源的迁移软件,命令行操作。 支持从文本、mysql, sqlite, sqlserver迁移到PostgreSQL. 包含DDL的自动迁移。 同时在数据写入PG的过程中,支持COPY协议写入(支持记录错误行),支持并行创建索引。 功能以及导入效率都是很赞的。 https://...

PostgreSQL 从文件时间戳获悉一些信息(如数据库创建时间)

1 minute read

背景 PG的一些元数据没有时间字段,例如对象的创建时间、DDL的修改时间。 如果要获得这个时间信息,我们可以 1、通过事件触发器,将DDL事件记录到某个元数据表中,来获得。 2、或者打开DDL审计日志,从审计日志中获得。 3、与事件触发器类似,不过是通过PG的HOOK来实现的,在执行DDL时,通过代码中对...

PostgreSQL Freeze 风暴预测续 - 珍藏级SQL

12 minute read

背景 PostgreSQL 目前默认的存储引擎,事务可见性需要依赖行头的事务号,因为事务号是32位的,会循环使用。 在一条记录产生后,如果再次经历了20亿个事务,必须对其进行freeze,否则数据库会认为这条记录是未来事务产生的(可见性判断)。 因此FREEZE操作是数据库在32位事务号的情况下,经常要做的。...

PostgreSQL Oracle 兼容性之 - create type

2 minute read

背景 Oracle 自定义类型与PostgreSQL自定义类型的兼容性。 虽然两者用法上有一定的不同,但是PostgreSQL功能上完全覆盖到了Oracle的自定义类型。 下面从几个方面描述PostgreSQL Oracle create type的兼容性。 1、创建自定义类型 2、创建自定义类型的构造器...

PostgreSQL 单库对象过多,触发Linux系统限制(inode满或inode index满) (ext4_dx_add_entry: Directory index full!) (could not create file xx/xx/xxxxxx: No space left on device)

5 minute read

背景 PostgreSQL 里面创建的表,序列,索引,物化视图等带有存储的对象,每个对象的数据文件都是独立的,较依赖文件系统的管理能力。并不像Oracle那样把对象放到表空间中管理,表空间又由若干的数据文件组成。(ASM的话则接管更多的操作。) 所以,当创建了很多个有实际存储的对象时,文件数就会很多: 通常一...

PostgreSQL 变态并行拉取单表的方法 - 按块并行(按行号(ctid)并行) + dblink 异步调用

2 minute read

背景 数据同步是一个较为常见的需求,为了提高性能,并行是一个非常简单暴力的手段。但是通常只能做到不同的对象之间并行,对于单个对象,比如单表,能否并行呢? 有一种方法是使用HASH并行,例如按某个或某几个字段,按hash值取模,切分为多组数据,每个进程读取一部分,并行将单表取出。但是这种方法有一个弊端,会导致重复...

PostgreSQL Oracle 兼容性之 - 字符串分割

1 minute read

背景 Oracle中字符串分割,比较麻烦,可能需要写PL/SQL来实现。 create or replace TYPE "STRINGS_TABLE" is table of varchar2(2000) create or replace FUNCTION highsoft_split( p...

PostgreSQL Linux 下 僵尸状态的处理

4 minute read

背景 在某些非常特殊的情况下,可能遇到数据库无法停库,也无法连接(几乎处于不可用状态)的情况。即使使用-m immediate这样的暴力停库都无法停下来。 例如,当数据库的某些用户进程进入了defunct状态时。 2951 20411 37111 0 14:28 ? 00:00:00 ...

PostgreSQL 11 preview - bloom filter 误报率评估测试及如何降低误报 - 暨bloom filter应用于HEAP与INDEX的一致性检测

15 minute read

背景 bloom filter是一个空间压缩,概率数据结构,可以存储超容量的数据集,用于判断某个元素是否存在于数据集中。但是bloom filter存在一定的错误率(当判断存在时,可能不存在,因为这个元素的bits可能被set了。但是当判断发现元素不存在时就一定不存在。) 例如A元素对应1,19,200,21等...

PostgreSQL 家谱、族谱类应用实践 - 图式关系存储与搜索

9 minute read

背景 最近《最强大脑》节目的国际PK赛中,来自谷歌的一位国际选手展示了他在谷歌时做的一套系统,把三国人物关系整理并展示成了一张大图,属于非常典型的图式应用。 PostgreSQL非常适合于这类场景,有着丰富的SQL接口和良好的性能。下面这些都是PG在图式搜索方面的应用: 《小微贷款、天使投资(风控助手)业...

PostgreSQL 11 preview - Logical replication support for TRUNCATE

2 minute read

背景 PostgreSQL 11 逻辑订阅支持insert, update, delete, truncate。 后期可能还会增加对DDL的支持,目前的DDL(包括对已有订阅表的结构修改,新增,删除表等操作)通过如下方法来支持: 《PostgreSQL 逻辑订阅 - DDL 订阅 实现方法》

PostgreSQL 11 preview - Allow on-line enabling and disabling of data checksums (含pg_verify_checksums工具,离线检查数据文件有误块错误)

2 minute read

背景 PostgreSQL的数据文件是以数据块组织的,由于数据块可能比文件系统的原子写更大,所以在某些情况下可能出现partial write(例如断点或者块设备异常),出现数据块数据损坏(不一致)的情况。为了满足可靠性要求,PG在设计之初已经考虑到这点,所以有了WAL的FULL PAGE WRITE,以及WAL...

PostgreSQL 11 preview - Faster partition pruning

less than 1 minute read

背景 目前PG社区版本内置分区表的性能受制于一些BIND、LOCK所有子表等问题,当分区过多时,性能会受到极大的影响。 《分区表锁粒度差异 - pg_pathman VS native partition table》 《PostgreSQL 查询涉及分区表过多导致的性能问题 - 性能诊断与优化(大量BIND...

PostgreSQL 递归妙用案例 - 分组数据去重与打散

22 minute read

背景 我们现在业务场景,有对筛选结果进行去重和打散的需求,比如每个品牌的商品只能出现不超过10个。 目前我们是在业务层进行处理的,效率比较低。 PGSql有没有更好的方式来支持对结果的去重和打散呢? PostgreSQL SQL功能强大,有很多种方法可以实现这类业务需求的高效检索。比如 1、递归 2、窗...

PostgreSQL 11 preview - with_llvm JIT支持部署与试用

43 minute read

背景 PostgreSQL 11 JIT,目前支持tuple deform(将磁盘上的tuple转换为内存中TUPLE格式),以及表达式(select, where, 等语义中的表达式,操作符运算,UDF等)的动态编译。 对海量数据的计算(并且表达式或TUPLE DEFORM已成为瓶颈时)有加速效果。 特别适...

PostgreSQL 任意列组合条件 行数估算 实践 - 采样估算

4 minute read

背景 在任意维度查询(ADHoc)的场景中,有诸多技术手段来保证查询的性能,比如rum索引,GIN倒排索引,BLOOM FILTER索引。又比如多个索引的bitmap 合并scan。 例子: 《PostgreSQL ADHoc(任意字段组合)查询 与 字典化 (rum索引加速) - 实践与方案1》 《用Po...

insert on conflict - 合并写 (消除不必要更新)

1 minute read

背景 合并更新的应用非常广泛,存在则更新,不存在则写入。 但是在某些场景中,存在并不一定要更新,原因是新的内容可能和老的内容完全一致。这种更新操作是完全没有必要的。 因为PG是多版本的,更新会产生新的TUPLE版本,如果这种没必要的更新很多,只会给数据库带来额外的负担同时影响性能。特别体现在批量操作中。 例...

[转载] 磁盘硬件问题(坏块)检测

1 minute read

背景 Linux下面可以使用smartctl , badblocks检查是否有坏块。 Win下面可以使用HD Tune。 1 smartmontools apt install smartmontools https://www.aliyun.com/jiaocheng/120499.html s...

PostgreSQL 相似文本检索与去重 - (银屑病怎么治?银屑病怎么治疗?银屑病怎么治疗好?银屑病怎么能治疗好?)

6 minute read

背景 在云栖社区的问答区,有一位网友提到有一个问题: 表里相似数据太多,想删除相似度高的数据,有什么办法能实现吗? 例如: 银屑病怎么治? 银屑病怎么治疗? 银屑病怎么治疗好? 银屑病怎么能治疗好? 等等 解这个问题的思路 1. 首先如何判断内容的相似度,PostgreSQL中提...

Greenplum 计算能力估算 - 暨多大表需要分区,单个分区多大适宜

8 minute read

背景 在数据仓库业务中,单表的数据量通常是非常巨大的。Greenplum在这方面做了很多的优化 1、支持列存储 2、支持向量计算 3、支持分区表 4、支持btree, bitmap, gist索引接口 5、执行并行计算 6、支持HASH JOIN 等 提高数据筛选的效率是一个较为低廉有效的优化手...

PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级

34 minute read

背景 PostgreSQL物理流复制有几个特点 1、延迟及低,毫不畏惧大事务 2、支持断点续传 3、支持多副本 4、配置简单,看本文 5、备库与主库物理完全一致,并支持只读 所以大多数用户都会使用流复制来搭建只读备库,容灾,备份节点,HA等。 本文主要介绍一下PostgreSQL一主多从的配置,以及...

PostgreSQL 11 preview - 强制auto prepared statment开关(自动化plan cache)(类似Oracle cursor_sharing force)

2 minute read

背景 通常一个QUERY在执行时分为几个步骤,语义解析、SQL REWRITE、生成所有可选执行路径、选择最优路径、执行等多个步骤。 对于同一类SQL,只是更换SQL中的一些FILTER变量时,实际上很多步骤是可以共享的。例如语义解析、SQL REWRITE、生成执行计划都是可共享的,这些步骤通常比较耗CPU资...

PostgreSQL 11 preview - pg_stat_statements 增强,支持执行计划翻转记录

less than 1 minute read

背景 pg_stat_statements是PG的一个用于收集SQL统计信息的插件,可以帮助我们分析TOP SQL。 《PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)》 另一方面,我们可能也想知道SQL曾经执行时是否出现过较差的执行计划,使用较差的执行计划执行了多少次等信息。 通...

PostgreSQL 11 preview - pgbench 支持大于1000链接(ppoll()代替select())

less than 1 minute read

背景 目前pgbench最大可以测试1000个连接,显然在某些时候是不够的,我们可能需要建立更多的连接进行测试。 $ pgbench -j 3000 -c 1500 invalid number of clients: "1500" 使用这里提到的方法修改一下pgbench,让它能够建立100万个连...

PostgreSQL Huge Page 使用建议 - 大内存主机、实例注意

6 minute read

背景 当内存很大时,除了刷脏页的调度可能需要优化,还有一方面是虚拟内存与物理内存映射表相关的部分需要优化。 1 脏页调度优化 1、主要包括,调整后台进程刷脏页的阈值、唤醒间隔、以及老化阈值。(脏页大于多少时开始刷、多久探测一次有多少脏页、刷时多老的脏页刷出。)。 vm.dirty_background_by...

[转载] Linux进程状态解析之R、S、D、T、Z、X

1 minute read

背景 原文 https://wenku.baidu.com/view/8a932511866fb84ae45c8de8.html 正文 Linux进程状态解析之R、S、D、T、Z、XLinux进程状态解析之R、S、D、T、Z、X。 Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会...

PostgreSQL 11 preview - BRIN索引接口功能扩展(BLOOM FILTER、min max分段)

3 minute read

背景 BRIN索引是PG的一种块索引接口,存储指定连续数据块内被索引字段的元数据。 https://www.postgresql.org/docs/devel/static/brin.html 目前BRIN存储的元数据包括被索引字段在每个指定连续数据块区间的MIN,MAX值。所以对于比较分散的数据实际上效果是...

PostgreSQL 11 preview - Incremental Sort(排序优化)

less than 1 minute read

背景 当我们需要对数据进行排序时,通常加速的方法是建索引,走索引就快了对吧。 PostgreSQL排序的能力还是很强大的: 《PostgreSQL 11 preview - 并行排序、并行索引 (性能线性暴增) 单实例100亿TOP-K仅40秒》 通常情况下,如果要让排序用上索引,那么索引必须与排序字段一致...

PostgreSQL 11 preview - JIT接口放开

1 minute read

背景 LLVM对大量数据运算(比如说where条件中过滤大量的数据,聚合计算大量的数据等)的效率提升非常的明显。 原理参考 《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》 PostgreSQL 11的JIT接口正在进行打磨,完善。借助L...

我和大象 - 感恩、感谢、加油、腾飞

less than 1 minute read

背景 http://www.idcquan.com/Special/OSCAR2018/index.html 由中国信息通信研究院主办、中国通信标准化协会支持的”OSCAR云计算开源产业大会”于2018年3月21日-22日在国家会议中心举行。 非常有幸获得了“OSCAR尖峰开源人物”奖项。 奖项不敢自居...

PostgreSQL 11 preview - 多阶段并行聚合array_agg, string_agg

3 minute read

背景 并行聚合原理请参考: 《PostgreSQL 10 自定义并行计算聚合函数的原理与实践 - (含array_agg合并多个数组为单个一元数组的例子)》 实际上PostgreSQL支持并行计算后,聚合就分为多阶段聚合与原始的一阶段聚合两种玩法。 多阶段聚合会将聚合任务分配给所有的WORKER执行,然后再...

PostgreSQL 11 preview - 虚拟列(自动根据表达式产生值)

2 minute read

背景 通过增加虚拟字段,可以让数据库根据虚拟列的定义,自动填充值。 与自增,DEFAULT不同的是,虚拟列中可以从其他列的内容产生。 例如 CREATE TABLE t1 ( ..., height_cm numeric, height_in numeric GENE...

PostgreSQL 11 preview - 分页内核层优化 - 索引扫描offset优化(使用vm文件skip heap scan)

4 minute read

背景 OFFSE limit是分页常用的功能。很多人可能有过这样的感受,分页越到后面越慢。 实际上原因是由于数据库在OFFSET指定记录数之前,是需要扫过这么多的符合条件的TUPLE才能知道应该从哪里开始返回。 比如 1、索引扫描时,并不知道一个索引页有多少条有效记录(因为索引中没有版本号,需要回表才知道这...

PostgreSQL 11 preview - 索引优化。filter智能消除、分区索引智能合并

5 minute read

背景 当数据量较大时,对数据分区是一种比较不错的数据管理手段。 每个分区都有对应的边界定义,在PostgreSQL中我们可以把它理解为分区的constraint。 目前PostgreSQL在优化器的细节方面进行打磨,constraint可以被优化器利用来做一些优化的工作。 1、例如: 每个班级一个分区,你...

PostgreSQL 生成任意基数数独 - 4

1 minute read

背景 使用《PostgreSQL 生成任意基数数独 - 3》 提供的方法,可以生成有解数独。在不知道数独答案的情况下,如何暴力破解呢? 实际上可以修改一下《PostgreSQL 生成任意基数数独 - 2》 里面的随机生成数独的函数,破解数独。 破解数独函数如下 create or replace funct...

PostgreSQL 生成任意基数数独 - 3

4 minute read

背景 使用随机填充的方法,很难生成一个有解的数独。 《PostgreSQL 生成任意基数数独 - 2》 本文使用了《编程之美》中提到的另一种生成随机数独的方法,模板+映射法。 首先要生成一个模板,然后根据这个模板,我们可以旋转、正反换面,一共生成8个模板。 模板生成好之后,把1-9的数字映射进...

PostgreSQL 生成任意基数数独 - 2

2 minute read

背景 《PostgreSQL 生成任意基数数独 - 1》 提供了一种方法,计算一个未完成的数独矩阵每个像素在XYB方向上还有多少个未填充的像素。 通过XYB的值,进行各种排序,选出下一个要填充的像素,进行随机填充。 可以通过调整规则,实现不同的填充位置选择,从而达到生成可解数独的目的。 创建一个生成以N为...

[未完待续] PostgreSQL NP完全问题求近似解 例子, 最低成本集合

less than 1 minute read

背景 1、如何用最少的商家覆盖最多的用户(用户最终要求去重)? 比如总共有1亿用户,有100万家店铺,每个店铺有对应的用户群体。如何选择最少的商家,得到最大的用户群体。 2、如何用最少的商家覆盖最大的消费能力群体(消费者最终要求去重)? 3、如何圈定最少的明星,获得最多的粉丝(粉丝集计算最终要求去重)? ...

PostgreSQL 数据库多列复合索引的字段顺序选择原理

13 minute read

背景 当需要创建多列复合索引时,应该使用什么样的顺序呢? 多列复合索引的组织结构与单列字段索引结构类似,只是需要按索引内表达式指定的顺序编排。 《深入浅出PostgreSQL B-Tree索引结构》 例如 create index idx on tbl using btree (udf(c1) desc,...

PostgreSQL 那些使用临时文件的操作与跟踪

9 minute read

背景 在数据库中的一些操作,可能会用到临时文件,比如排序,HASH JOIN,中间结果存储,聚合等等。 为了提高数据库的执行效率,一些操作可能会使用内存代替临时存储,仅仅当内存不足时使用临时文件。 通过work_mem可以设置会话Query使用的临时内存的阈值,当然一个Query中如果使用了大量并行的排序等操...

[未完待续] PostgreSQL Oracle 兼容性之 - sys.anydata

1 minute read

背景 Oracle里面有一个类型sys.anydata,它可以存任意类型。 这个有点是一个协议的里面包了一层协议。或者说是一个容器,在这个容器里存了任意其他类型。 它有什么好处?实际上数据库是强类型的应用,而且通常也是这么来应用的,一般一个列定义一种类型。 然而sys.anydata允许你存任意类型。 t...

[转载] [嵌入式开发]Linux性能分析——上下文切换

2 minute read

背景 原文 http://www.cnblogs.com/pheye/p/4830058.html 一、从一个问题说起 相信很多人在玩手机还是PC时,都曾碰到过这样一种情况,安装的软件多了系统性能就变慢了,但是去查看CPU利用率一直都低于10%,内存也很充足。我在近期的开发工作中就碰到了类似的情况,不同的是,...

PostgreSQL rotate table 自动清理调度 - 约束,触发器

1 minute read

背景 时序场景,这个需求很常见: 1、自动清理过期的历史数据,并且要保证清理速度够快,不产生WAL日志。 要么DROP,要么truncate。 2、我们知道PG支持分区表,如果是通过分区的方法来实现,最好不过了,但是需要不停的创建分区,这个目前pg_pathman能够满足自动创建分区。但是自动删除分区还是不...

PostgreSQL checkpoint 相关参数优化设置与解释

1 minute read

背景 数据库的检查点相关参数如何配置,能让数据库运行更加顺滑? 内存、磁盘能力如何搭配,能发挥更好的性能? OS的参数如何设置,能尽可能的降低大内存机器带来的IO风暴问题? 数据库检查点设置 假设服务器内存是512GB。磁盘顺序、随机写吞吐是2 GB/s。 1、经验值 shared_buffers = ...

PostgreSQL 垃圾版本引入的索引扫描性能下降诊断

3 minute read

背景 首先介绍几个背景知识,由于这些背景知识的存在,所以在某些情况下索引扫描的性能可能会出现一些问题或抖动。 导致性能下降,CPU开销增加,应用程序访问产生更多的连接等连锁反应。 1、当记录被删除,更新时,PostgreSQL目前的存储引擎会在原HEAP PAGE中保留老的记录版本,如果是UPDATE会写入一...

PostgreSQL 全文检索 - 词频统计

3 minute read

背景 TF(Term Frequency 词频)/IDF(Inverse Document Frequency 逆向文本频率)是文本分析中常见的术语。 《PostgreSQL结合余弦、线性相关算法 在文本、图片、数组相似 等领域的应用 - 1 文本(关键词)分析理论基础 - TF(Term Frequency ...

PostgreSQL 多查询条件,多个索引的选择算法与问题诊断方法

3 minute read

背景 当一个SQL中涉及多个条件,并且多个条件有多种索引可选时,数据库优化器是如何选择使用哪个索引的? 例如 有一张表,有2个字段,单列一个索引,双列一个复合索引. 建表。 postgres=# create table tbl(id int, gid int); CREATE TABLE ...

阿里云 RDS PostgreSQL 隐藏开关 - hash to btree, unlogged to logged

less than 1 minute read

背景 为了保护用户数据的可靠性,阿里云RDS PostgreSQL做了一些保护机制。 1、例如PostgreSQL 10版本以前, HASH索引是不写WAL日志的,所以如果你使用了hash index,当数据库崩溃后,HASH INDEX是dirty的,走HASH INDEX SCAN可能导致数据不一致。 又...

PostgreSQL Oracle 兼容性之 - 消息队列 DBMS_AQ

less than 1 minute read

背景 数据库支持消息队列的功能,利用消息队列可以实现异步广播,结合流计算实现异常数据推送等。 Oracle中,通过dbms_aq这个包支持消息队列。在PPAS中,有对应的包,兼容Oracle。 在PostgreSQL中,使用listen, notify同样能够支持消息队列的功能。在对应的驱动中有相应的介绍。包...

PostgreSQL 多值类型(如数组),元素值全局唯一 - 约束如何实现

4 minute read

背景 《PostgreSQL 11 preview - 支持 数组外键约束》 在PostgreSQL中,应用可以非常方便使用多值类型,比如数组、全文检索、范围类型等。 对于多值类型的操作也越来越方便,比如查询相交、包含可以使用索引,更新、替换、APPEND的操作也都有对应的UDF和OP来支撑。 可能应用会有...

PostgreSQL 类微博FEED系统 - 设计与性能指标

3 minute read

背景 类微博系统,最频繁用到的功能: A,D,E用户关注B用户。 B用户推送消息。 A,D,E用户接收消息。 A,D,E用户消费消息。涉及消费排序算法。 之前写过一篇《三体高可用PCC大赛 - facebook\微博 like场景 - 数据库设计与性能压测》 LIKE相关...

PostgreSQL 社交类好友关系系统实践 - 正反向关系查询加速

3 minute read

背景 关系系统在很多设计类应用中非常常见,例如查询你有哪些好友,你是哪些人的好友。 又比如我LIKE了哪些人,哪些人LIKE了我。 比如在之前的”PCC大赛 - facebook\微博 like场景”,也是类似的场景。 《三体高可用PCC大赛 - facebook\微博 like场景 - 数据库设计与性能压...

PostgreSQL 通过分割heap数据文件分拆表的hacking方法

2 minute read

背景 为什么要将一张大表拆成若干张小表?前面的文档给出了原因 《PostgreSQL 并行vacuum patch - 暨为什么需要并行vacuum或分区表》 《HTAP数据库 PostgreSQL 场景与性能测试之 45 - (OLTP) 数据量与性能的线性关系(10亿+无衰减), 暨单表多大需要分区》 ...

PostgreSQL ADHoc(任意字段组合)查询 与 字典化 (rum索引加速) - 实践与方案1

8 minute read

背景 业务背景 某系统数据量: 20亿行左右,64个字段,原始数据多为字符串类型。(大多数字段的唯一值有限) 需求: 1. 查询,任意字段组合查询,求聚合值。 2. 查询并发,1000左右查询并发,每次查询响应时间要求100ms以内。 3. 写入、更新,要求延迟1秒内。 高峰时写入、更新可达20万行/...

PostgreSQL 全局ID分配(数据字典化)服务 设计实践

5 minute read

背景 设计一个全局ID分配服务,要求: 功能性要求 1. 输入字符串 返回 ID i. 已经存在系统中的字符串返回原ID 【严格要求】 ii. 新字符串分配新ID 递增分配 2. 输入ID 返回字符串 3. 每个Topic一个ID序列 4. Topic可以动态增删 5. 支持hsf调...

PostgreSQL 覆盖 Oracle 18c 重大新特性

8 minute read

背景 Oracle 18c 发布了诸多新特性,其中大部分Oracle 18c的重大特性,在早期版本的PostgreSQL数据库已支持。 如下 一、开发特性 1 图式搜索 Oracle 18c SQL-Based Property Graph Query and Analytics https://do...

PostgreSQL raster(栅格数据) st_value 优化举例

less than 1 minute read

背景 栅格数据是由点阵组成的图像化数据,点阵具备空间属性(边界)。点阵由像素组成,所以每个像素也具备空间属性,同时每个像素内填充数值,数值可以代表温度、灰度、颜色系数、属性、湿度等等。 每个栅格中可以有多个波段,每个波段可以代表一个图层,多个波段可以组合叠加计算。 使用栅格数据,可以实现具...

PostgreSQL 11 preview - 支持 数组外键约束

6 minute read

背景 通常,数据库的外键约束是一种一行对一行的约束,然而,在某些场景中,可能要求一行匹配多行的约束。例如: 1、表1:商品表,商品ID为主键 2、表2:用户购买的商品列表,商品ID数组 要求表2数组内的每一个元素都在商品表ID字段中存在,同时要求在删除或更新商品表的商品ID时,可以影响到外键。 Postg...

PostgreSQL 对称加密、非对称加密用法介绍

4 minute read

背景 对称加密方法,指加密和解密使用同一把密钥的方法。优势是加密速度快,缺陷是密钥只有一把,安全性较低。 非对称加密方法,指加密和解密用到一对钥匙,一把为私钥,一把为公钥。通常的用法是公钥用于加密,私钥用于解密。优势是更加安全,你自己只要保护好私钥,就可以保证别人给你发的数据无法被篡改、窃听。缺陷是加解密效率比...

[转载] 对称加密与非对称加密

3 minute read

背景 转载: http://www.cnblogs.com/jfzhu/p/4020928.html 原文 (一)对称加密(Symmetric Cryptography) 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)...

PostgreSQL 11 preview - Surjective indexes - 索引HOT增强(表达式)update评估

4 minute read

背景 PostgreSQL 11马上要提交的一个PATCH,可以更亲和的使用HOT,大幅增强表达式索引的更新性能。 背景技术是HOT,当更新某一条记录时,如果被索引的字段值没有变化,同时被更新记录的新版本与老版本在同一个HEAP PAGE中,那么索引不需要增加冗余ENTRY。从而发生HOT更新。 ...

PostgreSQL 多个数组聚合为一维数组加速(array_agg)

1 minute read

背景 多个数组聚合为一维数组,求PC。业务背景见: 《PostgreSQL APP海量FEED LOG实时质量统计CASE(含percentile_disc)》 由于PostgreSQL内置的聚合函数array_agg支持的数组聚合实际上是将多个数组聚合为多维数组。并不是一维数组。 例如: postgr...

PostgreSQL 店铺运营实践 - JSON[]数组 内部标签数据等值、范围检索100倍+加速示例 (含,单值+多值列合成)

8 minute read

背景 PostgreSQL的数组、JSON等数据类型,给业务方带来了很多便利。但与此同时,优化也会变得更加的烧脑。 比如我们的业务方可能在数据库中存储了一些商品的信息,同时每个商品上会有若干的标签,每个标签使用一个JSON来表示。 数据结构就会变这样: create table js( gid in...

PostgreSQL UDF实现tsvector(全文检索), array(数组)多值字段与scalar(单值字段)类型的整合索引(类分区索引) - 单值与多值类型复合查询性能提速100倍+ 案例 (含,单值+多值列合成)

5 minute read

背景 在应用程序中,特别是使用PostgreSQL多值列(数组、全文检索、JSON)类型的业务中,除了多值列有查询需求,单值列也有查询需求。 那么当两种查询并行存在时,数据库会根据COST选择单列或多列组合索引。但是性能并不能达到极致,只是简化用户的索引设计而已。 例如 create table tbl(g...

PostgreSQL 如何判断idle in transaction的事务中有没有东西要提交

2 minute read

背景 如何判断idle in transaction的事务中有没有东西要提交? 比如在一些情况下,你可能发现数据库中很多idle in transaction的事务,可能是一些僵尸事务,也可能是一些应用框架引起的,连接建立后就开启一个事务,实际上里面啥也没有。 postgres=# select pid, s...

分区表锁粒度差异 - pg_pathman VS native partition table

3 minute read

背景 PostgreSQL 内置分区相比pg_pathman分区插件性能要差一大截: 《PostgreSQL 10 内置分区 vs pg_pathman perf profiling》 主要原因: 1、与优化器有关,内置分区表,plan\bind时需要分析所有子表,所以子表越多,性能会越差。例如下面这个CA...

PostgreSQL APP海量FEED LOG实时质量统计CASE(含percentile_disc) - 含rotate 分区表

15 minute read

背景 服务质量监控是精细化质量管理的重要环节: 例如实时统计FEED LOG在某些分组在某些固定区间(分钟、5分钟、10分钟)的水位值,avg, sum, count等。 本文将介绍一个CASE,某个服务的实时质量监控。 多个点值以数组的形式,批量合并写入。例如2500个点,一批写入。 为了实现高效率的统...

PostgreSQL 相似搜索分布式架构设计与实践 - dblink异步调用与多机并行(远程 游标+记录 UDF实例)

4 minute read

背景 背景请参考如下: 《PostgreSQL 相似搜索设计与性能 - 地址、QA、POI等文本 毫秒级相似搜索实践》 当需要进行相似搜索的数据量大于单机处理能力时,我们需要水平拆分来提高搜索能力。 或者可以使用阿里云的PolarDB for PG的产品(类似ORACLE RAC,支持增加计算节点)。比水平...

PostgreSQL 11 preview - 新功能, 分区表全局索引管理

5 minute read

背景 PostgreSQL 10开始引入了原生支持的分区表,支持了range, list分区。 PostgreSQL 11对分区表的功能进行了增强,首先增加了hash分区表。其次,增加了分区表全局索引管理(PostgreSQL 10 分区表的主表上不支持索引,如果要建索引,不得不在每个分区上去定义,不太方便的。...

PostgreSQL 11 preview - 并行排序、并行索引 (性能线性暴增) 单实例100亿TOP-K仅40秒

14 minute read

背景 在OLAP场景,排序是一个非常重要的功能。也是衡量数据库是否适合OLAP场景的一个重要指标。例如这些场景: 1、求TOP-K,例如在对数据进行分组后,取出每个分组的TOP-K。 2、求中位数,要求对数据排序,并取出处于中间水位的值。 3、数据柱状图,需要对数据进行排序,并按记录均匀分割成若干BUCKE...

PostgreSQL 11 preview - 分区表智能并行JOIN (已类似MPP架构,性能暴增)

22 minute read

背景 PostgreSQL 10开始引入了内置分区表功能,当分区表与分区表发生JOIN时,大家想象一下,分区和分区能直接一对一JOIN,而跳过与其他分区JOIN吗? 实际上我们在单表上,通过HASH可以达到类似的目的,即分片与分片JOIN,这样可以把JOIN的数据集合变小,同时能使用并行: 《PostgreS...

PostgreSQL 相似搜索设计与性能 - 地址、QA、POI等文本 毫秒级相似搜索实践

17 minute read

背景 在现实生活中,很多地方会用到相似搜索,例如 1、打车,要去某个地方,我们输入的目的地可能和数据库里面存的并不完全一致。所以只能通过相似搜索来实现。 2、搜索问题,同样的道理,我们搜的问题可能和存的问题不完全一致。只能通过相似搜索来匹配。 3、搜索兴趣点,等。 实际上PostgreSQL就可以支持相似...

PostgreSQL in 与 = any 的SQL语法异同与性能优化

6 minute read

背景 数据库SQL也算一门比较神奇的语言了,比如很多需求可以有不同的SQL来实现: 我之前有输出过一个IN的测试,这里面实际上也涉及到多个语法,实现同一个功能点。测试CASE是1亿 in 100万的多种写法的性能差异。 《HTAP数据库 PostgreSQL 场景与性能测试之 25 - (OLTP) IN ,...

PostgreSQL 时序数据库插件 timescaleDB 部署实践(含例子 纽约TAXI数据透视分析) - PostGIS + timescaleDB => PG时空数据库

12 minute read

背景 现实社会中,很多业务产生的数据具有时序数据属性(在时间维度上顺序写入,同时包括大量时间区间查询统计的需求)。 例如业务的FEED数据,物联网产生的时序数据(如气象传感器、车辆轨迹、等),金融行业的实时数据等等。 PostgreSQL的UDF和BRIN(块级索引)很适合时序数据的处理。具体有以下的两个例子...

Greenplum 连接池实践

less than 1 minute read

背景 连接池在数据库应用中是非常重要的一种组件。 虽然空闲连接不干什么,但是由于每个连接有自己的relcache缓存空间,被访问过的对象,都会占用一定的缓存空间(访问的对象越多,内存占用越多)。因此即使连接空闲,实际上依旧占用了SOCKET,以及一定的内存空间。 某个业务长连接的问题(也是relcache的霸...

PostgreSQL Oracle 兼容性之 - rownum

3 minute read

背景 Oracle ROWNUM是一个虚拟列,每输出一行递增1。 Oracle rownum 通常被用于LIMIT输出记录数。 SELECT ROWNUM, empno, ename, job FROM emp WHERE ROWNUM < 5 ORDER BY ename; rownum...

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

1 minute read

背景 PG的数组类型,被广泛应用于 画像系统 , 标签系统。 在一些业务重建中,对数组内容的定义往往包含了多重含义,例如即包含了标签本身,又包含了标签的属性(例如 标签值:权值,时间 等)。 那么如何能高效的进行标签的检索,同时又过滤出符合标签加权值的记录呢? 例子 1、建表 create table t...

PostgreSQL 全文检索之 - 位置匹配 过滤语法(例如 ‘速度 <1> 激情’)

3 minute read

背景 PostgreSQL 的全文检索功能非常的丰富,除了我们说的开放式的parser,字典。同时还支持ranking算法(内置以及扩展)。 那么实际上在搜索的需求中,还有一类位置过滤的需求,例如“速度与激情”这个词,分词后是有位置信息的,我们期望搜到的是“速度”和“激情”之间间隔一个的情况,提高精准度。 P...

学习 PostgreSQL Frontend/Backend protocol (通信协议)

2 minute read

背景 理解PostgreSQL的通信协议可以更好的开发类似SQL代理,SQL中间件,SQL防火墙,连接池等软件。 学习资料与软件 《PostgreSQL 读写分离代理 - Crunchy Proxy(base on golang)》 Postgres on the wire - A look at the P...

PostgreSQL 10 自定义并行计算聚合函数的原理与实践 - (含array_agg合并多个数组为单个一元数组的例子)

4 minute read

背景 PostgreSQL 9.6开始就支持并行计算了,意味着聚合、扫描、排序、JOIN等都开始支持并行计算。对于聚合操作来说,并行计算与非并行计算是有差异的。 例如avg聚合,对一张表进行计算时,一个任务中操作和多个并行任务操作,算法是不一样的。 PostgreSQL提供了一套标准的接口,可以支持聚合函数的...

PostgreSQL bitmap scan的IO放大的原理解释和优化

1 minute read

背景 PostgreSQL 支持9种索引接口: 《PostgreSQL 9种索引的原理和应用场景》 每一种索引的结构,适合的数据类型,适合的查询场景都不一样。 对于多值类型(例如 K-V,数组、全文检索 类型),我们可以选择GIN倒排索引接口,GIN使用的扫描方法是bitmap scan的扫描方法。 实际...

用PostgreSQL 处理 指纹 数据

2 minute read

背景 pgafis是一个插件,支持存储指纹特征值,同时将指纹特征比对算法作为UDF编写到了数据库中,安装这个插件依赖指纹比对算法库。 https://www.nist.gov/services-resources/software/nist-biometric-image-software-nbis http...

PostgreSQL 模糊查询 与 正则匹配 性能差异与SQL优化建议

2 minute read

背景 PostgreSQL通过 pg_trgm插件,可以支持正则表达式、LIKE 前后模糊查询。 (要支持中文的话,必须确保lc_ctype <> C) 《中文模糊查询性能优化 by PostgreSQL trgm》 从语义上来讲,以下两个查询的语义是一样的。 select * from te...

如何将谷歌地球(google earth) 的数据导入 PostgreSQL

less than 1 minute read

背景 KML(Keyhole Markup Language) 是一种文件格式,用于在地球浏览器(例如 Google 地球、Google 地图和 Google 地图移动版)中显示地理数据。KML 使用包含嵌套的元素和属性的结构(基于标记),并符合 XML 标准。 由于KML已经加入OGC标准,所以作为OGC的成...

OSM(OpenStreetMap) poi、路网 数据导入 PostgreSQL

less than 1 minute read

背景 从OpenStreetMap下载地图数据,使用osm2pgsql可以将数据导入PostgreSQL数据库,结合PostGIS插件,实现POI的业务。 如果要提取POI(兴趣点)数据,可以使用osmosis工具,处理OSM导出的文件。 https://github.com/openstreetmap/os...

PostgreSQL freeze 风暴导致的IOPS飙升 - 事后追溯

1 minute read

背景 在使用PG 9.6以前的版本时,freeze带来的IOPS影响较大,体现在数据文件读写、WAL日志大量产生。 原因是9.6以前的版本,当表的年龄达到一定的阈值后(全局参数或表级参数控制),会触发freeze的动作,扫描全表,同时有可能(如果BLOCK被FREEZE的话)产生WAL(越大的表,带来的IO越大...

[转载]MySQL和PostgreSQL的常用语法差异

less than 1 minute read

背景 作者:凌络 在去年的DBMS评比中,PostgreSQL夺冠,PostgreSQL一直保持上升姿态,越来越多的客户选择使用PostgreSQL,还有一部分客户从MySQL迁往PostgreSQL,那PostgreSQL和MySQL对于开发者来说的差异在哪里呢?末学对比了下语法差异,不一样的地方用红色标记了...

[转载]MySQL和PostgreSQL的数据类型对比

less than 1 minute read

背景 作者:凌络 在去年的DBMS评比中,PostgreSQL夺冠,PostgreSQL一直保持上升姿态,越来越多的客户选择使用PostgreSQL,还有一部分客户从MySQL迁往PostgreSQL,那PostgreSQL和MySQL对于开发者来说的差异在哪里呢?我们先看下数据类型。 数据类型 看着不方...

PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) SQL防火墙使用(白名单管理、防SQL注入、防DDL等)

8 minute read

背景 数据库SQL防火墙是一个安全加强功能,通常被用于防止或减轻数据库被攻击后,泄露数据或者数据被破坏带来的损失。 包括: 1、防止SQL注入。 2、防止业务访问无需访问的对象。 3、防止业务执行DDL。 4、防止业务执行不带WHERE条件的DML。 5、防止业务执行不带WHERE条件或者WHERE条...

电商订单 + 物流信息对称补齐案例 - A, B表,到达时间交叉,增量JOIN补全C数据

2 minute read

背景 在电商平台中,分销是非常普遍的现象,你在淘宝上买的东西,很可能并不是商家本身发货的,和你对接的商家,也许只是一个分销商。 因此一个物流信息,可能涉及到多个订单。 物流、订单表的到达时间可能不完全一致,所以在某一时刻,肯有订单,但是没有物流信息。或者有物流但是没有订单记录。 如果A表代表订单表,B表...

PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) 索引推荐功能使用

2 minute read

背景 PostgreSQL商用版本EnterpriseDB,内置了索引推荐功能,原理与这里描述类似。 《PostgreSQL SQL自动优化案例 - 极简,自动推荐索引》 目前仅支持BTREE索引的(单列或多列)推荐,(有一些限制,暂时不支持继承表的推荐,暂时不支持表达式索引的推荐)。 索引推荐用法 1、创...

PostgreSQL 商用版本EPAS(阿里云ppas(Oracle 兼容版)) HTAP功能之资源隔离管理 - CPU与刷脏资源组管理

2 minute read

背景 随着硬件发展,单机的能力越来越强,单个数据库可能服务于多个业务,或者服务于混合场景。例如即有分析型也有在线事务型处理(HTAP)。 资源隔离管理成为非常重要的需求。 对于Linux的用户,使用cgroup可以用来隔离进程的网络、CPU、IO、内存等。PostgreSQL为进程模型,使用cgroup可以实...

PostgreSQL SQL自动优化案例 - 极简,自动推荐索引

2 minute read

背景 SQL自动优化是数据库的高级特性,其中包括SQL 自动rewrite,自动推荐索引,自动优化执行计划 等。 1、自动优化执行计划 目前postgrespro在做这块 https://postgrespro.com/roadmap/56513 Machine learning Query plann...

PostgreSQL SQL filter (SQL 成本 语义过滤器) - SQL成本防火墙

less than 1 minute read

背景 SQL防火墙,或SQL过滤器,在一些特定的场合可能会比较有用。 例如限制某些用户执行可能会耗费很多资源的SQL,限制用户执行SELECT以外的SQL(尽管SELECT不能保证对数据不产生修改,例如SELECT FUNCTION)。 PostgreSQL 提供了一些HOOK可以用来开发此类功能插件。 p...

PostgreSQL on Docker部署是的shm配置注意

less than 1 minute read

背景 如果你使用docker启动PG时,遇到类似这样的问题,可能你需要看看docker的/dev/shm是不是不够大。 "ERROR: could not resize shared memory segment "/PostgreSQL.388782411" to 50438144 bytes: No spa...

强制数据分布与导出prefix - 阿里云pg, hdb pg oss快速数据规整外部表导出实践案例

2 minute read

背景 批量数据导出在数据分析、数据圈选、广告系统、数据清洗系统、数据规整系统中是一个比较常见的需求,例如: 1、导出任务流。 2、广告系统,圈选人群。 3、数据清洗并导出。 4、数据按某些规则分类,规整并输出到不同的文件。 通常数据库的导出功能相对来说比较单一,例如可以导出query的结果,导出表,导出...

SQL流式案例 - 旋转门压缩(前后计算相关滑窗处理例子)

less than 1 minute read

背景 在流计算应用中,保持窗口和数据可重算(设置起点重新开始算)并覆盖已有计算结果。是两个比较特殊但又很有用的需求。 例如流数据来自多个业务线,数据在现实中的发生有先后逻辑,然而由于系统的问题可能有数据到达差异,例如先发生的事情,数据反而后到达,(比如说订单,先下单,后付款,在发货,这是多个业务线产生的数据,...

PostgreSQL 秒杀4种方法 - 增加 批量流式加减库存 方法

3 minute read

背景 秒杀,即对同一个商品,消减库存。 带来的数据库问题是热点行,由于数据库最细粒度的锁通常是行锁,同一行同一时刻只能被一个事务更新,其他事务如果要更新同一行,会等待行级排它锁。 PostgreSQL中有几种方法来处理秒杀: 1、暴力,直接更新 2、skip locked,跳过被锁的行,直接返回,防止会话...

PostgreSQL 大学选课相关性应用实践

1 minute read

背景 大学生选课,一门课程可同时有若干学生选修,一个学生可能同时选多门课程,学生和课程的关系是多对多的关系。 1、如何找出每一门课程相关的课程(即这门课程的学生,还选了其他一些什么课程?)同时要求按相关性排序。 2、如何找出每一门课程相关的课程(即这门课程的学生,还选了其他一些什么课程?这些课程的学生又选了一...

PostgreSQL json 任意位置 append 功能实现

less than 1 minute read

背景 在JSON的任意位置,插入或append一段。目前PG内置函数不支持,需要复杂的SQL。 目前支持的内置操作符和函数如下: https://www.postgresql.org/docs/current/static/functions-json.html 现在有一个这样的需求,在对应某个PATH的位...

航空公司数据库设计

6 minute read

背景 通过学习航空公司数据库设计,学习PostgreSQL的使用。 这个DEMO来自postgrespro: https://postgrespro.com/docs/postgrespro/10/demodb-bookings.html 加载航空公司数据 可以任选一个数据集,使用pg_restore还...

传统分库分表(sharding)的缺陷与破解之法

less than 1 minute read

背景 随着互联网的发展,数据爆炸性的增长,数据库逐渐成为了很多业务的绊脚石,很多业务也哭着喊着要上分布式数据库。 但是,传统的分库分表(sharding)带来的问题较多,得不偿失 传统分库分表问题 1、 扩容不方便(需要重分布数据) 2、 分布键变更很麻烦 3、 分布键选择(架构设计)需要谨慎,甚至...

PostgreSQL 3D City 应用

3 minute read

背景 空间应用在城市规划建设中,在发挥越来越重要的作用! PostGIS是一个开源的PostgreSQL空间数据库插件,遵循OGC的SQL协定设计,应用广泛。 PostGIS is an open source software program that adds support for geog...

PostgreSQL 图式搜索(graph search)实践 - 百亿级图谱,毫秒响应

14 minute read

背景 图式搜索是PostgreSQL在(包括流计算、全文检索、图式搜索、K-V存储、图像搜索、指纹搜索、空间数据、时序数据、推荐等)诸多特性中的一个。 采用CTE语法,可以很方便的实现图式搜索(N度搜索、最短路径、点、边属性等)。 其中图式搜索中的:层级深度,是否循环,路径,都是可表述的。 例子 创...

[转载]易上手的数据挖掘、可视化与机器学习工具: Orange介绍

less than 1 minute read

背景 可视化分析会是一个让枯燥的数据说话的快捷途径,降低可视化分析门槛,同时又保留它的编程能力,是非常重要的。 如今数据种类越来越多,除了常见的数值、文本,还有数组、K-V、图像、空间数据、波、基因 等等。对可视化分析软件的要求也越来越高。 原文 http://blog.just4fun.site/Ora...

Back to Top ↑

2017

PostgreSQL 实时位置跟踪+轨迹分析系统实践 - 单机顶千亿轨迹/天

3 minute read

背景 随着移动设备的普及,越来越多的业务具备了时空属性,例如快递,试试跟踪包裹、快递员位置。例如实体,具备了空间属性。 例如餐饮配送,送货员位置属性。例如车辆,实时位置。等等。 其中两大需求包括: 1、对象位置实时跟踪,例如实时查询某个位点附近、或某个多边形区域内的送货员。 2、对象位置轨迹记录和分析。结...

Greenplum hash分布算法

1 minute read

背景 Greenplum,如果从master节点写入数据的话,写入性能实际上是比较差的,但是我们可以直接连数据节点来写入: 《让greenplum的oltp性能飞起来》 这种用法需要客户端从master获取gp_segment_configuration,同时需要获取表的分布键,同时需要使用cdbhash算法...

PostgreSQL 时序数据案例 - 时间流逝, 自动压缩(时间粒度老化), 同比环比

4 minute read

背景 时序数据库一个重要的特性是时间流逝压缩,例如1天前压缩为5分钟一个点,7天前压缩为30分钟一个点。 PostgreSQL 压缩算法可定制。例如简单的平均值、最大值、最小值压缩,或者基于旋转门压缩算法的压缩。 《[未完待续] SQL流式案例 - 旋转门压缩(前后计算相关滑窗处理例子)》 《旋转门数据压缩...

惊天性能!单RDS PostgreSQL实例 支撑 2000亿 - 实时标签透视案例 (含dblink异步并行调用)

5 minute read

背景 20亿用户,每个用户1000个标签,基于任意标签组合圈选、透视(业务上的需求是一次最多计算100个标签的组合)。 相当于要处理2000亿记录。 1、实时求标签组合的记录数。(即满足标签组合的用户有多少) 2、用户ID。(级满足标签组合的用户ID。) 要求实时响应。 通常你肯定会想,这个至少需要上百...

超时流式处理 - 没有消息流入的数据异常监控

2 minute read

背景 流计算有个特点,数据流式写入,流式计算。 但是有一种情况,可能无法覆盖。例如电商中的 收货超时,退款处理超时 事件的流式监控。因为数据都不会再写进来了,所以也无法触发流式计算。 这些问题如何流式预警呢? 可以用超时时间+调度的方式,当然这里面有PostgreSQL的独门秘籍: 1、CTE,语法灵活。...

PostgreSQL pgbench : 冒号处理

1 minute read

背景 pgbench 的自定义测试脚本中,冒号有特殊的含义,可以用于变量名的前面,表示这个位置使用变?刻婊弧? /*---------- * Join arguments with whitespace separators. Arguments starting wit...

PostgreSQL Oracle 兼容性之 - Partition By Outer Join实现稠化报表

6 minute read

背景 背景介绍:借用Oracle的一篇例子: http://blog.sina.com.cn/s/blog_4cef5c7b01016lm5.html 在数据库表中,存储的数据经常是稀疏数据(sparse data),而不是稠密数据(dense data)。 先来了解一下什么是稀疏数据,比如一个产品销售情况...

PostgreSQL 高并发任务分配系统 实践

2 minute read

背景 给任务分配线程ID,或让线程去抢占任务执行,是任务分配系统中的基本需求。 目的是能够快速的消耗掉所有的任务,同又要保证两点: 1、所有任务都被领取。 2、每个任务只能被一个线程领取。 3、每个线程同一时间只能领取一个任务。 实际上在数据库中, 就是一个高并发的,实时更新系统,设计时要尽量避免冲突,...

Greenplum merge insert 用法与性能 (insert on conflict) - 2

5 minute read

背景 《Greenplum merge insert 用法与性能 (insert on conflict)》 这一篇写的是批量的合并写(有则更新,无则插入)。 在Greenplum开放了segment节点的写后,可以采用传统的方法来实现,不需要批量操作。 DEMO Greenplum暂时不支持insert ...

Greenplum merge insert 用法与性能 (insert on conflict) - 1

7 minute read

背景 PostgreSQL insert on conflict语法非常强大,支持合并写入(当违反某唯一约束时,冲突则更新,不冲突则写入),同时支持流式计算。 流计算例子链接: 《PostgreSQL 流式统计 - insert on conflict 实现 流式 UV(distinct), min, max...

Greenplum 点查(按PK查询)性能与提升空间

less than 1 minute read

背景 点查,基于PK的查询或者OLTP类查询,实际上并不是GPDB 擅长的,GPDB擅长的是海量的OLAP。 不过在企业、政府等窗口服务类业务,并发实际上并不高,如果GPDB的点查性能达到一定的性能时,实际上也能满足这类场景的需求。 测试 下面是一组测试,造10亿条测试数据,按PK查询。 create ta...

Greenplum 统计信息收集参数 - 暨统计信息不准引入的broadcast motion一例

3 minute read

背景 数据库执行计划的好坏,与数据库的SQL优化器息息相关。Greenplum有两套优化器,legacy query optimizer 与 ORCA。 这两个优化器都是CBO优化器,都需要依赖统计信息,如果统计信息不准确,可能生成的执行计划就不准确。 例如我们有一个这样的QUERY,发现怎么跑都跑不出来。 ...

PostgreSQL 设置单条SQL的执行超时 - 防雪崩

less than 1 minute read

背景 设置单条SQL的执行超时,防雪崩。 通常来说可以在SQL发起前设置事务级超时参数,SQL执行结束,重置。(如果SQL异常退出,会自动重置事务级参数) 例子 begin; ...... set local statement_time='100ms'; select count(*) fro...

多流实时聚合 - 记录级实时快照 - JSON聚合与json全文检索的功能应用

4 minute read

背景 这个需求是这样的,数据在写入时,以上一条记录作为基础,将当前写入的记录与上一条记录合并,然后作为新的记录写进去。 从而每一条记录都携带了之前所有记录的内容。 当然这里指的是每个维度各自的快照,并不是一张表所有记录的快照。 例如,一笔电商订单,可能经过若干个系统(每个系统产生的属性可能都不一样,多个系统...

人、机客户服务质量 - 实时透视分析 - (多股数据流上下文相关实时分析,窗口保持)

6 minute read

背景 通常一个服务型的产品,面向很多用户时,都会提供多种服务渠道: 电话、WEB、人工客服。机器人客服。 如何从各个维度(问题分类、地区分类。。。。)了解问题的 : 解决率、解决时长柱状图、一次解决率(例如电话机器人、转人工、转机器人等,如果多次流转说明一次解决率太低)。 这个透视分析,可以作为检验客户...

PostgreSQL 业务数据质量 实时监控 实践

4 minute read

背景 当业务系统越来越庞大后,各个业务线的数据对接会越来越频繁,但是也会引入一个问题。 数据质量。 例如上游是否去掉了一些字段,或者上游数据是否及时触达,又或者上游数据本身是否出现了问题。 通过业务数据质量监控,可以发现这些问题。 而PostgreSQL内置的统计信息能力,已经满足了大部分业务数据质量实时...

如何根据行号高效率的清除过期数据 - 非分区表,数据老化实践

1 minute read

背景 数据按时间维度老化,删除或转移,是很多业务都有的需求。 例如业务的FEED数据,CDN的日志数据,物联网的跟踪数据等,有时间维度,可能再有状态值(标记最终状态)。 阿里云RDS PG, HDB PG都对接了OSS存储,可以在OSS中存储冷数据。 我们可以将老化数据直接删除,也可以将老化数据删除并写...

Recheck Cond filter IOCPU放大 原理与优化CASE - 含 超级大表 不包含(反选) SQL优化

3 minute read

背景 在阅读本文之前,先提几个问题: 1、用了索引是不是就不需要访问表了? 2、用了索引是不是就不需要进行二次判断了? 第一个问题,只有一种情况用了索引是不需要访问表的,Index Only Scan,并且对应堆表行号对应的HEAP块中没有不可见TUPLE(访问表的VM文件得到)。否则都需要回表,访问堆表的...

PostgreSQL - 鱼与熊掌可兼得 - 多副本0丢失与高性能兼得 - 事务级异步、同步开关

less than 1 minute read

背景 大多数的数据库属于IO密集型应用,特别是写繁忙的TP系统,例如账户系统。 为了保证数据的可靠性,事务提交时,需要确保事务产生的REDO落到持久化的存储中。 为了提高响应时间,除了数据库软件本身的优化,例如分组提交(降低IO频次)。还可以通过购买高IOPS能力的硬件来实现RT时延的降低。 当然,将来硬盘...

PostgreSQL - 全文检索内置及自定义ranking算法介绍 与案例

1 minute read

背景 《用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询》 《排序算法》这个章节实际上介绍了PostgreSQL的ranking算法。 tsvector将文档分为4层结构:标题、作者、摘要、内容。对这四个层级,用户可以设定对应的weight,用于ran...

PostgreSQL 用 CTE语法 + 继承 实现拆分大表

1 minute read

背景 业务设计初期可能不会考虑到表将来会有多大,或者由于数据日积月累,单表会变得越来越大。 后面在考虑分区的话,应该怎么将单表切换成分区表呢? 这里可以用到PostgreSQL的CTE语法,以及继承功能,还有内置的分区表功能。 例子 具体步骤 1、创建分区表 2、创建继承关系,分区表继承自需要拆分的表 ...

PostgreSQL 逻辑订阅 - DDL 订阅 实现方法

4 minute read

背景 逻辑订阅是PostgreSQL 10内置的功能,通过逻辑订阅,可以实现部分数据的同步要求。例如可以做到行级、表级、库级的订阅。 《使用PostgreSQL逻辑订阅实现multi-master》 《PostgreSQL 逻辑订阅 - 给业务架构带来了什么希望?》 《PostgreSQL 10.0 pre...

PostgreSQL Oracle兼容性 - substrb - orafce substrb 适配 Oracle substrb

1 minute read

背景 在orafce提供的substrb中,当截断到某个多字节字符时,如果字符被中间截断,会导致乱码。 为了兼容oracle substrb,不截断多字节字符,可以在orafce包的substrb基础之上再写一个plpgsql函数来代替。 兼容oracle substrb 下面是阿里云提供的方法。 crea...

Greenplum explain analyze 解读 + 深度明细开关 - 珍藏级

14 minute read

背景 解读Greenplum 的explain analyze输出。同时介绍两个深度明细开关explain_memory_verbosity , gp_enable_explain_allstat 。 例如,我们的一个QUERY是什么地方有瓶颈,是网络瓶颈还是CPU瓶颈,都可以从里面打印的时间观之一二。 ...

GIS术语 - POI、AOI、LOI、路径、轨迹

less than 1 minute read

背景 poi Point of interesting. 可以翻译为兴趣点,就是在地图上任何非地理意义的有意义的点:比如商店,酒吧,加油站,医院,车站等。不属于poi的是有地理意义的坐标:城市,河流,山峰 兴趣点(POI,Point of interest),兴趣点是我们就是导航软件商收录的信息点,比如说XX...

PostgreSQL 10 on ECS 实施 流复制备库镜像+自动快照备份+自动备份验证+自动清理备份与归档 - 珍藏级

21 minute read

背景 介绍在阿里云ECS环境中,实现一个非常简单,但是可用性和可靠性满足一般企业要求的PostgreSQL环境。 包括: 1、随ECS自动启动数据库 2、包括一个延迟毫秒以内的物理流复制备库 3、包括自动的秒级快照备份,可以将数据库恢复到过去的任意时间点 4、包括自动备份集有效性验证 5、包括自动清理...

PostgreSQL、Greenplum 滑动窗口 分析SQL 实践

5 minute read

背景 滑动窗口分析是数据分析中比较常见的需求,例如需要分析每一天的最近7天内的UV、PV、sum, count, avg, min, max等。 因为每一条记录的最近7天的数据都不一样,不能直接GROUP BY,而需要使用 帧 的技术,得到当前行最近7行的数据,并进行统计。 使用的是PostgreSQL的...

一个端口代理软件 - inlab balance

less than 1 minute read

背景 有些时候,可能需要访问一些没有公网或者不可直接到达的服务器。 例如,你能访问A主机,但是不能访问B主机。如果A主机能访问B主机,那么你就可以在A主机加一个端口代理,从而访问到B主机。 或者如果你可以使用反向代理的方法: 《使用 ssh -R 建立反向/远程TCP端口转发代理》 下面介绍一下端口代理的...

PostgreSQL手机行业经营分析、决策系统设计 - 实时圈选、透视、估算

8 minute read

背景 经营分析、决策支持是现代企业的一个让数据发挥有效价值的分析型系统。 在各个行业中随处可见,例如共享充电宝中,协助销售了解实时的设备租赁情况,销售业绩。在电商中,协助小二和商户发掘目标用户群体。金融行业中,协助输出国民的存款、消费、贷款的画像。 PostgreSQL, Greenplum都是非常适合于经营...

[未完待续] 数据库生命周期管理

less than 1 minute read

背景 数据库选型 云端生态系统设计 TP、AP、流、图、时序、空间、搜索、系统架构设计 冷热存储设计 安全系统设计 审计系统设计 监控系统设计 网络设计 硬件评估与规划 benchmark 部署 读写分离设计 LB设计 sharding MPP HA multi-master设计 备份 时间点恢复 闪回 容灾 异...

PostgreSQL multipolygon 空间索引查询过滤精简优化 - IO,CPU放大优化

2 minute read

背景 在PostgreSQL中,目前对于空间对象的索引,采用的是GiST索引方法,空间树结构如下,每个ENTRY都是一个BOX: 如果对象是多边形,那么在索引结构中,会存储这个多边形的bound box。 那么对于非box类型,一定是会出现空间放大的。 另一方面,如果输入条件是个多边形,那么同样会将...

PostgreSQL 传统 hash 分区方法和性能

5 minute read

背景 除了传统的基于trigger和rule的分区,PostgreSQL 10开始已经内置了分区功能(目前仅支持list和range),使用pg_pathman则支持hash分区。 从性能角度,目前最好的还是pg_pathman分区。 但是,传统的分区手段,依旧是最灵活的,在其他方法都不奏效时,可以考虑传统方...

PostgreSQL distinct 与 Greenplum distinct 的实现与优化

17 minute read

背景 求distinct是业务的一个普遍需求,例如每天有多少用户,每个省份有多少用户,每天有多少类目的用户等。 select date,count(dinstinct user) from tbl group by date; select date, province, count(distinct...

PostgreSQL 索引虚拟列 - 表达式索引 - JOIN提速

3 minute read

背景 CASE: 使用虚拟索引,响应时间从2.3秒下降到0.3毫秒 业务系统在设计时,为了减少数据冗余,提升可读性,通常需要将不同的数据放到不同的表。 在查询时,通过多表JOIN来补齐需要查询或在过滤的内容。 比如这样的例子: 有两张表,分别有1千万和100万数据,当用户查询时,需要补齐那100万表中的某个...

乱序写入导致的索引膨胀(B-tree, GIN, GiST皆如此)

1 minute read

背景 有些场景,用户会发现重建索引,索引比原来更小。 通常这种情况是索引字段乱序写入,导致索引频繁分裂,使得索引页并不是百分百填满。膨胀使然。 B-Tree索引 由于索引页中的数据是有序的,因此在乱序写入时,索引页可能出现分裂,分裂多了,空洞就会多起来(一页里面没有填满)。 例子 1、先建索引,乱序写入。...

PostgreSQL 如何快速构建 海量 逼真 测试数据

3 minute read

背景 为了测试或验证需要,通常需要快速的构建测试数据。 PostgreSQL提供了一些非常有用的功能,可以帮助用户快速的构建测试数据。 有趣的功能 1、SRF 返回多条记录的函数。例如 ...

PostgreSQL 11 preview - compress method 接口 - 暨开放接口系列

10 minute read

背景 PostgreSQL是一款扩展能力极强的数据库,这也是PG可以深入各个垂直行业的原因。 PostgreSQL的开放式接口 已有非常多跟进自定义接口扩展出来的插件。 下面是自定义接口对应的文档。 1、自定义函数 https://www.postgresql.org/docs/10/static/xfu...

PostgreSQL 异步消息实践 - Feed系统实时监测与响应(如 电商主动服务) - 分钟级到毫秒级的实现

9 minute read

背景 在很多业务系统中,为了定位问题、运营需要、分析需要或者其他需求,会在业务中设置埋点,记录用户的行为在业务系统中产生的日志,也叫FEED日志。 比如订单系统、在业务系统中环环相扣,从购物车、下单、付款、发货,收货(还有纠纷、退款等等),一笔订单通常会产生若干相关联的记录。 每个环节产生的属性可能是不一样的...

PostgreSQL 电商小需求 - 凑单商品的筛选

less than 1 minute read

背景 电商的促销活动非常多,规则可能比较复杂,要薅羊毛的话,数学可能要比较好才行。因此也出现了大量的导购网站,比如SMZDM。 但是实际上电商里面也有类似的应用,可以智能的分析买家的需求,根据买家的需求、已有的券、购物车,向用户推荐凑单品。 凑单的需求,本质上是多个字段组合搜索的需求。 1、购物车总金额 ...

PostgreSQL Oracle 兼容性之 - rowid (CREATE TABLE WITH OIDS)

1 minute read

背景 Oracle的数据中,通过ROWID可以定位到一条记录,当记录没有发生行迁移时,ROWID是不变的,因此即使不使用PK,也能很好的定位到一条记录。 PostgreSQL中,也有行号,CTID,由BLOCK_ID和ITEM_ID组成,即哪个数据块的哪条记录。 但是PostgreSQL的引擎为多版本引擎,因...

HTAP数据库 PostgreSQL 场景与性能测试之 47 - (OLTP) 空间应用 - 高并发空间位置更新、多属性KNN搜索并测(含空间索引)末端配送、新零售类项目

20 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

[未完待续] HTAP数据库 PostgreSQL 场景与性能测试之 44 - (OLTP) 空间应用 - 空间包含查询(输入多边形 包含 表内空间对象)

1 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 32 - (OLTP) 高吞吐数据进出(堆存、行扫、无需索引) - 阅后即焚(JSON + 函数流式计算)

2 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 31 - (OLTP) 高吞吐数据进出(堆存、行扫、无需索引) - 阅后即焚(读写大吞吐并测)

2 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 28 - (OLTP) 高并发点更新

1 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 25 - (OLTP) IN , EXISTS 查询

6 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 23 - (OLAP) 并行计算

3 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 21 - (OLTP+OLAP) 排序、建索引

3 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 17 - (OLTP) 数组相似查询

2 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 3 - (OLAP) 大表JOIN统计查询

1 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 2 - (OLTP) 多表JOIN

2 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

HTAP数据库 PostgreSQL 场景与性能测试之 1 - (OLTP) 点查

1 minute read

背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。 PostgreSQL社区的贡献者众多,来自全球各个行业,历经...

PostgreSQL 中英文混合分词特殊规则(中文单字、英文单词) - 中英分明

less than 1 minute read

背景 某个业务系统有一个这样的要求: 分词后,要求,英文以单词形式出现,中文(多字节字符)以单字符形式出现。 这样的需求,需要如何来实现呢? 自定义分词规则UDF 切词的一些隐含参数,请参考: 《使用阿里云PostgreSQL zhparser时不可不知的几个参数》 要出现单字,我们需要这样来设置,对于...

PostgreSQL 多字段任意组合搜索的性能

3 minute read

背景 PostgreSQL 多字段,任意组合搜索,有三种优化手段: 1、gin索引(支持任意字段组合的查询) 《宝剑赠英雄 - 任意组合字段等效查询, 探探PostgreSQL多列展开式B树 (GIN)》 2、bloom索引(支持任意只读组合的等值查询) 《PostgreSQL 9.6 黑科技 bloom...

PostgreSQL pg_stat_reset清除track_counts的隐患

4 minute read

背景 PostgreSQL数据库的statstic模块有一些计数器,用于统计每个表被插入、更新、删除的记录数。 通过这些视图,可以查看计数器统计到的一些计数: postgres=# \dv pg_stat* List of relations S...

PostgreSQL 电子围栏的应用场景和性能(大疆、共享设备、菜鸟。。。)

less than 1 minute read

背景 电子围栏,这个在GIS应用中非常常见的词。在很多业务场景中都可以使用: 电子围栏的常见手段是圈出一块,或者一些多边形。当被监控对象在多边形内或者多边形外时(根据业务模型),作为一个判断条件,触发一些业务规则。 1、禁飞区 玩大疆无人机的话,你一定要知道哪里是禁飞区,否则可能违法被抓,但是你可能并不知道...

PostgreSQL 虚拟 虚假 索引(hypothetical index) - HypoPG

1 minute read

背景 DBA实际上是一种比较稀缺的资源,很多企业甚至没有DBA,或者SA、开发人员兼职DBA,对于一般的使用者,对数据库了解程度有限,特别是在SQL优化方面的知识更加有限。 最常用也是奏效较快的SQL优化手段,通常是加索引,这也是我从很多开发者交流后得知的,很多人的概念是,SQL慢,加索引嘛。 但是加索引有没...

PostgreSQL 统计信息pg_statistic格式及导入导出dump_stat - 兼容Oracle

14 minute read

背景 《PostgreSQL 规格评估 - 微观、宏观、精准 多视角估算数据库性能(选型、做预算不求人)》 EXPLAIN是PG数据库用于输出SQL执行计划的语法, 1、生成的执行计划中包含COST一项。 如果校准了成本因子,COST可以和SQL实际执行时间对其。因子校对的方法如下,实际上每一种硬件,我们只...

PostgreSQL 10 新特性 - identity column (serial, 自增)

3 minute read

背景 自增列是数据库的一个常用功能,PostgreSQL的自增列在10的版本出来前,有两种非常简单的方法来实现: 1、serial类型,自动创建一个序列,同时将列设置为INT,默认值设置为nextval(‘序列’)。 create table test(id serial, info text); ...

最受开发者欢迎的HTAP数据库PostgreSQL 10特性

3 minute read

背景 作为一款HTAP数据库(同时支持 “OLTP高并发在线事务处理” 与 “OLAP在线分析” 业务场景),PostgreSQL 10的哪些特性是开发人员、DBA、架构师都喜欢的呢? 多核并行增强 9.6的版本支持如下并行: Sequential scans Aggregates Hash and ...

MySQL准实时同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync

3 minute read

背景 rds_dbsync是阿里云数据库内核组开源的一个数据实时同步工具。 可以解析MySQL的binlog,或者PostgreSQL的WAL日志,实现增量的实时同步。同时支持全量不落地迁移功能。 rds_dbsync功能介绍 1、全量不落地迁移(从mysql到pgsql,从pgsql到pgsql,从mys...

debezium - 数据实时捕获和传输管道(CDC)

less than 1 minute read

背景 在业务系统中,会涉及到多个数据源的数据流转,例如在线系统的数据流转到分析系统、流计算系统、搜索引擎、缓存系统、事件处理系统等。 为了实现这一目的,CDC系统应运而生,CDC系统用于捕获上游数据的实时变化(已提交的数据),写入消息队列(例如KAFKA)持久化。下游系统,消费消息队列的数据。从而实现实时的数据...

PostgreSQL 整型除法要注意

2 minute read

背景 整型除以整型,正常情况下当然得到的应该也是整型。数据库也是这么干的。 但是在数据库应用中,通常业务的需求是得到NUMERIC,不能直接把小数干掉。 数据库的行为给用户带来了诸多不便,例如1除以2,如果是整型除法会得到0,然而用户可能要的是0.5。 那么怎么处理呢? 1、建议用户使用float8, m...

Linux 批量依赖库拷贝(ldd)

3 minute read

背景 如何将程序依赖的动态库拷贝到指定的目录? 例子 1、通过LDD查看依赖的动态库。 # ldd postgres linux-vdso.so.1 => (0x00007ffcfc324000) libpthread.so.0 => /lib64/lib...

PostgreSQL Oracle 兼容性之 - timestamp + numeric

2 minute read

背景 Oracle里面支持时间戳与数字的加减,数字默认单位为天。 PostgreSQL 支持时间戳与interval类型进行加减。日期支持与整型做加减。 为了兼容Oracle(时间戳与数字加减),我们可以复写操作符来实现时间戳与数字的加减。 复写操作符 1、自定义几个函数,用于时间戳与数字的加减。 pos...

Linux page allocation failure 的问题处理 - zone_reclaim_mode

3 minute read

背景 Linux内核分配失败,现象: 内存使用一定量后,HANG。 dmesg中可能会有类似这样的错误,系统HANG住,无法连接,需要重启解决。 page allocation failure Oct 24 11:27:42 kernel: : [21289.479063] pytho...

[转] 快速计算Distinct Count

2 minute read

背景 本文转发自技术世界,原文链接 http://www.jasongj.com/2015/03/15/count_distinct/ 正文 UV vs. PV 在互联网中,经常需要计算UV和PV。所谓PV即Page View,网页被打开多少次(YouTube等视频网站非常重视视频的点击率,即被播放多少次,也即...

在PostgreSQL中使用 plpythonu 调用系统命令

1 minute read

背景 有些时候,为了方便调度,可能需要在数据库中执行一些系统命令。 例如清理OSS对象存储,查看磁盘使用量等。 使用plpythonu,可以简便的调用系统命令。 例子 1、执行命令,返回命令的返回值。 create or replace function exec_cmd1(cmd text) retu...

多国语言字符串的加密、全文检索、模糊查询的支持

2 minute read

背景 PostgreSQL中的全文检索和模糊查询是很好实现的。 通过pg_trgm插件,可以实现模糊查询(前、后、全模糊),近似查询,正则表达式查询的索引加速。 通过中文分词插件(pg_jieba, pg_scws, zhparser),可以实现中文分词,其他语种的分词,参考对应的插件。 但是,如果要让数据...

Greenplum, PostgreSQL 数据实时订阅的几种方式

less than 1 minute read

背景 通常在一个企业中,对一份数据可能更有多个业务系统需要对其进行处理。 《从人类河流文明 洞察 数据流动的重要性》 因此数据是流动的,通常会通过消息队列来完成这样的工作。不过呢,这样要求消息队列是最上游。 当无法将消息队列放到最上游时,例如数据先到了数据库,再订阅给其他业务线,怎么办呢? 就比如这里的R...

PostGIS 距离计算建议 - 投影 与 球 坐标系, geometry 与 geography 类型

2 minute read

背景 PostGIS中有两种常用的空间类型geometry和geography,这两种数据类型有什么差异,应该如何选择? 对于GIS来说,首先是坐标系,有两种:一种是球坐标(地理坐标),另一种是平面坐标(投影坐标)。 球坐标通常用于计算,平面坐标通常用于展示(也可以计算)。 投影坐标是从球坐标投影后展开得来...

Greenplum 类型一致性使用注意 - 索引条件、JOIN的类型一致性限制

5 minute read

背景 在查询时,有很多用户会犯浑,发现建立了索引,但是查询偏偏不走索引。 怎么不走索引啊? 这里做容易混淆的是类型的差异,例如字段类型为字符串,但是输入的是INT类型,这样就可能不走索引。(除非创建了自动的CAST,自动进行类型转换) 查询的输入类型与索引的类型一致是非常有必要的。 例子 1、建表(使用变...

Greenplum 点查询的优化(分布键)

2 minute read

背景 Greenplum是分布式数据库,在建表时,可以指定随机分布、或按指定字段或多个字段进行分布。 因此在做点查时,Greenplum可以根据WHERE条件来判断是需要在所有节点查询,还是只需要到若干节点查询。 假设tbl按id分布,那么下面几种情况应该到哪个节点查询呢: -- 到单个节点查询 sel...

PostgreSQL DISTINCT 和 DISTINCT ON 语法的使用

4 minute read

背景 本文介绍一下distinct的几种用法。 https://www.postgresql.org/docs/10/static/queries-select-lists.html#queries-distinct 1、返回唯一值 After the select list has been proces...

[未完待续] PostgreSQLGreenplum Customer视角TODO

6 minute read

背景 https://wiki.postgresql.org/wiki/Todo PostgreSQL 一、内置HA 1、多副本自动选主、自动HA 2、单副本HA 二、sharding 1. 物理流复制备库,支持对外部表执行DML操作,因为它不修改本地数据,没有风险。 此法,可以用于sharding库的中...

Greenplum 模糊查询 实践

2 minute read

背景 文本搜索的需求分为: 1、全匹配,如: select * from table where column = 'xxxx'; 2、后模糊,如: select * from table where column like 'xxxx%'; 3、前模糊,如: select * from ...

PostgreSQL 生成随机身份证ID

less than 1 minute read

背景 生成随机身份证号。 规则 前1、2位数字表示:所在省(直辖市、自治区)的代码; 第3、4位数字表示:所在地级市(自治州)的代码; 第5、6位数字表示:所在区(县、自治县、县级市)的代码; 第7 - 14位数字表示:出生年、月、日; 第15、16位数字表示:所在地的派出所的代码; 第17位数字表示...

PostgreSQL 10 内置分区 vs pg_pathman perf profiling

9 minute read

背景 PostgreSQL 10内置分区的性能不如pg_pathman分区插件的性能。有非常大的优化空间,那么是什么导致了分区的性能问题呢? 编译PostgreSQL 10.0 1、编译、打开debug CFLAGS="-g -ggdb -fno-omit-frame-pointer" ./configure...

PostgreSQL 如何让 列存(外部列存) 并行起来

11 minute read

背景 PostgreSQL 10已经实现了大部分操作的并行计算,例如(全表扫描,索引扫描,位图扫描,哈希JOIN,哈希聚合,分组聚合,排序,建索引等)。 对于外部表,要实现并行扫描,PostgreSQL有什么方法呢? PostgreSQL不仅支持单个对象的并行计算,还支持多个对象的并行访问。多个对象的并行访问...

HTAP数据库(OLTP+OLAP) - sharding 和 共享分布式存储 数据库架构 优缺点

less than 1 minute read

背景 随着互联网的发展,数据爆炸性的增长,数据库逐渐成为了很多业务的绊脚石,很多业务也哭着喊着要上分布式数据库(个人认为大部分是高估了自己的业务)。 分布式数据库又分很多流派,比如重点要说的sharding和共享分布式存储的架构,它们有着什么样的优缺点呢? sharding vs 共享分布式存储 数据库架构 ...

PostgreSQL 自定义自动类型转换(CAST)

5 minute read

背景 PostgreSQL是一个强类型数据库,因此你输入的变量、常量是什么类型,是强绑定的,例如 在调用操作符时,需要通过操作符边上的数据类型,选择对应的操作符。 在调用函数时,需要根据输入的类型,选择对应的函数。 如果类型不匹配,就会报操作符不存在,或者函数不存在的错误。 postgres=# sele...

PostgreSQL Oracle 兼容性 - order by INT(select位置 position)

1 minute read

背景 在一些Oracle的用户中,会问到是否支持order by INT这样的查询语法。它是什么意思呢?实际上就是按查询子句的第几个表达式进行排序。 https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10002.htm ORDE...

PostgreSQL Oracle 兼容性 - synonym 匿名

less than 1 minute read

背景 Oracle 的一个功能,支持对其他对象建立别名(匿名:synonym),它有什么用呢? 比如某些业务系统中,代码中写死了要访问的对象是在哪个用户下的。当迁移时,如果遇到用户名冲突,我们可能会选择将对象同步到其他用户下。那么问题来了,程序也要改动,如果是很老的程序,估计找不到人来做这件事情。用synony...

PostgreSQL flashback(闪回) 功能实现与介绍

14 minute read

背景 闪回的需求往往是救命的需求,因为通常情况下数据库正常运行是不需要闪回的,往往是出现了误操作,被攻击,被注入后,数据库的数据被删除或恶意纂改并且纂改的事务已提交,也就是说纂改已经被持久化了。 这种情况下需要闪回来救命,回到被破坏前的状态。 闪回的目标分为两种: DML闪回和DDL闪回。 DML闪回指对...

PostgreSQL 实践 - 内容社区(如论坛)图式搜索应用

4 minute read

背景 通常一个内容社区网站可能需要记录这么一些数据: 文章,用户,标签。 还有三者之间的关系,包括,文章的标签,用户阅读了文章,用户收藏了文章,用户关注了某用户,用户是某篇文章的作者。 最终要实现毫无人道的查询,例如: 阅读了此篇文章的人还在阅读什么其他文章,和我爱好相近的人都有哪些等等等等。 其中文章数...

PostgreSQL 空间st_contains,st_within空间包含搜索优化 - 降IO和降CPU(bound box) (多边形GiST优化)

5 minute read

背景 点面判断、按面圈选点或其他对象,是GIS几何应用中非常典型的需求。 在PostgreSQL中通过建立GiST索引可以加速这类判断,然而,建立索引就够了吗? 很多时候建立索引是不够的,性能没有到达巅峰,如果要更低的延迟,更少的CPU开销,还有什么优化手段呢? 实际上我以前写过一篇类似的文章,讲的是BTr...

PostgreSQL 独立事件相关性分析 二 - 人车拟合

2 minute read

背景 独立事件相关性分析是一件很有意思的事情,例如 探探软件的擦肩而过功能点,在不同时空与你擦肩而过的人。 舆情分析。 商品最佳销售组合。 安全系统中的人车拟合,对时空数据进行处理,用于司机、乘客、车辆的拟合。 人车拟合 1、建立表结构 人 create table u_pos ( id i...

[未完待续] PostgreSQL NVM Logging

less than 1 minute read

背景 https://www.pgcon.org/2016/schedule/attachments/430_Non-volatile_Memory_Logging.pdf 《Non-volatile Memory (NVM) Logging》 digoal’s 大量PostgreSQL文章入口

[未完待续] PostgreSQL FDW 开发DEMO

less than 1 minute read

背景 https://www.pgcon.org/2016/schedule/attachments/418_pgfdw_and_writable_fdw 《FDWs – how to use and write》 digoal’s 大量PostgreSQL文章入口

[未完待续] PostgreSQL 培训

less than 1 minute read

背景 http://etutorials.org/SQL/Postgresql/Part+I+General+PostgreSQL+Use/ https://pgexperts.com/services/training/ https://www.2ndquadrant.com/en/training/co...

如何评估一款数据库产品 - 18项火眼金睛

less than 1 minute read

背景 不论你是投资方、还是CTO或者架构师,如果你需要在非常核心的场合选择一款数据库产品,或者你要投资一个数据库产品或团队,本文一定会为你提供一个很好的指导。 现在的数据库分类在dbranking上已经分得很细: https://db-engines.com/en/ranking Complete rank...

PostgreSQL 在铁老大订单系统中的schemaless设计和性能压测

7 minute read

背景 数据的流动孕育数据生态,在很多大型系统中,业务系统之间的数据流动是很常见的事情。 例如铁大哥的订单数据的流动,可能带动很多围绕订单的业务需求。比如说订单查询: 1、按用户查询,返回用户30天内的所有订单。 2、按坐席和乘车日期查询,返回这个坐席的售出记录,看看有没有退票、有没有中途票可以加塞等。 以...

PostgreSQL 10 PostGIS 兼容性 FIX

2 minute read

背景 PostGIS 的PG 10有一点兼容性问题: 创建extension时报错如下: ERROR: set-returning functions are not allowed in CASE LINE 6: split_part((...

PostgreSQL Oracle 兼容性 之 USERENV

3 minute read

背景 USERENV 是Oracle 用来获取当前会话变量的函数。官方是这么介绍的: https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions184.htm#SQLRF06117 Describes the current session...

PostgreSQL Oracle 兼容性 之 NUMTODSINTERVAL

less than 1 minute read

背景 NUMTODSINTERVAL 是Oracle数字转时间间隔类型的函数。 例子: SELECT NUMTODSINTERVAL(100, 'day') FROM dual; SELECT NUMTODSINTERVAL(100, 'HOUR') FROM dual; SELECT N...

PostgreSQL 空间、多维 序列 生成方法

6 minute read

背景 数据库的一维序列是很好理解的东西,就是在一个维度上自增。 那么二维、多维序列怎么理解呢?显然就是在多个维度上齐头并进的自增咯。 二维序列 以二维序列为例,应该是这样增长的: 0,0 0,1 1,0 1,1 1,2 2,1 2,2 ... 那么如何生成以上二维序列呢?...

PostgreSQL 事件触发器应用 - DDL审计记录 + 异步通知(notify)

9 minute read

背景 DDL语句的审计是非常重要的,目前PG的DDL审计记录在日志文件中。不便于查看。 为了让DDL事件记录到表中,方便查看,我们可以通过事件触发器来达到这个效果。 结合PostgreSQL的notify, listen的消息通道功能,在DDL执行后可以立即通知到监听对应CHANNEL的程序。 事件触发器审...

PostgreSQL汉字转拼音的函数

1 minute read

背景 在有些应用中,可能会有对拼音搜索、拼音首字母搜索、中文搜索共存的需求。在PostgreSQL中如何实现这个需求呢? 关键是函数转拼音和首字母,方法很简单,将映射关系存入数据库。创建一个函数来转换。 《PostgreSQL汉字转拼音或拼音首字母的应用》 映射文件请到以上文章的末尾下载。 方法 1、创建...

经营、销售分析系统DB设计之PostgreSQL, Greenplum - 共享充电宝 案例实践

21 minute read

背景 共享充电宝、共享单车、共享雨伞,共享女朋友^|^,共享汽车,。。。 共享经济最近几年发展确实非常迅猛。 共享必定涉及被共享对象的管理、会员的管理等,实际上也属于一种物联网系统。 本文以共享充电宝的场景为例,分享一下共享充电宝的经营分析、销售管理系统的后台数据库的设计。(老板关心的是整体销售的业绩,以及各...

PostgreSQL Oracle兼容性之 session_id

1 minute read

背景 数据库有会话的概念,用于区分每一个会话。会话ID是会话的唯一标识。 PostgreSQL的基于进程的模型,每个连接会分配一个backend process,因此使用process id也可以作为会话ID来使用。 postgres=# select pg_backend_pid(); pg_back...

PostgreSQL GUC 参数级别介绍

17 minute read

背景 在添加GUC参数时,需要注意你添加的参数属于什么类别的参数。 例如如果你想让普通用户能随时修改它,那么你需要将参数级别设置为PGC_USERSET。如果你想让超级用户能在线修改它,那么你需要将它设置为PGC_SUSET。如果你想让它能够在修改配置参数并通过信号生效,那么需要设置为PGC_SIGHUP。 ...

PostgreSQL 规格评估 - 微观、宏观、精准 多视角估算数据库性能(选型、做预算不求人)

14 minute read

背景 在提预算时必不可少的环境是评估需要多少硬件。 通常会要求业务方提供一些数据,例如用户数、PV、UV等。但是这种评估纯靠经验,方法非常的粗糙也不准确。 那么到底如何评估需要多少硬件、或者说需要什么样规格的硬件来支撑你未来的业务呢? 对于PostgreSQL这个数据库产品来说,我介绍一下三种评估方法: ...

空间 时间 对象 圈人 + 透视 - 暨PostgreSQL 10与Greenplum的对比和选择

18 minute read

背景 通常一个人的常驻地可能会包括:家、儿女家、双方父母家、情人、异性伴侣家、公司、商圈若干等。 通过对这些数据的运营,可以实现很多业务需求。例如: 1、寻人 《海量用户实时定位和圈人 - 团圆社会公益系统(位置寻人\圈人)》 2、线下广告投放人群圈选,选址,商圈人群画像。 《数据寻龙点穴(空间聚集分析...

画像圈人 + 人群行为透视

3 minute read

背景 本文讲的是这样的场景:画像圈人和人群行为透视的结合。 数据量 标签数 5W+ 用户数 10W+ 用户行为数据 10亿+ 业务目标:根据标签圈出用户群体,对这些用户的行为进行透视分析。 第一步,圈人 第一步是圈出用户群体,如果这一步的数据量非常庞大,则可以参考如下...

如何用一个回形针换一栋别墅 - openBarter (古人的物物交换市场) 类撮合交易系统

1 minute read

背景 很久以前有一则这样的新闻:一个男孩用一个回形针,换回了一套别墅,他是怎么做到的呢? 先不管他是怎么做到的,这让我联想到了古人物物交换的场景,没错古人还没有发明货币之前,都是通过物物交换的方式来得到其他人的东西的。(但是这样效率实在太低了)。另外,现在的证券交易也与之类似,只是更加的简化了的交换系统。 ...

海量用户实时定位和圈人 - 团圆社会公益系统(位置寻人圈人)

3 minute read

背景 老人、儿童是最容易走丢的人群,一定要看好老人和小孩,但是万一走丢了怎么办呢? 阿里有一个公益系统,团圆,这个系统是用来帮助发布走丢人群信息的,公安通过发布的走丢人的照片,最后一次的位置信息,向社会发布。 通过公益平台的合作伙伴(例如运营商、购物软件等)可以向最后一次走丢人士出现的位置附近的人推送寻人启事...

PostGIS 点面叠加视觉判断输出

1 minute read

背景 在新零售、快递等行业,有大量的点数据(例如包裹位置、快递员位置、仓库位置等),同时有大量的面数据(如小区,商圈,写字楼等)。 如何判断实时的正在配送的包裹落在哪个面呢?并且将之联系起来。 这个从视觉角度来思考,非常简单。 例如有一个地图,将其划分为若干个面(例如前面提到的小区)。 然后有一些小点...

Greenplum vacuum ao表和heap表的区别

less than 1 minute read

背景 在Greenplum中删除、更新数据记录时,会产生新的tuple版本,老的版本通过行头部标记:为已删除以及被哪个事务删除的。 因此频繁的更新后,或者批量的删除数据后,需要回收那些旧的版本。 通过vacuum、vacuum full、alter table redistribute命令,可以回收垃圾。 ...

透过postgrespro看PostgreSQL的附加功能

4 minute read

背景 Postgrespro是俄罗斯的一家数据库公司,创始人OLEG是PostgreSQL社区的核心成员之一,一名在俄罗斯莫斯科国立大学,斯特恩伯格天文研究所做科学研究的天文学家。同时也担任Postgres Professional公司的首席执行官。也是一位登顶过珠峰的人。 这里是他的专访 https:/...

PostgreSQL、Greenplum 日常监控 和 维护任务 - 最佳实践

21 minute read

背景 Greenplum的日常监控点、评判标准,日常维护任务。 展示图层 由于一台主机可能跑多个实例,建议分层展示。 另外,即使是ON ECS虚拟机(一个虚拟机一个实例一对一的形态)的产品形态,实际上也建议分层展示,以示通用性。 主机级图层 1、全局 2、以集群分组 展示图形 1、饼图(正常、警告、严...

PostgreSQL 连接串URI配置(libpq兼容配置)

1 minute read

背景 连接数据库是最基本的操作之一,PostgreSQL libpq支持URI的连接模式,格式如下: postgresql://[user[:password]@][netloc][:port][,...][/dbname][?param1=value1&...] 例子 postgresql:...

秒级任意维度分析1TB级大表 - 通过采样估值满足高效TOP N等统计分析需求

9 minute read

背景 估值计算是统计学的常用手段。因为数据量庞大,求精确数值需要耗费巨大的资源,而统计分析并不要求完全精确的数据,因此估值计算是一种折中的方法,广泛应用于统计分析场景。 PostgreSQL是一个功能强大的数据库,在估值统计方面,提供了很多方法。 1、PostgreSQL中,求估计的UV,增量UV等(即cou...

地理坐标系(球面坐标系)和投影坐标系(平面坐标系)

less than 1 minute read

背景 《PostGIS 坐标转换(SRID)的边界问题引发的背景知识 - ST_Transform》 一文,介绍了使用某个坐标系时,计算国内某个点到某个点的距离出现了负数。 背景知识和坐标系有关。 什么是地理坐标系,什么是投影坐标系? 参考此文: http://www.cnblogs.com/jetz/...

PostgreSQL vs Greenplum Hash outer join hash表的选择

5 minute read

背景 数据分析、大表JOIN、多表JOIN时,哈希JOIN是比较好的提速手段。 hash join会首先扫描其中的一张表(包括需要输出的字段),根据JOIN列生成哈希表。然后扫描另一张表。 hash join介绍 https://www.postgresql.org/docs/10/static/planne...

PostgreSQL 黑科技 - 空间聚集存储, 内窥GIN, GiST, SP-GiST索引

6 minute read

背景 单身汉的房间可能是这样的,凌乱得很。 可能会有人表示不服,不是应该这样的吗? 实际上大多数情况下数据库存储也可能是这样的,数据凌乱。索引的目的是在凌乱的数据中找到目标数据,但是从凌乱的数据中按索引顺序扫描一批数据,会有什么后果呢: 没错,IO放大,我在以前的文章中有详细介绍过其原理。 《...

PostgreSQL 10 黑科技 - 自定义统计信息

4 minute read

背景 PostgreSQL和Oracle一样,优化器是基于成本的估算。 成本估算中很重要的一个环节是估计每个执行节点返回的记录数。 例如两张表JOIN的时候,如果走HASH JOIN那么需要选择记录数少的那个作为哈希表。 又比如求多个字段的group by,评估返回多少条记录给上层节点。 对于基于单列统计...

PostgreSQL cube 插件 - 多维空间对象

6 minute read

背景 CUBE是一个多维数据类型,支持两种多维类型:多维POINT、区间(左下+右上)。以及这些几何对象的几何特性搜索和计算(方位搜索、距离计算),这些搜索都支持GiST索引。 我们甚至可以将多个字段合并成多维POINT,实现对大量数据的高效空间聚集、空间计算。 语法 Ex...

音视图(泛内容)网站透视分析 DB设计 - 阿里云(RDS、HybridDB) for PostgreSQL最佳实践

10 minute read

背景 日常生活中,人们使用最多的除了社交类网站、购物网站,估计就是音频、视频、图文信息类内容网站了。 视频网站,已经渗透到各种终端,除了喜闻乐见的手机,还包括移动终端、电脑、盒子、电视、投影仪等。有设备属性、会员属性、渠道属性等。 内容运营是非常重要的环节,而透视则是运营的重要武器。 业务需求 1、生成设...

泛电网系统 海量实时计算+OLTP+OLAP DB设计 - 阿里云(RDS、HybridDB) for PostgreSQL最佳实践

2 minute read

背景 电网系统是一个关系民生,又非常典型的传统系统,虽然传统,量可不小。在互联网化(物联网化)的今天,有很多值得借鉴和思考的点供给其他相关系统参考。 每个省份大概有亿级户电表,最大的地市可能有千万户级别。 以往我们电费是怎么交的呢?我们小区是两个月交一次,也就是说先消费,再付款的方式。这么说起来电网真的是很仁...

通过空间思想理解GiST索引的构造

1 minute read

背景 可以支持空间检索的GiST索引的数据结果到底是什么样的呢? 本文为以下两篇文档的增补: 《Greenplum 空间(GIS)数据检索 B-Tree & GiST 索引实践 - 阿里云HybridDB for PostgreSQL最佳实践》 《PostGIS空间索引(GiST、BRIN、R-Tr...

Greenplum 空间(GIS)数据检索 b-tree & GiST 索引实践 - 阿里云HybridDB for PostgreSQL最佳实践

4 minute read

背景 气象数据、地震数据、室内定位、室外定位、手机、车联网、还有我们最喜欢的“左划不喜欢、右划喜欢”,越来越多的位置属性的数据。将来会越来越多。 基于GIS的数据分析、OLTP业务也越来越受到决策者的青睐,例如商场的选址决策,O2O的广告营销等。有很多基于多边形、时间、用户对象属性过滤的需求。 阿里云Hybr...

PostgreSQL BRIN索引的pages_per_range选项优化与内核代码优化思考

8 minute read

背景 BRIN是PostgreSQL 9.5新增的块级索引接口,存储了被索引字段在块级别的边界值(最大值、最小值)以及其他统计信息。 当需要对某个字段进行检索时,需要扫描整个BRIN索引(这个是BRIN索引内核层面将来值得优化的点)。然后跳过不符合条件的HEAP PAGE,扫描复合条件的HEAP PAGE。实现...

PostgreSQL 增量备份集的有效恢复位点

5 minute read

背景 PostgreSQL支持PITR即时间点恢复,为了支持时间点恢复,至少需要一次全量备份,然后需要归档日志。 这句话描述可能不够清晰,至少需要哪些归档日志,全量备份的时间点有没有要求呢? 本文要解答这个问题。 什么是全量备份 全量备份指的是对数据库的$PGDATA以及所有表空间文件(包括全局数据文件、事...

时序业务,求最新值(从7秒到7毫秒的优化之旅) - 阿里云RDS PostgreSQL最佳实践

5 minute read

背景 在很多场景中,都会有数据合并、清洗的需求。 例如: 1、记录了表的变更明细(insert,update,delete),需要合并明细,从明细中快速取到每个PK的最新值。 2、有很多传感器,不断的在上报数据,要快速的取出每个传感器的最新状态。 对于这类需求,可以使用窗口查询,但是如何加速,如何快速的取...

万亿级电商广告 - brin黑科技带你(最低成本)玩转毫秒级圈人(视觉挖掘姊妹篇) - 阿里云RDS PostgreSQL, HybridDB for PostgreSQL最佳实践

3 minute read

背景 单机支持一万亿(100TB级)数据的毫秒级圈人,怎么做到?拥有PostgreSQL即可。 本文的应用场景来自电商的按条件圈人的广告业务。我在另外两篇文档中,分别使用了 空间数据库的视觉挖掘特性、PostgreSQL的GIN倒排索引 两种方法来实现毫秒级别的圈人。 如下: 《视觉挖掘与PostGIS空间...

Greenplum segment级锁问题排查方法 - 阿里云HybridDB for PostgreSQL最佳实践

5 minute read

背景 Greenplum(GPDB)是一个分布式数据库,分布式数据库的锁管理比单机更加复杂。例如在加锁时,需要对所有节点加锁(包括MASTER和所有的SEGMENT节点),在释放锁时,则需要释放所有节点的锁。 如果在释放过程中,MASTER的锁释放了,而SEGMENT锁没有释放,会造成什么问题呢? 不用说,会...

Greenplum 内存与负载管理(resource queue)最佳实践

2 minute read

背景 Greenplum是一个重计算和重资源的MPP数据库,可谓有多少资源就能消耗多少资源,带来的好处是处理速度变快了,坏处就是容易用超。 CPU、网络、硬盘用超的话,关系不大,因为大不了就是到硬件瓶颈,但是内存用超的话会带来较大的负面影响,例如操作系统OOM用户进程,导致数据库崩溃等。 如果要达到非常强壮的...

数据寻龙点穴(空间聚集分析) - 阿里云RDS PostgreSQL最佳实践

less than 1 minute read

背景 最近鬼吹灯热播,胡八一的《十六字阴阳风水秘术》到底是什么武功秘籍?寻龙点穴又是什么?别问我,不知道。 PS:以下截取自互联网。 寻龙点穴是风水学术语。古人说:三年寻龙,十年点穴。意思就是说,学会寻龙脉要很长的时间,但要懂得点穴,并且点得准则难上加难,甚至须要用“十年”时间。 但是,若没正确方法,就是...

PostGIS空间索引(GiST、BRIN、R-Tree)选择、优化 - 阿里云RDS PostgreSQL最佳实践

8 minute read

背景 空间数据的搜索需求通常包括: 1、平面、三维、多维对象 几何相交、不相交、相邻。 2、平面、三维、多维对象的方位判断(相交或严格在左边、右边、上边、下边),类似数值的大于、小于、大于等于、小于等于。 3、平面、三维、多维对象 包含 另一个对象 4、平面、三维、多维对象 等于 另一个对象 5、平面、...

Greenplum 列存储加字段现象 - AO列存储未使用相对偏移

1 minute read

背景 Greenplum的Append only table支持更新、删除。通过什么支持呢?bitmap文件,标记被删除的行。 因此在更新,删除后,数据可能膨胀。 另一方面,列存储每列一个文件,同一行通过偏移对应起来。例如INT8的两个字段,通过偏移很快能找到某一行的A列对应的B列。 接下来谈谈加字段,在加...

Greenplum 行存、列存,堆表、AO表的原理和选择

8 minute read

背景 Greenplum支持行存和列存,支持堆表和AO表,那么他们有什么不同,如何选择呢? 行存和列存的原理 1、行存,以行为形式组织存储,一行是一个tuple,存在一起。当需要读取某列时,需要将这列前面的所有列都进行deform,所以访问第一列和访问最后一列的成本实际上是不一样的。 在这篇文档中,有defo...

PostgreSQL 单列组合查询优化 - 多个多边形查询优化

2 minute read

背景 在某些空间数据查询需求中,有一些这样的请求,例如查找与某些多边形中的任意一个相交的空间对象。 比如在菜鸟、新零售的业务中,查询某几个商场多边形,或者某几个小区多边形内覆盖的点。 SQL写法可能是这样的 select geo_point,* from table where ST_Within(geo_...

Greenplum 列存表(AO表)的膨胀、垃圾检查与空间收缩(含修改分布键)

5 minute read

背景 Greenplum支持行存储(堆存储)与AO存储,堆存储的垃圾回收和膨胀检测方法请参考: 《如何检测、清理Greenplum膨胀、垃圾 - 阿里云HybridDB for PG最佳实践》 对于AO存储,虽然是appendonly,但实际上GP是支持DELETE和UPDATE的,被删除或更新的行,通过BI...

手工清理 cgroup中的page cache

less than 1 minute read

背景 原文 http://blogs.360.cn/360xitong/2013/05/02/mem-cgroup%E7%9B%AE%E5%BD%95%E6%97%A0%E6%B3%95%E6%B8%85%E7%90%86%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90/ Cgroup...

如何检测、清理Greenplum膨胀、垃圾(含修改分布键) - 阿里云HybridDB for PG最佳实践

8 minute read

背景 Greenplum通过多版本支持数据的删除和更新的并发和回滚,在删除数据时(使用DELETE删除),对记录的头部xmax值进行标记。在删除记录时,对记录的头部进行标记,同时插入新的版本。 这一就会导致一个问题,如果用户经常删除和插入或更新数据,表和索引都会膨胀。 PostgreSQL是通过HOT技术以及...

解读2017-08-10发布的几个安全漏洞

4 minute read

背景 PostgreSQL 社区于08-10发布了新版本,修复了三个安全漏洞。 https://www.postgresql.org/about/news/1772/ CVE-2017-7546: Empty password accepted in some authentication method...

PostgreSQL on ECS多云盘的部署、快照备份和恢复

11 minute read

背景 随着阿里云云盘的发展,云盘的性能已经越来越好了。IOPS可以做到十万以上,读写吞吐也超过1GB/s了。相信随着网络的发展,SSD云盘IOPS突破40万,读写吞吐突破4GB/s也不远了。 不过这里的IOPS和吞吐是指并发的IO能力,单次IO的延迟与本地还是不能比(将来RDMA网络也许能解决这个问题)。 P...

解密上帝之手 - 阿里云HDB for PostgreSQL数据库metascan特性(存储级、块级、batch级过滤与数据编排)

10 minute read

背景 数据也有生辰八字,你信吗?列与列之间,行与行之间,元素与元素之间如何相生相克?查询慢?不要信什么这都是上天注定的,如何给数据改运?看完本文,你也可以做到。 一份天赋,九份努力。缘分天注定。命由天定。又有说我命由我不由天的。看样子中国古人对先天注定的东西研究还挺透彻,看的还挺开,但是也有通过后天努力,或...

PostGIS 空间数据学习建议

2 minute read

背景 我写过一些GIS的案例和文档,但是为了测试方便,文中大量使用了内置的几何point类型,并非GIS类型。 包括一些空间函数、空间数据的构建使用可能不是特别规范。 收到来自PostgreSQL社区GIS领域朋友的建议,为了防止给学习GIS的同学带来误导,请参考如下建议。 感谢这位朋友。 相关文章 《...

PostgreSQL SQL防火墙

4 minute read

背景 SQL注入通常是业务层做的事情,例如使用绑定变量,使用关键字过滤等手段,避免被SQL注入。 另一方面,数据库也有类似的功能,例如SQL防火墙。 PostgreSQL内置了很多的HOOK,这些HOOK可以方便开发者加入一些功能,例如在SQL parser阶段的HOOK,可以加入一些SQL统计,SQL篡改,...

PostgreSQL 读写分离代理 - Crunchy Proxy(base on golang)

5 minute read

背景 数据库管理员有几个非常常见的问题需要解决:连接池、HA、容灾、读写分离、sharding、MPP、备份、恢复。 1、虽然很多框架都支持本地连接池,但是别忘了APP大多数是无状态的,通常在搞活动前还可能扩容,增加APP的组数,为了防止雪崩或者连接不足,建议中间还可以加一层连接池。例如pgpool, pgbo...

[招聘] [探探] PostgreSQL DBA

less than 1 minute read

招聘 中高级PostgreSQL DBA 公司名称 探探 公司人数 公司简介 https://tantanapp.com/ 公司网站 https://tantanapp.com/ 坐标 北京,朝阳 职位 中高级PostgreSQL DBA 岗位描述 配合产品、开发团队进行数据库设计和调优,对数据库整...

记录动态格式化输出(ToB日志转换业务) - 阿里云RDS PostgreSQL, HybridDB for PostgreSQL最佳实践

6 minute read

背景 有一些业务需要将数据归类动态的输出,比如一些公共日志服务,所有用户的日志都被统一的按格式记录到一起,但是每个最终用户关心的字段都不一样,甚至每个用户对数据转换的需求都不一样。 比如这个业务: 《日增量万亿+级 实时分析、数据规整 - 阿里云HybridDB for PostgreSQL最佳实践》 ...

菜鸟末端轨迹 - 电子围栏(解密支撑每天251亿个包裹的数据库) - 阿里云RDS PostgreSQL最佳实践

6 minute read

背景 菜鸟末端轨迹项目中涉及的一个关键需求,面面判断。 在数据库中存储了一些多边形记录,约几百万到千万条记录,例如一个小区,在地图上是一个多边形。 不同的快递公司,会有各自不同的多边形划分方法(每个网点负责的片区(多边形),每个快递员负责的片区(多边形))。 用户在寄件时,根据用户的位置,查找对应快递公司负...

(新零售)商户网格化(基于位置GIS)运营 - 阿里云RDS PostgreSQL、HybridDB for PostgreSQL最佳实践

11 minute read

背景 伟大的马老师说: “纯电商时代很快会结束,未来的十年、二十年,没有电子商务这一说,只有新零售这一说,也就是说线上线下和物流必须结合在一起,才能诞生真正的新零售” 线上是指云平台,线下是指销售门店或生产商,新物流消灭库存,减少囤货量。 电子商务平台消失是指,现有的电商平台分散,每个人都有自己的电商平台,...

plpgsql 编程 - JSON数组循环

less than 1 minute read

背景 PostgreSQL的plpgsql编程语言和Oracle PL/SQL编程语言类似,是功能很强大的数据库编程语言。 JSON是PG支持的非结构化类型,那么如何在PLPGSQL中LOOP JSON数组呢? https://www.postgresql.org/docs/9.6/static/plpgs...

[招聘] [鲁邦通] PostgreSQL DBA

less than 1 minute read

招聘 PostgreSQL DBA 公司名称 鲁邦通 公司人数 公司简介 http://www.robustel.com.cn/about/corporate-porfile/ 公司网站 http://www.robustel.com.cn/ 坐标 广州 职位 PostgreSQL DBA 岗位描述...

[招聘] [HelloBike] PostgreSQL DBA

less than 1 minute read

招聘 PostgreSQL DBA https://m.lagou.com/jobs/2903568.html?source=weixin&m=1&from=singlemessage&isappinstalled=0 公司名称 hellobike 公司人数 公司简介 关于我们 ...

小微贷款、天使投资(风控助手)业务数据库设计(图式搜索图谱分析) - 阿里云RDS PostgreSQL, HybridDB for PostgreSQL最佳实践

4 minute read

背景 贷款是银行的主营业务之一,但是并不是只有银行能提供贷款,实际上资金雄厚的公司都有能力提供贷款(比如保险行业、资源垄断型企业等)。 除了放贷,我们常说的天使投资、A轮B轮啥的,也是类似的场景,凭什么投你,背后如何决策也需要决策系统的支撑。 与贷款相反的是吸金类业务,比如我们现在发现越来越多的理财产...

医疗大健康行业案例(老人健康实时监测和预警) - 阿里云RDS PostgreSQL最佳实践

4 minute read

背景 人的身体和机器差不多,随着年龄的增长,器官逐渐老化,毛病也会越来越多,注意保养是一方面,另一方面也需要注意实时的监测和发出预警,在问题萌芽状态就解决掉。 以往我们检查身体得去医院或专业的体检机构,很麻烦,随着科技的进步,一些健康指标的监测变得更加方便,例如手环也是一个普及很快的监控检测终端(目前已能够检测...

打造云端流计算、在线业务、数据分析的业务数据闭环 - 阿里云RDS、HybridDB for PostgreSQL最佳实践

3 minute read

背景 水的流动汇成江河大海,孕育生命,形成大自然生态。数据流动,推进社会进步,拓展业务边界。 《从人类河流文明 洞察 数据流动的重要性》 以某淘系业务案例展开,看看用户如何利用阿里云RDS PostgreSQL,HybridDB for PostgreSQL,海量对象存储OSS,打造一个从流计算到在线业务,再...

机票业务性能优化案例 - 阿里云RDS PostgreSQL最佳实践

4 minute read

背景 机票业务的某个模块,数据量10亿+,写、更新、删除量较低。根据KEY查询一些数据,每次查询返回1万条左右的记录。 就是这样简单的需求,业务方发现读成为了巨大的瓶颈,每次返回1万条,100个并发请求,每秒就是100万条(500MB左右),主要的瓶颈: 1、网络是个较大的开销。 2、不同KEY的数据可能是...

全文检索 不包含 优化 - 阿里云RDS PostgreSQL最佳实践

5 minute read

背景 PostgreSQL内置了GIN索引,支持全文检索,支持数组检索等多值数据类型的检索。 在全文检索中,不包含某个关键字能用到索引吗? 实际上GIN是倒排索引,不包含某个关键字的查询,实际上是跳过主tree上面的TOKEN的扫描。 只要被跳过的TOKEN包含了大量数据,那么就是划算的。PostgreSQ...

Greenplum 性能评估公式 - 阿里云HybridDB for PostgreSQL最佳实践

3 minute read

背景 通常评估一个数据库的性能,可以选择工业标准测试,或者根据业务模型,建模进行测试。 例如PostgreSQL pgbench支持的tpc-b测试,以及自定义模型测试。 benchmarksql支持的tpc-c测试。 gp_tpch支持的tpc-h测试等等。 参考文档如下 《TPC-H测试 - Pos...

阿里云RDS金融数据库(三节点版) - 案例篇

less than 1 minute read

背景 土豆哪里去挖? 土豆郊区去挖。 一挖一麻袋? 一挖一麻袋。 挖掘机不仅是城市建设的必备法宝,居然也是挖土豆利器。 但是科技行业一定不喜欢挖掘机,经常会听说xx互联网软件故障提到“光纤被挖断”,导致XX机房故障几数时。 这和数据库有什么关系呢?当然有,一些企业在业务层面可能做到了多机房,多活的...

时间、空间、对象多维属性 海量数据任意多维 高效检索 - 阿里云RDS PostgreSQL最佳实践

14 minute read

背景 人类或者其他对象的活动产生了海量的时间、空间数据,如果有科技能实现回到过去,过去的世界状态会是什么样的? 实际上这个需求在数据库中也存在。 对象数据分类 一类为静止数据(相对静止,比如建筑物),一类为动态数据(比如人类活动,物联网传感器的活动)。 搜索需求分类 1、时空快照数据搜索 我们可以这样...

车联网案例,轨迹清洗 - 阿里云RDS PostgreSQL最佳实践 - 窗口函数

3 minute read

背景 车联网中一个非常典型的场景是采集车辆的行驶轨迹,通常来说车辆的轨迹并不会实时上报,可能会堆积若干条轨迹记录,或者间隔多少时间上报一次。 一个典型的数据结构如下 (car_id, pos geometry, crt_time timestamp) 车辆在行驶,行驶过程中会遇到堵车,红绿灯,那么上报...

分区索引的应用和实践 - 阿里云RDS PostgreSQL最佳实践

1 minute read

背景 当表很大时,大家可能会想到分区表的概念,例如用户表,按用户ID哈希或者范围分区,拆成很多表。 又比如行为数据表,可以按时间分区,拆成很多表。 拆表的好处: 1、可以将表放到不同的表空间,表空间和块设备挂钩,例如历史数据访问量低,数据量大,可以放到机械盘所在的表空间。而活跃数据则可以放到SSD对应的表空...

云端海量任务调度数据库最佳实践 - 阿里云RDS PostgreSQL案例

3 minute read

背景 任务调度系统中的任务状态管理,通常会用到数据库来存储任务调度的过程状态,控制任务的锁等。 《advisory lock 实现高并发非堵塞式 业务锁》 如果是小量任务,是挺好实现的,但是每小时处理几十亿或者几亿的任务,如何设计这样的任务状态管理数据库呢? 挑战 对于一个面向多个用户的任务调度平台(例如云...

advisory lock 实现高并发非堵塞式 业务锁

5 minute read

背景 某些业务会利用数据库来作为一种可靠的锁,例如任务调度系统,或者其他需要可靠的锁机制的系统。 通常他们可能会使用数据库的一条记录来实现锁的SLOT和状态信息。 例如 create table lock_test ( tid int primary key, -- 任务ID state...

SRID (空间引用识别号, 坐标系)

1 minute read

背景 转自互联网 http://www.baike.com/wiki/srid http://www.cnblogs.com/jackdong/archive/2010/12/20/1911558.html https://en.wikipedia.org/wiki/Geographic_coordinat...

人分九等,数有阶梯 - PostgreSQL 阶品(颗粒)分析函数width_bucket, kmean应用

9 minute read

背景 从古至今,现实社会中,到处充满了等级划分,例如东汉史学家、文学家班固《汉书》《古今人表》把人分九等。九品量表”之中,分为上(上智).中(中人).下(下愚)三等。在每个等级中又分为:上上.上中.上下,中上.中中.中下,以及下上.下中和下下三等。 现代的一些见解: 第一等:圣人。已参破红尘却仍然悲天悯人,已...

TPC-H测试 - PostgreSQL 10 vs Deepgreen(Greenplum)

4 minute read

背景 通常一家企业除了有在线业务处理的数据库、也会有数据分析型的数据库。 很长一段时间以来,数据库产品也是分场景设计的,例如MySQL就是非常典型的TP型数据库。Greenplum则是非常典型的AP型数据库。 Oracle介于两者之间,具备典型TP型数据库的能力,同时还具备小型的数据分析的能力(例如通过并行查...

Oracle业务适合用PostgreSQL去O的一些评判标准

5 minute read

背景 从功能、性能、SQL兼容性几个方面,输出一些Oracle业务适合用PostgreSQL替代的一些指标。 功能指标 如果业务中用到了这些特性,则非常适合使用PostgreSQL。 1、业务使用的数据类型中出现 IP地址、GIS、数组、范围、全文检索、大对象、字节流、比特流、枚举、几何、自定义复合、UUI...

阿里云RDS金融数据库(三节点版) - 性能篇

8 minute read

背景 终于到了性能篇,三节点同时满足了企业对数据库的可用性、可靠性的要求,那么性能如何呢? 提到性能测试,我有几点一定要说明一下,很多朋友对性能的理解可能有偏差,那么如何评判性能的好坏呢? 1、首先要明确测试的环境,包括数据库主机(主要包括CPU、内存、网卡,如果你的数据库能用上FPGA、GPU的计算能力,还...

PostgreSQL unknown事务的处理方法

less than 1 minute read

背景 数据库的事务是原子操作,要么成功,要么失败。但是实际上在客户端的视角,可能有第三种状态:unknown状态。 当客户端提交事务结束(rollback , commit , prepare xact , rollback pxact , commit pxact)的请求后,数据库收到请求,数据库可能执行失败...

一张表有且只有一条记录(续) - 支持插入,并且更新、删除都只作用在最后一条记录上, 查询也只时间最大的记录。

3 minute read

背景 之前写过一篇文档,介绍如何控制某张表有且只有一条记录。 《如何实现一张表有且只有一条记录 implement PostgreSQL table have one and only one row》 接下来这个需求与之类似,一张表好像有且只有一条记录,要求这样: 1、支持插入、更新、删除、查询操作, ...

PostgreSQL 10 流式物理、逻辑主从 最佳实践

6 minute read

背景 流复制起源 PostgreSQL 自从2010年推出的9.0版本开始,支持流式物理复制,用户可以通过流式复制,构建只读备库(主备物理复制,块级别一致)。流式物理复制可以做到极低的延迟(通常在1毫秒以内)。 同步流复制 2011年推出的9.1版本,支持同步复制,当时只支持一个同步流复制备节点(例如配置了3个...

阿里云RDS金融数据库(三节点版) - 理论篇

2 minute read

背景 《阿里云RDS金融数据库(三节点版) - 背景篇》说明了为什么需要推出金融级数据库的三节点版本,以及三节点引入的一个世界难题 - 拜占庭将军问题。 Lamport 在论文 《The Part-Time Parliament》中提出了一种算法Paxos,并使用了大量的数学公式论证了通过Paxos算法解决拜占...

影响或控制PostgreSQL垃圾回收的参数或因素

3 minute read

背景 哪些参数或因素将影响或控制PostgreSQL的垃圾回收呢? 参数 全局参数 1、控制VACUUM命令的睡眠时间,当vacuum的阶段性COST大于vacuum_cost_limit时,睡眠一段时间后继续。 vacuum_cost_delay = 0 # 0-100...

阿里云RDS金融数据库(三节点版) - 背景篇

less than 1 minute read

背景 提到金融级数据库,大家可能不约而同的会想到Oracle,DB2等商业数据库。但是随着开源数据库的发展,开源数据库正在逐渐成为数据库产业的核心,比如MySQL、PostgreSQL数据库 ,已经深入阿里、平安科技、苏宁、高德、国家电网(还有很多)的核心。可以看到,不管是MySQL还是PostgreSQL,有越...

[转载]Raft 为什么是更易理解的分布式一致性算法

1 minute read

背景 原文地址 http://www.cnblogs.com/mindwind/p/5231986.html 原文写得很赞,很好理解,不过有一些细节(例如幂等,例如和数据库结合可能需要考虑的点)我做了一些简单补充。 正文 一致性问题可以算是分布式领域的一个圣殿级问题了,关于它的研究可以回溯到几十年前。 拜占...

大规模数据存储集群数据存放的设计,分布式shardid的生成 - 如何指定范围随机数, 分组随机数

2 minute read

背景 在一些分布式数据库系统中,通常会有多个数据节点,用户的数据分布策略通常有一致性哈希、按列哈希、随机分布等。 除了随机分布,其他的分布方法数据和数据节点是一对一的关系。 上当节点数变得特别特别多的时候,数据如果依旧按照全局进行哈希分布,可能会带来一个问题,例如节点数到达1万个,一张1亿的表,会分布到1万个...

从人类河流文明 洞察 数据流动的重要性

less than 1 minute read

背景 人类社会文明源起于河流文化,人类社会发展积淀河流文化,河流文化生命推动社会发展。 河流文化作为一种人类的文化、文明类型,被人们认知已经经历了很长的历史时期,人们把其称为“大河文明”,尼罗河、幼发拉底河、和底格里斯河流域的两河文明、印度河文明、黄河文明。 这些大河文明与人类文明息息相关,是人类文明的源泉...

PostgreSQL 金融类账务流水数据快照分析 案例分享

3 minute read

背景 在金融行业中,或者一些含有支付业务,往来对账业务,虚拟货币业务等业务的场景中,账户系统的变更流水是一份很大的数据。 为什么需要这份流水呢?直接保留账户的最终状态不就好了吗? 实际上流水数据就是日志数据,它记录了用户的每一笔账户变动,流水数据可以作为审计数据,也可以用于数据分析,还可用于数据的追溯(例如交...

PostgreSQL 海量时序数据(任意滑动窗口实时统计分析) - 传感器、人群、物体等对象跟踪

6 minute read

背景 在现实生活中,经常会有聚集分析的需求。 例如: 某个商场,每个时间点,商场的每个商铺位置的人群驻留数量。(有技术手段可以感知人的驻留位置,当走进某个区域时,将写入一条记录,表示你进入了这个区域,离开时记录一条离开的记录,如果长时间不动,则定时写心跳记录)。 某个网游,每个时间点,在线人数。(上线时写一...

PostgreSQL 10 GIN索引 锁优化

17 minute read

背景 PostgreSQL gin索引接口常被用于多值列的检索,例如全文检索类型、数组类型。 有兴趣了解更多索引接口的原理和使用场景,可以参考下文。 《PostgreSQL 9种索引的原理和应用场景》 今天要说道一下PostgreSQL GIN索引的代码优化。 在说GIN代码优化前,我们先来看一个场景,以...

100TB级, 日增量1TB(100亿)的OLTP OLAP混合场景数据库设计方向

10 minute read

背景 总量100TB,日增量1TB(日增约100亿记录)左右。这样的体量应该可以覆盖目前绝大多数企业的数据库体量。 提到100TB级别,OLTP和OLAP的混合场景,大家可能会想到Oracle的一体机extradata,没错Oracle在这方面做得确实是非常棒的,但是价格也是很漂亮的。 Oracle主要通过几...

PostgreSQL FDW 伪列实现 时序数据存储自动分区 - FUNCTION pushdown

1 minute read

背景 金融、气象、物联网、互联网等行业,有特别多的时序数据,例如股票的交易数据,气象传感器的采集数据,车联网的轨迹数据,互联网的FEED数据,都具有非常强的时序属性。 时序数据如何有效的存储、方便的使用呢? 例如这样的写入 create table xx (xxx) ts interval day; ...

PostgreSQL 连接攻击(类似DDoS)

less than 1 minute read

背景 客户端请求连接数据库后,会提示客户端输入用户密码,如果客户端不输入密码,那么数据库服务端会在一个超时时间后,断开连接。 也就是说,在服务端主动断开连接前,这个连接实际上需要占用一个SLOT,也就是max_connection中的一个。 https://www.postgresql.org/docs/9....

PostgreSQLGPDB 毫秒级海量时空数据透视 典型案例分享

4 minute read

背景 随着移动终端的普及,现在有越来越多的业务数据会包含空间数据,例如手机用户的FEED信息、物联网、车联网、气象传感器的数据、动物的溯源数据,一系列跟踪数据。 这些数据具备这几个维度的属性: 1、空间 2、时间 3、业务属性,例如温度、湿度、消费额、油耗、等。 数据透视是企业BI、分析师、运营非常关心...

PostgreSQL 9种索引的原理和应用场景

19 minute read

背景 PostgreSQL 拥有众多开放特性,例如 1、开放的数据类型接口,使得PG支持超级丰富的数据类型,除了传统数据库支持的类型,还支持GIS,JSON,RANGE,IP,ISBN,图像特征值,化学,DNA等等扩展的类型,用户还可以根据实际业务扩展更多的类型。 2、开放的操作符接口,使得PG不仅仅支持常见...

PostgreSQLGPDB 毫秒级海量多维数据透视 案例分享

2 minute read

背景 典型的电商类数据透视业务,透视的语料可能会包含一些用户的标签数据:例如包含品牌的ID,销售区域的ID,品牌对应用户的ID,以及若干用户标签字段,时间字段等。 标签可能会按不同的维度进行归类,例如tag1 性别,tag2 年龄段, tag3 兴趣爱好, …。 业务方较多的需求可能是对自有品牌的用户进行透视...

使用PostgreSQL逻辑订阅实现multi-master

7 minute read

背景 很多业务要求多活,但是多活中最难搞定的实际上是数据库,大多数业务通过分流,例如将数据根据UID切分到不同的IDC,同一个UID的数据永远只会写到一个IDC中,然后通过数据复制技术,将对应的数据复制到其他的IDC。 这种形态的多活是比较安全的,即同一条记录不会被多个IDC执行DML。如果同一条记录涉及到多个...

PostGIS 坐标转换(SRID)的边界问题引发的专业知识 - ST_Transform

1 minute read

背景 某个用户在使用PostgreSQL ST_Transform转换坐标时,遇到一个边界问题(暂时不清楚是不是BUG,因为对SRID还不太了解),导致距离计算不准确。 菜鸟的舍余同学给出了专业的解答: 不是用不用26986的问题,可以先了解下26986坐标系是怎么定义的哈,为什么它计算负经度(西半球)时没问...

空间复合索引加速空间搜索

5 minute read

背景 随着移动互联网的普及,空间数据已经成为大多数企业数据的标配,例如出行、快递、等。 通常数据的查询会带位置距离搜索,同时还会伴随其他属性的过滤,其他属性的过滤:例如时间范围,区域ID的过滤,物流公司ID的过滤。 空间索引和BTREE索引在PostgreSQL中属于两种索引(PostgreSQL支持btre...

数据入库实时转换 - trigger , rule

2 minute read

背景 PostgreSQL是一个功能很强大的数据库,仅仅在数据类型、索引接口的支持方面,就远超各种开源和商业数据库。 有些用户从其他数据源迁移到PostgreSQL,或者有其他数据源来的数据,大多数是字符串、数字,到了PostgreSQL可以转换为更精准的描述(数据类型),提升性能或功能。 例如 1、经纬度...

数据库平滑switchover的要素 - 会话资源漂移

8 minute read

背景 数据库迁移、切换是很普遍的一个话题,但是大多数的方案,对用户来说都是有感知的,所以用户的体验并不好。 例如用户使用了绑定变量语句,主备角色切换后绑定变量语句没有了,会导致调用报错。 我们需要维护主库的硬件,那么可以在中间件层面,将主备数据库的角色进行平滑调换,维护好硬件,再平滑的调换回来。 数据库主备...

列存优化(shard,大小块,归整,块级索引,bitmap scan) - (大量数据实时读写)任意列搜索

2 minute read

背景 数据分析系统,决策系统的数据量通常非常庞大,属性(列)非常多,可能涉及到任意列的组合条件查询,筛选结果、聚合结果、多维分析等。 这种场景如何优化能满足实时的响应需求呢? PostgreSQL中有一些技术,可以满足此类场景。 1. 内置bitmapAnd bitmapOr,使用任意字段的索引搜索时,可以...

优化器里的概率学 - 性能抖动原理分析

1 minute read

背景 数据库的优化器大量的使用了概率学的知识,例如高频词的频率,数据分布柱状图,评估某个VALUE有多少行,评估物理存储与列的线性相关性等等。 PostgreSQL 里面的统计学知识: 《用PostgreSQL了解一些统计学术语以及计算方法和表示方法 - 1》 《PostgreSQL数据库监控中的统计学 -...

从一维编排到多维编排,从平面存储到3D存储 - 数据存储优化之路

4 minute read

背景 中华文化源远流长,比如这句古语“远水不救近火,远亲不如近邻”,在数据库的优化中亦有体现。接下来我们来揭示这个道理。 大多数数据库的存储为块存储,一个块里面可能涉及到多条记录,当用户输入查询条件进行数据检索时,即使返回的结果集较小,也可能需要扫描多个数据块,因为你不知道你要的记录落在哪些数据块里面。 例子...

索引扫描优化之 - GIN数据重组优化(按元素聚合) 想象在玩多阶魔方

less than 1 minute read

背景 前一篇文章介绍了一个场景,利用多列索引,多种索引接口(GIN\BTREE\BRIN…)以及PostgreSQL内置的bitmapAnd, bitmapOr等手段,提升广告营销实时搜索性能,同时兼顾开发工作量。 《懒人推动社会进步 - 多列聚合, gin与数据分布(选择性)》 其中在讲到GIN索引的优化时...

懒人推动社会进步 - 多列聚合, gin与数据分布(选择性)

6 minute read

背景 在广告行业,精准营销是一个较热的话题,之前写过一个案例,如何使用PostgreSQL的array类型和GIN索引实时圈人的场景。 《万亿级营销(圈人)迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计》 使用以上方法,程序需要作出一些调整(当然,如果用户原本就是PostgreSQL技术栈,...

数据保留时间窗口的使用

less than 1 minute read

背景 类似mongodb的rotate collate(设置表的上限容量、上限记录数,持续写入,自动覆盖最老的记录),PostgreSQL通过pipelinedb也能实现类似的功能。 此类功能非常适合日志数据,无需维护成本,持续写入,自动覆盖最老的记录。 pipelinedb计划会在2017-07月份转换为p...

PG多节点(quorum based), 0丢失 HA(failover,switchover)方案

2 minute read

背景 PostgreSQL 10加入了quorum based的同步复制功能,用户可以配置若干standby节点,并配置需要将WAL发送多少份才返回给客户端事务结束的消息。 ANY num_sync ( standby_name [, ...] ) 原理详见 https://www.postgre...

PostgreSQL 并行写入堆表,如何保证时序线性存储 - BRIN索引优化

5 minute read

背景 BRIN索引的原理很简单,每个数据块(或者每一段连续的数据块)记录了其中的元数据(最大值,最小值,平均值,COUNT,AVG,NULL值个数等),当每个数据块存储的数据范围错开(边界清晰)时,块级索引的效率就非常高。 例如测试表 create table test(id int, info text);...

为什么PostgreSQL是最先进的开源数据库

2 minute read

背景 打开PostgreSQL网站,你会看到这样的flag。 The world’s most advanced open source database. 那么它从何而来呢? 从个人对数据库的角度,在几个方面来分析一下 一、功能方面 1 数据处理能力 - 高级SQL特性 1、窗口查询 2、聚合...

多字段,任意组合条件查询(无需建模) - 毫秒级实时圈人 最佳实践

5 minute read

背景 你也许在一家ToB的数据分析公司,你可能设计了一张表(包括用户标识,及若干已经统计好的的属性值),你也许收集了一些用户的数据,你也许要为客户提供报表,你也许需要为客户提供任意属性值的组合查询,并快速的返回结果给用户。 这些需求应该是非常常见的ToB的数据平台公司的形态,头痛的问题无法建模,因为B端的需求无...

块级(ctid)扫描在IoT(物联网)极限写和消费读并存场景的应用

3 minute read

背景 在物联网有一个非常普遍的数据需求,就是数据的写入,另一个普遍的需求则是数据的消费(按时序读取),以及流式计算。 关于流式计算,请参考 《(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践》 《流计算风云再起 - PostgreSQL携PipelineDB力挺Io...

PostgreSQL UDF实现IF NOT EXISTS语法

1 minute read

背景 当对象存在时,不创建;当对象不存在时,创建。 在数据库中使用IF NOT EXISTS语法进行判断。 Syntax: CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table...

AI(OtterTune)引波澜 - AI会洗牌数据库行业吗? DBA如何转变思想

1 minute read

背景 最近AI的新闻特别多,席卷了围棋圈之后,成为了技术圈和媒体热捧的话题。 今天又一个产品借AI上头条了 - OtterTune ,一个数据库参数调优的产品,借助机器学习的技术,生成最优的数据库参数。 下面是这个产品的论文 《Automatic Database Management System Tun...

JSONB 压缩版本 ZSON

less than 1 minute read

背景 json, jsonb是PostgreSQL里面的一种schemaless数据类型,zson是兼容json,jsonb的一种压缩类型,通过训练的方式生成字典,通过字典进行压缩。 通常获得的压缩比比较客观,压缩后可以节约存储空间,节约SHARED BUFFER,提高TPS。 安装 git clone h...

采用 部分索引、表达式索引 提高搜索效率

9 minute read

背景 在现实场景中,经常有搜索的需求,例如搜索附近的店铺,搜索通常会有一些搜索的附带条件,例如搜索附近的美食类店铺,加油站等。 这里实际上涉及两类搜索需求,一类是距离,一类是属性。 如果将属性枚举掉,那么搜索时可以变成只按距离搜索。建立空间索引即可。 而如果属性无法枚举,那么需要同时搜索空间和属性,可以建立...

PostgreSQL Oracle 兼容性 之 - 数据采样与脱敏

4 minute read

背景 数据采样、脱敏是测试时常用的功能,例如使用线上业务建立测试数据库,不能把整个库脱下来,同时需要对敏感数据加密。 Oracle的例子 ``` SELECT COUNT(innerQuery.C1) FROM ( SELECT ? AS C1 FROM RM_SALE_APPORTION SAMPL...

PostgreSQL 数据去重方法大全

11 minute read

背景 去重的需求比较常见,去重也可以衍生出很多变种。例如 1. 单列去重,很好理解,就是按某列去除重复记录。保留规则(例如保留最新的,保留最旧的,或者保留某个其他字段最大的)。 2. 多列去重,按多列,去除重复记录。保留规则(例如保留最新的,保留最旧的,或者保留某个其他字段最大的)。 3. 行去重,按行,去...

PostgreSQL 的表传输功能

less than 1 minute read

背景 表传输的功能很有意思,比如一些企业会有中心数据库,边缘数据库。边缘数据库的数据需要周期性的导入到中心库进行汇总,例如每个工厂的日流水数据,每天导入到总部的中心数据库。 从边缘库导入到中心库,大家可能会想到使用ETL工具,或者是数据订阅(同步)的方式,但是大家有没有想过,这些方式都需要数据重新来一遍inse...

PostgreSQL、Greenplum 《如来神掌》 - 目录 - 珍藏级

19 minute read

背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗手,无可柰何,惟隐居深谷,以雕为友。呜呼,生平求一敌手而不可得,诚寂寥难堪也。」 剑冢中,埋的是剑魔独孤求败毕生几个阶段中用过的几柄剑: 利剑无意;第一柄是青光闪闪的利剑,凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋。 软剑无常;第二...

PostgreSQL DBA cookbook - 目录

2 minute read

背景 一、概念 1. 物理架构 数据库进程结构介绍 数据库物理存储结构介绍 2. 逻辑架构 数据库逻辑层面的概念介绍,层次关系介绍。 3. 权限体系 介绍数据库的权限体系,以及如何赋予和释放权限。 二、安装 1. Linux 最佳部署 DBA不可不知的操作系统内核参数 2. 初始化数据库 ...

数据库的未来 - HTAP,软件、硬件、云生态的融合

2 minute read

背景 数据库经过了几十年的发展,未来的路怎么走?从硬件、软件技术的发展,结合业务的需求出发我们可以从中看出一些端倪。 一、数据类型多样化 随着技术的普及,越来越多以前需要很高的成本才能获取的数据,现在触手可及。 1. 点云(点的位置坐标+RGB+其他属性),以前只有军用领域在使用,比如《普罗米修斯》这部电影,...

17种文本相似算法与GIN索引 - pg_similarity

2 minute read

背景 文本相似算法,结合PostgreSQL的开放索引框架GIN,可以实现各种相似算法的文本高效检索。 PostgreSQL中常见的文本相似搜索插件:rum, pg_trgm, fuzzymatch, pg_similarity, smlar。 其中pg_similarity支持的算法达到了17种。 Int...

无人驾驶背后的技术 - PostGIS点云(pointcloud)应用 - 2

less than 1 minute read

背景 无人驾驶、配送机器人的业务背景,方案设计请参考: 《无人驾驶背后的技术 - PostGIS点云(pointcloud)应用》 本文针对以上文章,补充一些新鲜内容。 一、transfer table消除索引build、格式检查等无用功 在服务端存储了所有的pointcloud数据,而终端(如无人车)仅仅...

行为、审计日志 (实时索引/实时搜索)建模 - 最佳实践 2

12 minute read

背景 在很多系统中会记录用户的行为日志,行为日志包括浏览行为、社交行为、操作行为等。 典型的应用例如:数据库的SQL审计、企业内部的堡垒机(行为审计)等。 前面写了一篇最佳实践,通过PostgreSQL来存储审计日志,同时对审计日志需要检索的字段建立全文索引。 SSD机器可以达到7万/s的写入(换算成全文索...

PostgreSQL 锁等待监控 珍藏级SQL - 谁堵塞了谁

12 minute read

背景 在数据库中,通过锁以及多版本并发控制可以保护数据的一致性,例如A正在查询数据,B就无法对A访问的对象执行DDL。A正在更新某条记录,B就不能删除或更新这条记录。 锁是数据库自动管理的,同时数据库还提供了AD LOCK或者LOCK语法,允许用户自己控制锁。 例如AD lock的应用可以参考如下: 《Po...

无人驾驶背后的技术 - PostGIS点云(pointcloud)应用 - 1

9 minute read

背景 科幻电影的场景随着技术的发展,正在一步步的从荧幕变成现实。从军用到民用,比如汽车厂商、科技公司在尝试的无人驾驶,无人飞行器。 无人驾驶应用非常广泛,比如快递行业,时机成熟以后,将来可能快递员这个职业也会逐渐从社会上消失(解放快递员的双手和创造力,让更多的人参与到科技改变生活当中)。 不管是无人驾驶的汽车...

PostgrSQL 递归SQL的几个应用 - 极客与正常人的思维

3 minute read

背景 递归SQL的几个应用 递归查询,在几个场景的应用,有十全大补丸的功效。 一、求唯一值 场景 某张表,数据量在亿级别,求某稀疏列的唯一值。 create table sex (sex char(1), otherinfo text); create index idx_sex_1 on sex(...

(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)金融,时序处理最佳实践

12 minute read

背景 越来越多的数据要求实时的分析、聚合、展示最新值、展示异常值、实时的搜索。 例如 金融数据、物联网传感器的数据、网络游戏的在线数据等等。 关于实时搜索,可以参考这篇最佳实践: 《行为、审计日志 实时索引/实时搜索 - 最佳实践》 关于海量数据的”写入、共享、存储、计算”,以及离线分析,则可以参考这...

行为、审计日志 (实时索引/实时搜索)建模 - 最佳实践 1

12 minute read

背景 在很多系统中会记录用户的行为日志,行为日志包括浏览行为、社交行为、操作行为等。 典型的应用例如:数据库的SQL审计、企业内部的堡垒机(行为审计)等。 行为、审计日志的量与业务量或者操作量有关,为了满足企业实时查询的需求,通常需要构建搜索引擎,比如使用ES或者使用PostgreSQL的全文检索功能来实现。...

DNA遗传哲学? - 数据库里schema应该属于谁?

1 minute read

背景 混沌初开 安装好PostgreSQL软件后,需要调用initdb,或者pg_ctl初始化数据库实例,初始化数据库实例时,通过bki接口(脚本),建立数据库元数据。 初始化后,数据库有了数据文件、日志文件、控制文件、CLOG、WAL等一系列数据库的文件。 同时会创建模板库template0, templ...

Greenplum 最佳实践 - 什么时候选择bitmap索引

3 minute read

背景 PostgreSQL 目前支持8种索引接口,包括B-Tree, hash, gin, gist, sp-gist, brin, rum, bloom。 Greenplum 目前支持B-Tree, GiST, bitmap三种索引接口。 用户可以根据不同的数据类型,不同的请求类型,使用不同的索引接口建立相...

PostgreSQL 异步IO (effective_io_concurrency) 实测

6 minute read

背景 异步IO的目的是充分发挥块设备的吞吐能力,让块设备处于更繁忙的工作状态(一次连续摄取更多的块),而不是等用户进程需要数据时再读取。 如果数据库并发连接(或者活跃会话)足够时,并且块设备处于繁忙状态,那么没有必要开启异步IO,因为开了也没什么用,块设备已经足够的忙了。 目前PostgreSQL的bitma...

PostgreSQL schemaless 的实现(类mongodb collection)

1 minute read

背景 使用mongodb时,并不需要先建表(collection),直接就可以往里面写,原因是collection本事就是固定的BSON结构。 所以当用户插入时,如果表不存在,建一个BSON结构的colleciton即可。 而关系数据库无法做到这一点,因为关系数据库的表结构都是事先构建,并且在写入数据时,是需...

海量数据 写入、共享、存储、计算 最佳实践

1 minute read

背景 数据是为业务服务的,业务方为了更加透彻的掌握业务本身或者使用该业务的群体,往往会收集,或者让应用埋点,收集更多的日志。 随着用户量、用户活跃度的增长,时间的积累等,数据产生的速度越来越快,数据堆积的量越来越大,数据的维度越来越多,数据类型越来越多,数据孤岛也越来越多。 日积月累,给企业IT带来诸多负担,...

PostgreSQL 10 解读

5 minute read

背景 本文参考当前的release notes以及git, committe fest编写,10还没有正式release,部分内容在正式release时可能会修改,同时会新增新的内容。 PG 10 最主要特性概述 1、支持表级逻辑订阅。多个表可以并行订阅提升订阅的整体吞吐能力。 2、支持表分区。 3、多核并...

数据库优化器原理(含动态规划、机器学习建模优化器aqo) - 如何治疗选择综合症

8 minute read

背景 RBO -> CBO -> 动态优化 经常听到这样的声音:“查询慢?加个索引吧。”,虽然话不专业,但是体现了早期基于RBO(基于规则)的优化器思维。 通常对业务不熟悉,或者对数据库不熟悉时,可能会凭自觉做出这样的判断。 RBO思维存在较大的问题,所以导致了CBO(基于成本)的出现。 再往后...

Greenplum 跨库数据JOIN需求 - dblink的使用和弊端以及解决方案

9 minute read

背景 Greenplum在许多企业中被用于数据仓库,一个企业中通常会有统一的用户管理系统,账务系统;还有许多业务线。 数据被分成两类,一类是业务相关的,一类是全公司统一的数据。 如果用户将两个部分数据分别存入不同的数据库(单个实例可以创建多个数据库),并且公共数据需要与业务数据JOIN时,你可能会想到dbli...

异步流复制模式如何保证不丢数据?

1 minute read

背景 PostgreSQL支持多种事务commit模式,以一主多备的同步流复制为例,事务的REDO信息持久化是怎样的呢? 配置synchronous_commit参数如下,以及对应的含义: local:表示REDO本地持久化。 on:表示本地持久化,以及一个备库持久化。 remote_write:表示本地...

从redo日志分析数据库的profile

1 minute read

背景 在PostgreSQL中查看TOP SQL是比较方便的,如下: 《PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)》 而从另一个角度,比如REDO文件,我们也能分析出每个时间段数据库的操作类型,分析数据库资源消耗,以及提出优化建议。 redo日志长什么样 pg_xlogdum...

PostgreSQL全角、半角互相转换

1 minute read

背景 转载原文 http://blog.qdac.cc/?p=1289 我们知道,客户许多时候录入数据时,并不注意输入法是否是全角模式,然后就造成输入的内容,有的是全角有的是半角,造成我们做分析统计时的不便,为此,编写相应的函数。当然这个过程应尽量在前台完成,但如果针对已经存在的数据,下面提供的两个函数就比较方...

如何优雅的修改被视图引用的表字段

2 minute read

背景 在修改数据库表字段的长度时,数据库提供了alter table的语法进行修改。 但是被修改的字段如果有其他引用(例如视图)时,必须先将引用的对象删除,再修改对应的字段。 例子如下 测试表 postgres=# create table test_t (id int, info text, crt_...

阿里云RDS for PostgreSQL varbitx插件与实时画像应用场景介绍

3 minute read

背景 PostgreSQL 内置的varbit, bit类型的操作函数比较简单,阿里云RDS for PostgreSQL对其进行了扩展。 支持更多的bit操作,可以覆盖更广的应用场景,例如实时用户画像推荐系统、门禁广告系统、购票系统等。 阿里云 varbitx 插件介绍 增加的函数接口如下 1. bit_...

PostgreSQL 模糊查询最佳实践 - (含单字、双字、多字模糊查询方法)

11 minute read

背景 前模糊(有前缀的模糊),后模糊(有后缀的模糊),前后模糊(无前后缀的模糊),正则匹配都属于文本搜索领域常见的需求。 PostgreSQL拥有很强的文本搜索能力,除了支持全文检索,还支持模糊查询、正则查询。内置的pg_trgm插件是一般数据库没有的,可能很多人没有听说过。同时还内置了表达式索引、GIN索引的...

PostgreSQL 中生成随机汉字

1 minute read

背景 汉字unicode编码范围 php中utf-8编码下用正则表达式匹配汉字的最终正确表达式 —— /[\x{4e00}-\x{9fa5}]/u \u4e00-\u9fa5 (中文) \x3130-\x318F (韩文) \xAC00-\xD7A3 (韩文) \u0800-\u4e00...

PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL) (包含SQL优化内容) - 珍藏级

11 minute read

背景 数据库是较大型的应用,对于繁忙的数据库,需要消耗大量的内存、CPU、IO、网络资源。 SQL优化是数据库优化的手段之一,优化什么SQL效果最佳呢?首先要了解最耗费资源的SQL,即TOP SQL。 从哪里可以了解数据库的资源都被哪些SQL消耗掉了呢? 资源分为多个维度,CPU,内存,IO等。如何能了解各...

PostgreSQL 如何实现批量更新、删除、插入

3 minute read

背景 如何一次插入多条记录? 如何一次更新多条记录? 如何一次批量删除多条记录? 批量操作可以减少数据库与应用程序的交互次数,提高数据处理的吞吐量。 批量插入 批量插入1 使用insert into … select的方法 postgres=# insert into tbl1 (id, info ,...

PostgreSQL upsert功能(insert on conflict do)的用法

6 minute read

背景 PostgreSQL 9.5 引入了一项新功能,UPSERT(insert on conflict do),当插入遇到约束错误时,直接返回,或者改为执行UPDATE。 语法如下 Command: INSERT Description: create new rows in a table ...

如何按拼音排序 - 数据库本土化特性(collate, ctype, …)

4 minute read

背景 数据库为了支持国际化,通常会涉及到collate, ctype的概念。 初始化数据库集群时,可以设置如下参数,用于设置数据库的字符串排序、字符归类方法、数值\日期\时间\货币的格式等。 LC_COLLATE String sort order ...

如何在PostgreSQL中调试plpgsql存储过程(pldebugger, pldbgapi)

3 minute read

背景 PostgreSQL支持多种存储过程语言,例如plpgsql, C, plpython, plperl, pltcl, pljava, 等等。 用户可以使用这些存储过程语言,创建对应的函数或存储过程(returns void)。 那么如何调试PostgreSQL的存储过程呢?社区提供了一个插件pldeb...

如何设置数据库的LC_COLLATE, LC_CTYPE, ENCODING, TEMPLATE

4 minute read

背景 PostgreSQL实例支持创建多个数据库,创建数据库时,可以指定模板库,并为每个数据库设置不同的字符集、本地化collate, 货币等属性。 接下来举例讲述CREATE DATABASE的具体使用方法。 一、CREATE DATABASE语法 Command: CREATE DATABASE ...

geohash vs PostGIS

3 minute read

背景 业界有几种地理位置的表示方法。 通常我们使用经纬度表示地球上的位置,PostgreSQL的PostGIS可以很好的描述这种类型,包括海拔在内。使用最为广泛,精度、功能最高的应该是PostGIS。 但是并不是所有的数据库都有这样的技术(或者实现难度的问题导致了很多数据库在初期会选择较为简单的geohash...

PostgreSQL 10.0 preview 功能增强 - 串行隔离级别 预加锁阈值可控

1 minute read

背景 PostgreSQL 串行隔离级别中一个重要的概念是预加锁,在事务结束时,检测预加锁是否冲突。 10.0增加了三个控制参数,可以控制预加锁的上限。避免内存过度使用。 1. 控制每个事务的对象预加锁数量。 max_pred_locks_per_transaction (integer) The sha...

PostgreSQL 10.0 preview 功能增强 - 更强可靠性, 过去式事务状态可查(杜绝unknown事务)

1 minute read

背景 在一些极端情况下,例如当客户端发出事务提交SQL后,客户端收到数据库返回的提交状态前,如果客户端崩溃或数据库异常,导致客户端不知道事务的最终状态到底是提交成功还是失败的。 那么怎么解决这个问题呢? 1. 一种方法是走2PC协议,先使用预提交,然后在发出commit 之前的预提交。(因为只要预提交成功,就...

PostgreSQL 10.0 preview 功能增强 - WAL一致性校验

1 minute read

背景 10.0 新增了一个DEBUG参数,用于检测recovery过程中,由于wal replay BUG或者备库的物理数据块异常导致的wal replay回放出来的块不正确的问题。 当产生脏页时,在wal记录中,可能有两种信息: 1. 只记录了数据变更的部分。 2. FULL PAGE,记录了整个数据块。...

PostgreSQL 10.0 preview 功能增强 - 增加access method CHECK接口amcheck

2 minute read

背景 一些高端存储、包括ZFS文件系统,在使用了RAID后,有块检测和异常块的修复功能。 对于数据库来说,数据的可靠性是非常重要的指标,例如: 1. 写进入是什么,读出来就应该是什么。 2. 当操作系统的collate发生变化时,索引的顺序可能与实际的collate顺序不匹配。造成不稳定现象。 3. 数据...

PostgreSQL 10.0 preview 功能增强 - libpq支持多主机连接(failover,LB)让数据库HA和应用配合更紧密

4 minute read

背景 数据库一主多备,这个词在互联网应该不陌生。但是主备切换和应用程序如何配合才能天衣无缝呢?你可能会有这样的疑问。 1. 什么类型的QUERY发给主库,什么类型的QUERY发给备库? 2. 主库和备库发生了角色切换之后,客户端连接如何配合? 业界有一些做法可以回答这两个问题。 1. 通常使用集群软件,使...

PostgreSQL 物流轨迹系统数据库需求分析与设计 - 包裹侠实时跟踪与召回

10 minute read

背景 物流行业对地理位置信息数据的处理有非常强烈的需求,例如 1. 实时跟踪快递员、货车的位置信息。对数据库的写入性能要求较高。 2. 对于当日件,需要按发货位置,实时召回附近的快递员。 3. 实时的位置信息非常庞大,为了数据分析的需求,需要保留数据,所以需要廉价的存储。例如对象存储。同时还需要和数据库或分...

PostgreSQL 时序最佳实践 - 证券交易系统数据库设计 - 阿里云RDS PostgreSQL最佳实践

25 minute read

背景 证券行业产生的数据比较多,读写非常频繁。 以股票交易为例,一共有几千只股票。一年大概有240个交易日,交易日大概是从早上10点到下午4点。 1、数据写入需求: 实时的数据写入,按查询维度的实时数据合并(比如秒数据实时写入。分钟,几分钟,。。。则实时合并)。 数据分为不同粒度的分时数据。(精确到秒...

奔跑吧,大屏 - 时间+空间 实时四维数据透视

9 minute read

背景 随着物联网的发展,数据的产生越来越快。比如马路的汽车通过数据,用户的驻留数据,水纹传感器的数据,电商的FEED数据,网约车的轨迹数据 等等。 这么多的数据,用途也不一样,有需要流式实时统计的,也有时序处理相关需求的,还有全量分析需求的。 这些都有对应的解决方案。 《流计算风云再起 - Postgr...

PostgreSQL 逻辑订阅 - 给业务架构带来了什么希望?

2 minute read

背景 逻辑订阅是PostgreSQL 10.0的新特性。 具体的原理,使用方法可以参考如下文章。 《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》 《PostgreSQL 10.0 preview 逻辑订阅 - pg_hba.conf变化,不再使用replication条目》...

快速入门PostgreSQL应用开发与管理 - 8 PostgreSQL 管理

28 minute read

背景 本章大纲 一、权限体系 1 逻辑结构 2 权限体系 3 schema使用 , 特别注意 4 用户 5 public 6 如何查看和解读一个对象的当前权限状态 二、索引介绍 1 索引有什么用? 2 索引的类型 3 索引合并扫描 4 表膨胀检查 5 检查膨胀 6 索引维护 三、系统配置 1 存储、文件系统规划 ...

快速入门PostgreSQL应用开发与管理 - 6 事务和锁

27 minute read

背景 本章大纲 一、什么是事务 二、单用户情况下的事务 三、多用户情况下的事务 1 PostgreSQL如何处理事务隔离? 2 多用户情况下的事务并发处理 四、锁 五、数据恢复粒度 六、数据年龄 七、事务冻结 八、垃圾回收 九、flash back query 第四章:事务和锁 https://www.post...

快速入门PostgreSQL应用开发与管理 - 5 数据定义

24 minute read

背景 本章大纲 1. 数据类型 2. 数据操作 3. 表管理 4. 视图 5. 约束 6. RLS(行安全策略) 第三章:数据定义 1. 数据类型 https://www.postgresql.org/docs/9.6/static/datatype.html 1、数值 Na...

快速入门PostgreSQL应用开发与管理 - 4 高级SQL用法

33 minute read

背景 本章大纲 1. 聚集函数 常用聚合函数 统计类的聚合函数 分组排序聚合 Hypothetical-Set聚合函数 多维分析 2. 子查询 3. union\union all\except\intersect 4. 自连接 5. 内连接 优化器如何强制连接顺序? 6. 外连接 左外连接 右外连接 全外连接 ...

快速入门PostgreSQL应用开发与管理 - 3 访问数据

20 minute read

背景 在线SQL平台 http://www.sqlfiddle.com/ 本章大纲 1. 使用PSQL 2. 使用Select语句 3. 使用游标 4. 行表达式 5. with和递归查询 6. 执行DML\DDL\DCL 7. 选择行 8. 使用序列 9. 使用默认值 10. 生成数据 11. 检查空值(N...

快速入门PostgreSQL应用开发与管理 - 2 Linux基本操作

3 minute read

背景 玩转PostgreSQL前,首先要了解的最最基本的Linux操作。 本章大纲 1. 如何访问命令行 2. 使用命令行下的工具 非编辑模式 进入编辑模式 3. 正则表达式、管道和I/O 重定向 4. 管理用户账户 5. 文件访问控制 6. 管理进程 1, 如何访问命令行 1.1 本地命令行的访问 在图形...

PostgreSQL物理备库的哪些操作或配置,可能影响主库的性能、垃圾回收、IO波动

2 minute read

背景 PostgreSQL 物理备库的哪些配置,或者哪些操作,可能影响到主库呢? 首先,简单介绍一下PostgreSQL的物理备库,物理备库就是基于PostgreSQL WAL流式复制,实时恢复的备库。物理备库在物理层面与主库完全一致,每一个数据块都一样。物理备库允许在实时恢复的同时,对外提供只读的功能。 问...

为什么啤酒和纸尿裤最搭 - 用HybridDB/PostgreSQL查询商品营销最佳组合

4 minute read

背景 购买早餐时,包子和豆浆、茶叶蛋是最佳搭档吗? 为什么纸尿裤和啤酒是最佳搭档? 这些问题在积累了一定的订单数据后,是可以挖掘出来的。这个问题实际上是4.8号PostgreSQL社区杭州区活动上,一位社区的朋友提出来的,如何使用PostgreSQL找出最佳搭配的商品。 实际上有一个专业的推荐数据库,支持多...

推荐系统分析 - 推荐算法, RecDB推荐数据库介绍

6 minute read

背景 中华文化源远流长,从古至今有很多有趣的学问。比如看风水、看相,在西方文化中有类似的比如星座学说。 这些和推荐系统有什么关系呢? 个人感觉星座学说这些学问有一定的理论基础,更多的则是也是经验的总结。 推荐系统实际上和星座学说类似,有一定的算法基础,算法则可能是来自经验的总结。 在现实场景中,可以找到很...

时序数据库有哪些特点? TimescaleDB时序数据库介绍

3 minute read

背景 随着物联网的发展,时序数据库的需求越来越多,比如水文监控、工厂的设备监控、国家安全相关的数据监控、通讯监控、金融行业指标数据、传感器数据等。 在互联网行业中,也有着非常多的时序数据,例如用户访问网站的行为轨迹,应用程序产生的日志数据等等。 时序数据有几个特点 1. 基本上都是插入,没有更新的需求。 ...

微服务配置管理

less than 1 minute read

背景 微服务的介绍,请参考 https://martinfowler.com/articles/microservices.html 不管是微服务,或者其他软件架构,docker等。APP(微服务)配置的同步,变更,下发,都是需要面对的。 例如你可以用消息队列,但是这种方式比较重,同时在APP重启后,可...

Prometheus 监控平台

less than 1 minute read

背景 What is Prometheus? Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud. Since its inception in 2012, many...

多点最优路径规划 - (商旅问题,拼车,餐饮配送,包裹配送,包裹取件,回程单)

2 minute read

背景 小长假,带着一家人出去旅行,计划好了去几个地方,如何设计旅行线路是最优的?(里面还涉及到路费,路途时间等因素)。 又比如 拼车,餐饮配送,包裹取件、配送,都包含最佳路径计算的共性在里面。 PostgreSQL 在GIS领域有这非常丰富的用户和实际案例,路径规划方面,我之前写过一篇关于包裹配送的文章 ...

invalid SRID: xxxx not found in spatial_ref_sys

1 minute read

背景 GIS数据有一定的标准来表示它的数据, ``` The OpenGIS “Simple Features Specification for SQL” defines standard GIS object types, the functions required to manipulate them...

Greenplum 自定义复合类型 数组

2 minute read

背景 如果你现在要在Greenplum中创建一个复合类型,是不会自动给你创建对应的数组类型的。(而实际上PostgreSQL 在2007年已经支持了这个功能) Greenplum需要等到5.0,才能使用上它了。 https://github.com/greenplum-db/gpdb/commit/8954a...

PostgreSQL 10.0 preview 功能增强 - BRIN 索引更新smooth化

3 minute read

背景 我们将数据存入PostgreSQL时,如果创建的是堆表,那么数据是往数据文件的末尾不断追加存储的。 为了提高数据的检索速度,可以对响应的字段创建索引,在PostgreSQL中,已有8种索引类型,分别是B-Tree,hash, gin, gist, sp-gist, brin, bloom, rum。分别对...

PostgreSQL 转义、UNICODE、与SQL注入

11 minute read

背景 通过本文,你可以了解: 1. 如何在字符串中输入特殊字符,例如回车。 2. 如何在字符串中输入单引号。 3. 转义字符是什么?用法。 4. 在SQL标准中,反斜线是转义符吗?PostgreSQL如何使用反斜线转义?书写格式如何? 5. 为什么转义单引号存在SQL注入的风险?数据库有什么参数可以控制...

PostgreSQL 10.0 preview 功能增强 - 触发器函数内置中间表

1 minute read

背景 在触发器中,如果要提取触发该事件的记录,使用OLD和NEW关键字。 OLD.* , NEW.* 提取 对于for statement after触发器,触发的记录数可能是很多的,PostgreSQL 10.0增加了一个功能,中间表。 在触发器函数中,可以使用这个中间表,中间表的数据就是触发器涉及的数...

PostgreSQL 10.0 preview sharding增强 - 支持分布式事务

4 minute read

背景 作为一个完整的分布式数据库(sharding),没有分布式事务支持是不行的。 什么是分布式事务呢?比如我们把一个数据库比作一个小朋友,每个小朋友都有100块钱,然后A小朋友给了B小朋友20块钱,这样的话应该是A剩余80块,B剩余120块。如果在交易过程中B小朋友不小心把20块弄丢了,那么会怎么样呢? 理...

潘金莲改变了历史之 - PostgreSQL舆情事件分析应用

2 minute read

背景 潘金莲改变了历史吗? 网上的段子 潘金莲撑开窗户,撑窗户滴棍子掉下去了,于是西门庆看到了,于是他们相遇了。如果潘金莲同学当时没有开窗,那么她就不会遇到西门庆。 如果没有遇到西门庆,那么她就不会被迫出轨,那样武松哥哥就不会怒发冲冠为红颜,这样他就不会奔上梁山。 武松就不会奔上梁...

PostgreSQL 10.0 preview 功能增强 - 自由定义统计信息维度

1 minute read

背景 统计信息是数据库优化器用来计算SQL plan tree中每个NODE成本的依据,目前PostgreSQL的统计信息是开源数据库中最完备的。 包括继承表、以及全局的统计信息,每个字段的NULL值个数或百分比,平均字段宽度,唯一值个数或百分比,高频词,高频词的百分比,柱状图,线性相关性,数组字段的高频元素,...

PostgreSQL 10.0 preview 性能增强 - 推出JIT开发框架(朝着HTAP迈进)

2 minute read

背景 数据库发展了几十年,出现了很多产品,有面向OLTP(在线事务处理)的,有面向OLAP(在线分析)的。 虽然两个场景各有需求特色,但是企业需要为其需求买单,因为目前很少有产品可以同时满足在线处理和在线分析的需求。 比如一家企业,通常都有业务的波峰波谷,比如游戏业务,通常波谷可能是在凌晨,因为大多数人都睡了...

PostgreSQL 10.0 preview 功能增强 - 物理备库支持逻辑订阅,订阅支持物理主备HA漂移

1 minute read

背景 逻辑复制的本质是从WAL日志中,翻译出逻辑的数据(ROW),然后同步到下游节点。实际上是一个发布和订阅的流程。 那么有两个问题, 1. 当上游节点使用了流复制搭建主备HA,并且主备发生切换时,下游节点的订阅还能继续吗? 2. 可以使用备库节点作为逻辑复制的上游节点吗?(即物理备库作为逻辑复制的发布节点...

PostgreSQL jdbc batch insert

2 minute read

背景 如何快速的将数据导入数据库? 比如ETL程序,数据还原程序,数据初始化,数据同步等场景都会有这样的诉求。 从几个方面来分析 1. 统计信息 PostgreSQL会自动统计表的统计信息,包括柱状图等。会有一定的开销,所以在做批量导入时,可以先关闭表的autovacuum. 2. 索引 构造索引,会...

PostgreSQL 10.0 preview 性能增强 - GIN索引vacuum锁降低

less than 1 minute read

背景 如果你发现你的CPU没怎么用,但是压力就是上不去,很大可能是锁等待造成的(perf可以观察),锁在数据库优化中是一个比较永恒的话题。 以往在vacuum GIN索引clean posting tree时,需要锁整个posting tree,10.0改进了这块的锁,现在只锁一个subtree。 在较大的G...

视觉挖掘与PostGIS空间数据库的完美邂逅 - 广告营销圈人

6 minute read

背景 推荐系统是广告营销平台的奶牛,其核心是精准、实时、高效。 这么多广告平台,到底谁家强?谁的核心牛逼? 1. 精准,指对用户的描述精准,通常需要基于大量的用户行为数据,经历深度学习后形成的用户画像,或称之为标签系统。 标签的准确性关系到推荐的精准度,比如你可能不会对一个正常的年轻人推荐老花眼镜(当然如果有...

PostGIS 多点几何类型 空字符构造异常CASE - parse error - invalid geometry (lwgeom_pg.c:96)

1 minute read

背景 某个业务中存储了一批用户的访问轨迹数据,(每个店铺访问的次数,包括店铺ID,访问次数:1:1, 2:1即1号店访问了1次,2号店访问了1次)。 业务方有一个需求,根据店铺的访问次数圈出一部分人群,比如A店铺访问超出多少次的,或者B店铺访问超过多少次的等。 如果让你来处理,你会使用什么技术呢? 数据结构...

PostgreSQL 10.0 preview 功能增强 - CLOG oldest XID跟踪

less than 1 minute read

背景 PostgreSQL tuple中记录的xmin,xmax事务号是uint32类型,所以是一个rotate使用的方式,需要frozen。 CLOG存储的是oldest XID之后的XID,也就是说这个XID之后的事务,都保留了事务提交的状态值,之前的CLOG可能被删除或者正在被删除。 这个patch与从...

PostgreSQL 10.0 preview 功能增强 - 逻辑复制支持并行COPY初始化数据

4 minute read

背景 PostgreSQL 已支持逻辑复制,同时对逻辑复制增加了一个初始同步的增强功能,支持通过wal receiver协议跑COPY命令(已封装在逻辑复制的内核代码中),支持多表并行。 也就是说,你可以使用PostgreSQL的逻辑复制,快速的(流式、并行)将一个实例迁移到另一个实例。 Logical re...

开放地图OpenStreetMap与PostGIS的三生三世十里桃花

2 minute read

背景 喜欢自由吗?喜欢自由的使用全球地图吗?喜欢自由的贡献、开发全球地图吗?那你一定要来了解一下风靡全球的OpenStreetMap。谷歌最强劲的对手。 openstreetmap全球统计报告 http://wiki.openstreetmap.org/wiki/Stats#Registered_users_...

2011年功力的德哥教你两天撸通PostgreSQL - 入门、开发、原理、管理、调优

less than 1 minute read

背景 很多人抱怨我写的入门文档太少,实际上几年前做过很多入门的培训,PPT也很全,听过我讲的朋友戏称这份PPT足够出一本标准教材了(达到了380页之多)。 PostgreSQL的入门教材还有很多,书籍也很多,如果您真的钟爱我写的文章的话,那就不要错过本文了,当时是2011年,PostgreSQL社区是一个很有爱...

PostgreSQL 递归查询CASE - 树型路径分组输出

5 minute read

背景 PostgreSQL的递归查询可以解决很多树形结构,路径查询等问题。 结合PostgreSQL plpgsql编程,可以实现更加复杂的问题,比如接下来这个CASE。 用户要求输出每个末端路径涉及的所有的记录。 例子 创建测试表,插入路径数据. create table test(id seria...

MySQL不适合去O(Oracle)的原因分析

1 minute read

背景 去O从互联网逐渐蔓延到传统企业,但是MySQL适合传统企业吗?来听听某些传统用户的心声。 某些传统企业也想学互联网去O的思路,复制互联网的去O神话,但是他们自己调研了一下MySQL之后,发现这种想法并不科学。 这些弊端在PostgreSQL中并不存在,还增加了许多特性可以帮助企业降低开发量。这几年PG在...

数据库三十六计 - PostgreSQL 三十六计(下)

5 minute read

背景 PostgreSQL 三十六计 - 下 25. 数据库端编程,处理复杂业务逻辑。 在传统企业、电商、运营商等涉及用户交互、或者多个系统交互的业务场景中,通常一个事务涉及到很复杂的业务逻辑,需要保证数据的一致性,同时还需要与数据库多次交互。 比如银行开户,涉及的业务系统多,逻辑复杂。在传统企业中,通常也使用...

数据库三十六计 - PostgreSQL 三十六计(中)

1 minute read

背景 PostgreSQL 三十六计 - 中 13. 金融风控、公安刑侦、社会关系、人脉分析 等业务场景,高效实现图式数据搜索。 利用PostgreSQL函数编程,异步消息,复杂JOIN,递归查询,一对多关系存储等手段,解决高效的图式数据查询需求。 1. 猎头挖人 作为IT人士或者猎头、HR,对Linked...

数据库三十六计 - PostgreSQL 三十六计(上)

2 minute read

背景 PostgreSQL 三十六计 - 上 1. 任意字段组合查询有高招。 在业务中,任意字段组合查询的需求越来越多,也就是俗称的ADHoc查询。例如前端人机交互,根本不知道用户会对哪些字段进行检索,任意字段组合搜索、透视。为了达到查询加速效果,传统数据库需要对每一种查询组合建立多字段复合索引,导致索引非常多...

PostgreSQL 数据rotate用法介绍 - 按时间覆盖历史数据

2 minute read

背景 在某些业务场景中,数据有冷热之分,例如业务只关心最近一天、一周或者一个月的数据。对于历史的数据可以丢弃。 比如某些指标的监控场景,保留一周的监控数据,历史的都可以丢弃。 如何丢弃历史数据?或者说如何实现rotate? 1. 使用delete, 删除7天前的数据。 delete from table ...

PostgreSQL 10.0 preview 性能增强 - Write Amplification Reduction Method (WARM)消除某些情况下的INDEX写放大

4 minute read

背景 目前,PostgreSQL的MVCC是多版本来实现的,当更新数据时,产生新的版本。(社区正在着手增加基于回滚段的存储引擎) 由于索引存储的是KEY+CTID(行号),当tuple的新版本与旧版本不在同一个数据块(BLOCK)的时候,索引也要随之变化,当新版本在同一个块里面时,则发生HOT UPDATE,索...

PostgreSQL 10.0 preview 功能增强 - 后台运行(pg_background)

6 minute read

背景 当用户在管理数据库时,如果要在交互式界面跑一些QUERY,但是不知道QUERY要运行多久,担心网络问题或者其他问题导致终端断开,QUERY执行情况不明的话。就需要后台运行这个功能了。 后台运行在LINUX中也很常见,比如 nohup ls -la / >/tmp/result 2>&...

PostgreSQL 末尾数据块损坏(如pg_type pg_attribute) case

2 minute read

背景 某些用户遇到的一些问题,报读数据块错误。 ERROR: colud not read block 15 in file "base/16386/12741": read only 0 of 8192 bytes 大概的意识是,第15个数据块,没有正确的读出数据,数据为0字节。 第一反应是数据块坏...

PostgreSQL create extension with schema pg_catalog的权限异常case

less than 1 minute read

背景 pg_catalog这个schema是PostgreSQL默认的元数据schema,所有的元数据都在这里. 另一方面,pg_catalog这个schema默认就在搜索路径search_path里面,并且是删除不掉的,而且它的优先级排在所有schema的前面。 比如有两个重名的pg_class分别在这两个...

PostgreSQL 10.0 preview 功能增强 - 回滚范围可精细控制(事务、语句级)

3 minute read

背景 数据库的原子操作单位是事务,那么在一个事务中的SQL,正常情况下,应该是这样的:要么全部提交,要么全部回滚。 为了保证持久性,数据库还有一个概念,事务日志,每当事务提交时,都需要确保REDO持久化(REDO的写IO会比较多,IO延迟直接关系到tps吞吐量,特别是小事务)。 因此,有些业务,为了提高整体的...

PostgreSQL update tbl1 from tbl2 一对多的注意事项(到底匹配哪条)

1 minute read

背景 首先A表和B表需要有关联的列, 关联之后A表和B表应该是多对一或者一对一的关系, 一对一的话,很好理解。 如果是一对多会怎么样呢? 任何数据库都会给你一个不确定的答案(与执行计划数据的扫描方法有关) 测试如下 : sar=> create table a (id int primary key,...

PostgreSQL 10.0 preview 多核并行增强 - 控制集群并行度

2 minute read

背景 PostgreSQL 9.6引入多核并行,一条SQL可以使用多个CPU核,提升SQL性能。 但是多核并行一定不要滥用,因为CPU资源有限,如果单个QUERY把CPU都用光了,其他QUERY就会因为缺乏CPU资源造成性能抖动。 9.6刚出来的时候,可以控制单个gather的并行度,比如全表扫描,扫描节点算...

PostgreSQL 10.0 preview 性能增强 - mergesort(Gather merge)

6 minute read

背景 在数据库中,经常会有多个节点append,然后sort的情况。 例如一张表有10个分区,查询所有分区,并按某列排序输出,常规的做法是所有的记录append,然后sort。 PostgreSQL 10.0 将支持append node的并行计算,也就是说所有的分区表可以并行的sort,然后返回,此时就可以...

PostgreSQL 10.0 preview 性能增强 - CLOG group commit

4 minute read

背景 clog是PostgreSQL的事务提交状态日志,每个事务对应2个BIT,当事务频繁(小事务)结束时,可能出现CLOGControlLock 冲突的问题。 虽然增加clog buffer可以缓解,PostgreSQL 10.0 采样clog group commit进一步降低这个冲突。 提升高并发下的T...

PostgreSQL 10.0 preview 功能增强 - OLAP增强 向量聚集索引(列存储扩展)

4 minute read

背景 未来数据库OLTP+OLAP逐渐模糊化,需求逐渐融合是一个大的趋势,如果你的数据库只支持OLTP的场景,未来可能会成为业务的绊脚石。 在这方面PostgreSQL每年发布的新版本,都给用户很大的惊喜,OLTP已经具备非常强大的竞争力(性能、功能、稳定性、成熟度、案例、跨行业应用等),而OLAP方面,新增的...

PostgreSQL 10.0 preview 功能增强 - identify column (SQL标准:T174)

less than 1 minute read

背景 identify column类似PostgreSQL的serial, (自增\减序列). identify column(s)属于SQL标准中的某个特性。 PostgreSQL 10.0将实现这一标准,虽然你已经可以使用serial来达到同样效果,不过实现这一标准,可以兼容更多的数据库。 对于从其他数...

PostgreSQL 10.0 preview 功能增强 - 分区表(list default)

1 minute read

背景 PostgreSQL 10.0将支持range,list分区表,同时hash分区处于POC阶段(同时还有一些需要改进的地方,例如优化器部分)。 如果你使用的是10.0以前的版本,可以使用pg_pathman插件实现分区,pg_pathman已经非常的完美。 PostgreSQL支持伪表作为分区,例如外部...

PostgreSQL 10.0 preview 功能增强 - 分区表(hash,range,list)

3 minute read

背景 PostgreSQL 10.0将支持range,list分区表,同时hash分区处于POC阶段(同时还有一些需要改进的地方,例如优化器部分)。 如果你使用的是10.0以前的版本,可以使用pg_pathman插件实现分区,pg_pathman已经非常的完美。 PostgreSQL支持伪表作为分区,例如外部...

PostgreSQL 10.0 preview 功能增强 - 支持EUI-64格式MAC地址类型

1 minute read

背景 PostgreSQL 是全球最先进的开源数据库,所谓先进,体现在很多方面: 支持扩展类型 支持扩展操作符 支持扩展函数 支持扩展窗口 支持扩展聚合 支持扩展采样 支持扩展扫描 支持扩展索引,内置8种索引 支持扩展访问方法 支持扩展插件 支持扩展。。。。。。 支持丰富的SQL标准 支...

PostgreSQL 10.0 preview 功能增强 - JSON 内容全文检索

less than 1 minute read

背景 PostgreSQL 10.0 支持JSON内容的全文检索了。 同样支持ts rank和phrase 索引哦。 ts rank, phrase请参考 《从难缠的模糊查询聊开 - PostgreSQL独门绝招之一 GIN , GiST , SP-GiST , RUM 索引原理与技术背景》 ``` Hi...

PostgreSQL 10.0 preview 性能增强 - 间接索引(secondary index)、二级索引

4 minute read

背景 我们知道,PostgreSQL的MVCC是多版本来实现的,当更新数据时,产生新的版本。 那么如果新版本不在同一个数据块的时候,索引也要随之变化,当新版本在同一个堆表的块里面时,则发生HOT UPDATE,不需要变更没有发生值改变的索引。 但是HOT总不能覆盖100%的更新,所以还是有索引更新的可能存在。...

PostgreSQL 10.0 preview 功能增强 - slave提前苏醒

less than 1 minute read

背景 PostgreSQL 数据库的WAL为重做日志,如果数据库CRASH,那么需要等待WAL来恢复数据库,只有当数据库恢复到一致状态时,才能将数据库唤醒(或者说此时数据库才是一致的)。 数据库被唤醒后(promote),客户就可以对数据库执行查询、增删改查的动作了。 那么如果数据库需要apply很多的WAL...

PostgreSQL 10.0 preview 流复制增强 - 支持可配置的wal send max size

less than 1 minute read

背景 以前的版本,wal sender进程使用流复制协议,将WAL信息发送给下游的wal receiver进程时,一次最多发送128KiB,是在宏中设置的。 现在允许用户设置GUC参数,来控制这个最大值。 在测试环境中设置为16MB有2倍的性能提升,可以更好的利用网络带宽,提升流复制的传输效率。 Attac...

PostgreSQL 10.0 preview sharding增强 - 支持Append节点并行

3 minute read

背景 Append节点通常出现在多个表union , union all或者查询包含多个分区的主表时。 需要对每个子表,或者每个subquery进行查询,然后在将结果合并。 PostgreSQL 10.0增加了一个并行模式即Append节点的并行,多个Append节点,可以并行的执行。、 从而大大的提升效率...

PostgreSQL 10.0 preview 优化器改进 - 不完整索引支持复合排序

3 minute read

背景 当我们在使用数据库时,排序是一个比较常见的需求,排序有几种方法,使用索引,或者访问堆表然后显示的排序。 当使用索引排序时,索引必须包含排序列,同时必须是驱动列包含排序列。 例如 order by a,b,c,那么可使用索引(a,b,c,*) 但是order by a,b,c能使用索引(a,b...

PostgreSQL 10.0 preview sharding增强 - postgres_fdw 多节点异步并行执行

2 minute read

背景 PostgreSQL 10.0的sharding增强,比如聚合函数的下推算一个。 现在又带来了一个核武器级别的增强,postgres_fdw的异步化调用。 为什么说是核武器级别的呢,比如你有16个sharding节点(对应postgres_fdw的16个库),10.0以前,如果我需要执行一个QUERY涉...

PostgreSQL 10.0 preview 功能增强 - 自动预热shared buffer (auto prewarm)

1 minute read

背景 数据库的shared buffer可以用来存储经常使用的数据块,以提升效率。通过LRU算法老化不常用的数据块。 因此在生产数据库中,SHARED BUFFER中通常是热数据。 数据库如果重启,或者发生主备切换,缓存中的热数据需要从磁盘(或者OS PAGE CACHE)重新载入数据库的shared buf...

PostgreSQL 10.0 preview 功能增强 - QUERY进度显示

1 minute read

背景 query进度的显示,有一个插件pg_query_state支持。 PostgreSQL 10.0将在内核层面增加一个这样的支持。 首先会在analye命令上尝试,但是它会设计为通用的视图,支持其他命令,诸如CREATE INDEX, VAUUM, CLUSTER等。 Hello Hackers, ...

PostgreSQL 数据文件灾难恢复 - 解析与数据dump

6 minute read

背景 俗话说常在河边站哪有不湿鞋,作为一名战斗在一线的DBA或者开发者,可能有遇到过磁盘损坏,磁盘阵列损坏,如果有备份或者备库的话,还好。 如果没有备份,或者没有备库(通常有一些小型或者创业型的企业),那么遇到磁盘损坏或者其他原因(比如掉电文件系统损坏),导致数据库的数据文件并不完整时,如何从有限的资料中找出数...

PostgreSQL 区块链条管理举例

4 minute read

背景 区块链的概念请参考 https://github.com/yeasy/blockchain_guide/blob/master/intro/what.md 截取部分如下 什么是区块链 区块链的基本原理理解起来并不难。基本概念包括: 交易(Transaction):一次操作,导致账本...

PostgreSQL 数据库巡检

1 minute read

背景 PostgreSQL数据库的巡检脚本在这里,自动生成txt格式巡检报告(包括采集项以及建议项目)。 https://github.com/digoal/pgsql_admin_script/blob/master/generate_report.sh 巡检项目前包括了如下: |++++++++++++...

PostgreSQL Windows和Linux的数据文件通用吗

3 minute read

背景 PostgreSQL是一个跨平台的数据库,比如支持WindowS, AIX , linux , freebsd等。 同时也支持不同架构例如X86,ARM等。 对于相同架构,不同平台,是否能实现文件级别的平移,甚至物理的流复制搭建STANDBY呢? 理论上从数据库的存储层面来看,如果两个平台存储结构(比...

连接PostgreSQL时,如何指定参数

less than 1 minute read

背景 连接数据库时,如何配置默认参数? libpq https://www.postgresql.org/docs/9.6/static/libpq-connect.html#LIBPQ-CONNSTRING 所有支持的连接参数都在以上链接中 KV模式 配置连接串时,可以使用KV模式,例子 host=lo...

数据透视 - 商场(如沃尔玛)选址应用

10 minute read

背景 人群透视是商业与数据结合的案例之一,比如大型商场的选址,可与分析的数据包括车流、人流量等等。 结合数据可以更深入的分析人群的组成结构,消费能力等等,给大型商场的选址带来更多的参考价值。 那么如何使用数据库透视人群数据呢? 场景构建 1. 人群属性表 记载了每个人的各个属性段落,比如收入、车龄...

PostgreSQL业务函数代码版本管理 - 自动备份存储过程、函数代码到SVNgithub…

6 minute read

背景 市面上有很多代码的版本管理软件,比如gitlab, github, svn等等。 商业数据库的编程能力较强,比如Oracle的PL/SQL,很多传统企业会将对一致性、可靠性要求非常高的业务逻辑放到数据库中,这就造成了数据库内不仅仅存储数据,也存储了部分业务代码。 PostgreSQL 作为开源界最高级的...

pidstat 统计进程、线程、进程组的资源消耗

8 minute read

背景 如果我们要查看Linux下面进程、进程组、线程的资源消耗的统计信息,可以使用pidstat,它可以收集并报告进程的统计信息。 pidstat实际上也是将/proc/pid下的统计信息统筹后展现给用户。 pidstat例子 1. 列出IO统计信息:-d 2. 列出内存使用统计,page fault:-...

PostgreSQL 备库apply延迟(delay)原理分析与诊断

4 minute read

背景 开车的同学都喜欢一马平川,最好是车道很多,车很少,开起来爽。 大家想象一下,同样的车速,6车道每秒可以通过6辆车,而1车道每秒就只能通过1辆车。 好了,我们回到IO层面,我们在使用fio测试块设备的IO能力时,可以选择多少个线程进行压测,实际可以理解为开多少车道的意思。 只要没到通道或者设备本身的...

PostgreSQL bitmapAnd, bitmapOr, bitmap index scan, bitmap heap scan

6 minute read

背景 在PostgreSQL中,多个单列索引是可以用在组合查询SQL中的,也就是说实现了bitmap scan。 比如 select * from tbl where c1=1 and c2=1 or c3=1; 用到了3列,如果这3列分别有一个索引,那么PostgreSQL会使用这三个索引的bitmap ...

PostgreSQL GIN 单列聚集索引 应用

2 minute read

背景 聚集存储比较好理解,数据按照聚集KEY存储在一个或相邻的数据块中,对聚集KEY的轨迹、行为数据检索可以大幅减少IO。 那么聚集索引呢?我们知道通常BTREE索引中存储的是KEY以及对应数据的堆表行号,每条记录一个索引条目。 而GIN索引也是树结构,只不过它对于单个KEY只存储一个条目,所有行号会存储到一...

PostgreSQL 向量化执行插件(瓦片式实现-vops) 10x提速OLAP

10 minute read

背景 在主流的OLTP数据库产品中,毫无疑问,PostgreSQL已经具备非常强大的竞争力(性能、功能、稳定性、成熟度、案例、跨行业应用等)。 《数据库选型之 - 大象十八摸 - 致 架构师、开发者》 《数据库选型思考》 《数据库界的华山论剑 tpc.org》 《PostgreSQL 前世今生》 在OL...

PostgreSQL 聚集存储 与 BRIN索引 - 高并发行为、轨迹类大吞吐数据查询场景解说

15 minute read

背景 在现实生活中,人们的各种社会活动,会产生很多的行为数据,比如购物、刷卡、打电话、开房、吃饭、玩游戏、逛网站、聊天 等等。 如果可以把它当成一个虚拟现实(AR)的游戏,我们所有的行为都被记录下来了。 又比如,某些应用软件,在征得你的同意的情况下,可能会记录你的手机行为、你的运动轨迹等等,这些数据可能会不...

PostgreSQL Oracle 兼容性之 - 函数、类型、多国语言

6 minute read

背景 PostgreSQL的FDW支持在PostgreSQL中使用外部表的方式直接访问其他数据源的数据,就如同访问本地表一样。 FDW接口是开放的,所以任何人都可以开发对应外部数据源的接口,比如oracle_fdw就是用来访问Oracle数据库的。 FDW开发接口中,代码中会包括数据的转换,函数的转换,等 ...

PostgreSQL 天文插件 - pg_sphere

4 minute read

背景 在天文或GIS领域,找出某个位置附近的对象,或者找到两张表的位置互相关的数据,是非常普遍的需求。 在PostgreSQL中有很多方法可以实现以上需求。 比如 http://skyview.gsfc.nasa.gov/xaminblog/index.php/tag/pgsphere/ Haver...

[转载]sysctl加载配置顺序问题

1 minute read

背景 原文 https://blog.tankywoo.com/2015/01/29/sysctl-load-order.html 正文 系统Gentoo, 最近遇到一个比较离奇的问题. 网关机器的sysctl运行时配置中,net.ipv4.ip_forward被改为0, 原来是1; net.ipv4.co...

PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化

4 minute read

背景 数据库是一种非常庞大的应用系统,就拿PostgreSQL来说,每个实体对象(物化视图、表、序列、索引、TOAST表、TOAST索引)都需要至少1个数据文件,还需要fsm, vm等辅助文件。 当数据库中有很多实体对象时,文件数会非常庞大,而对于Linux操作系统来说,单个进程的打开文件数是有限制的。Post...

PostgreSQL 2017 2月份 相关新闻

1 minute read

背景 PostgreSQL近几年的发展有目共睹,从GIS到物联网、流式计算、多维分析、高并发在线事务处理、服务端编程、任意数据类型的抽象处理、扩展索引方法、GPU运算能力的利用等各个方面体现了PostgreSQL的强大功能和性能。从dbranking的分值也可以得到证明,毫无疑问是2016年度发展最快的数据库。 ...

PostgreSQL、Greenplum DML合并操作 最佳实践

6 minute read

背景 在很多场景中会涉及到数据的合并,比如 1. 某业务系统的总用户有1亿,每天的活跃用户有100万,新增用户10万,每天需要将新增、活跃用户的数据(比如他们的余额变化、等等)合并到数据仓库的用户信息表。 2. 物化视图,某个表被用户不断的增、删、改。需要将这个表(基表)的某些字段或者某部分数据提取到一个物化...

数据库选型之 - 大象十八摸 - 致 架构师、开发者

6 minute read

背景 数据库对于一家企业来说,相比其他基础组件占据比较核心的位置。 有很多企业由于最初数据库选型问题,导致一错再错,甚至还有为此付出沉痛代价的。 数据库的选型一定要慎重,但是这么多数据库,该如何选择呢? 我前段时间写过一篇关于数据库选型的文章,可以参考如下 《数据库选型思考》 另外,PostgreSQL...

PostgreSQL MySQL 数据类型映射

5 minute read

背景 通常一家企业会有比较多的数据库品种,最为常见的如MySQL, PostgreSQL。 那么在不同的产品之间,如果有数据的相互同步,就涉及到类型的映射了。 对于PostgreSQL来说,可以使用PostgreSQL的mysql_fdw外部插件来实现同步,产品设计会简化很多。 而对于MySQL来说,可能就...

PostgreSQL 表和列权限(ACL)解读

3 minute read

背景 如何查看数据库中的表的相应权限,已经赋予给哪些用户了。 另外,PostgreSQL还可以针对列进行赋权,还可以适应行安全策略,所以如何查看某张表的某些列的相应权限被赋予给哪些用户了。 还有其他的对象,如视图、函数、语言等,他们的权限被赋予给哪些数据库用户了呢? 这些通过psql \dp很容易实现,但是...

[转自叶大师博文] tpcc-mysql安装、使用、结果解读

2 minute read

背景 很多的MySQL测试都是拿sysbench做的,甚至很多人认为数据库的测试都应该用sysbench来做。但实际上并非如此。 sysbench的test case偏简单,也没有建立什么测试标准,它是一个个人软件,由于MySQL的风靡使得很多人认识了sysbench。 事实上sysbench并不是数据库行业...

PostgreSQL Oracle 兼容性之 - 内核自带的兼容函数

3 minute read

背景 PostgreSQL功能上基本可以和Oracle对齐,只是一些语法或者函数名不一样,所以为了做到兼容,有一些兼容包和兼容函数的出现。 PostgreSQL自带了一些Oracle兼容函数,如果你觉得不够意思,可以通过orafce插件继续扩展PostgreSQL与Oracle的兼容性(本文不涉及orafce包...

PostgreSQL 10.0 preview 流复制增强 - 流式接收端在线压缩redo

3 minute read

背景 虽然现在磁盘已经很廉价,大多数时候不需要压缩了。 但是在一些嵌入式系统,或者一些未扩容的产品环境中,压缩还是非常有必要的。 特别是数据变化大、或者数据增量大的场景,例如物联网(IoT),每天单库可能新增TB级的增量。 比如 《PostgreSQL 如何潇洒的处理每天上百TB的数据增量》 指的就是IoT...

宝剑赠英雄 - 任意组合字段等效查询, 探探PostgreSQL多列展开式B树 (GIN)

26 minute read

背景 很多人小时候都有一个武侠梦,独孤求败更是金庸武侠小说里的一位传奇人物。 纵横江湖三十馀载,杀尽仇寇奸人,败尽英雄豪杰,天下更无抗手,无可奈何,惟隐居深谷,以雕为友。 呜呼,生平求一敌手而不可得,诚寂寥难堪也。 独孤老前辈的佩剑描写非常有意思,从使用的佩剑,可以看出一个人的武功修为。 第一柄是一柄青光闪...

PostgreSQL GIN索引实现原理

14 minute read

背景 本文参考并扩展自如下文档,修正了一些内容(大多数是由于版本不同造成的差异) 《PostgreSQL数据库内核分析》 ( 成书较早,大量内容基于8.4的代码编写 ) 以及 http://zisedeqing.blog.163.com/blog/static/95550871201621623458216...

PostgreSQL GIN multi-key search 优化

6 minute read

背景 PostgreSQL中,有一种GIN索引,被广泛应用于多值类型,例如数组,分词,同时也被应用于模糊查询等领域。 gin索引,将列(比如数组,全文检索类型)中的值拿出来,再存储到树形结构中(类似B-TREE,键值+heap行号s),对于低频值,会作为posting list直接存在树的gin的叶子节点中,而...

Gitlab从删库到恢复 - 数据库备份恢复容灾HA的靠谱姿势

1 minute read

背景 如果你是身处数据库行业的朋友,最近可能被朋友圈的各种关于 “炉石数据被删” 、 “mongoDB遭黑客勒索” 的事件刷屏。 而就在今天(2017-02-01)事情再一次升华, “gitlab 数据库的数据文件被rm -rf误删”,数据库的恢复过程和细节有直播视频,请参考gitlab的官方解释,以免以讹传讹...

聊聊between and的坑 和 神奇的解法

5 minute read

背景 曾经一位社区的兄弟跟我抱怨MySQL里面查IP地址库并发几千每秒的查询数据库就抗不住了。 于是问他要来了他们的IP地址库数据和查询用的SQL以及MySQL里面的表结构。 我也想把数据转到PostgreSQL里面做一下相对应的压力测试,看看PostgreSQL的表现。 在其他的业务中,这样的需求也是屡见...

log4j 配置

5 minute read

背景 Log4j是Apache的一个开源项目,通过使用Log4j,可以控制将应用日志信息输送到: 控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程、数据库等; 可以控制每一条日志的输出格式; 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 ...

数据库界的华山论剑 tpc.org

19 minute read

背景 飞雪连天射白鹿,笑书神侠倚碧鸳。 金庸老先生果然好功夫,武侠名著的首字串起来也是一首好湿。 在很多的武侠小说中,都有武林盟主的角色(虽然通常为反派),既然是武林,武林盟主除了综合素质,人脉,武功当然也不能差。 很多小说中武林盟主通常就是比武决出的,比如耳熟能详的华山论剑。 玩过金庸群侠传...

蜂巢的艺术与技术价值 - PostgreSQL PostGIS’s hex-grid

3 minute read

背景 人们为了更好的描述一个东西,有一种将大化小的思路,比如时钟被分为了12个区域,每个区域表示一个小时,然后每个小的区域又被划分为更小的区域表示分钟。 在GIS系统中,也有类似的思想,比如将地图划分成网格。通过编码来简化地理位置的判断(比如相交,包含,距离计算等),但是请注意使用网格带来的问题,比如精度的...

脑王水哥王昱珩惜败人工智能, 这不可能. - 图像识别到底是什么鬼

less than 1 minute read

背景 水哥王昱珩不用多介绍,在最强大脑第六期晋级赛第五场,在“微观辨水”环节中,520杯同质同量同水源的水被他一眼辨认出,Dr.魏给出9分难度分,最终王昱珩以117分晋级。 随后的中日PK赛中的“扇面识别”环节中,王昱珩选择放弃观察,最终在第一轮中国队0:1落后的情况下,战胜日本队原口证为中国队扳回1分。 ...

DBA一族九阳神功秘籍,标准和制度(含重大节假日应急预案)

2 minute read

背景 如果你是数据库这个行业的朋友,最近可能会被朋友圈的各种关于 “炉石数据被删” 、 “mongoDB遭黑客勒索” 、 “gitlab数据文件被rm -rf” 的事件刷屏。 数据库在是企业中占据非常重要的位置,发生数据库被SQL注入,数据被误删的事情,不仅仅影响业务,还可能造成用户的信息被泄露。 DBA一族...

小鸡吉吉小猪佩吉小象Pi吉(PostgreSQL) 祝大家吉祥如意,幸福安康,阖家欢乐!

1 minute read

背景 我家有只小鸡鸡,它的名字叫吉吉。 吉吉有一位铁杆鸡友大象Pi吉哥哥(PostgreSQL)。 吉吉给大伙拜年啦,祝大家鸡年吉祥,新年新气息,与好鸡友大象哥哥愉快的玩耍,鸡情四射。 故事从吉吉和好鸡友大象哥哥偶遇的那天开始。 有一天,大象哥哥摆下国际象棋擂台,邀请各路英豪前来,就这样和吉...

PostgreSQL结合余弦、线性相关算法 在文本、图片、数组相似 等领域的应用 - 1 文本(关键词)分析理论基础 - TF(Term Frequency 词频)/IDF(Inverse Document Frequency 逆向文本频率)

8 minute read

背景 很多网站有标签的功能,会根据网页自动生成标签,标签实际上就是该网页的关键词,比如一个卖手机的网页,那么标签是如何生成的呢? 在一篇文档里面,是不是出现越多的词,就越是关键词呢? 比如在中文里面的、是、我、你可能出现次数是比较多的,它们很显然不是关键词,这些属于stop word,是需要被忽略的。 ...

从电波表到数据库小程序之 - 数据库异步广播(notify/listen)

2 minute read

背景 小时候就梦想有个酷酷的电波表(虽然现在还没有拥有),不过电波表和PostgreSQL有什么关系呢?听我道来。 http://baike.baidu.com/view/1124741.htm 电波表内置高感度小型天线,接收标准电波进行自动对时,因而可以实现时间上的精准。在国际上,德国、英国、美国、日本...

从微信小程序 到 数据库小程序 , 鬼知道我经历了什么

3 minute read

背景 微信小程序最近比较火,大概以后大家都不需要安装程序了,直接在微信中调用运行。跑在微信里的小程序类似一个虚拟机或者一个Docker容器,这是腾讯要分APP store蛋糕的节奏吗? 从技术角度来看,微信小程序带来了几个好处,不需要安装软件,用户不需要进行软件的版本管理,节省了一点点手机的空间,同时还降低了流...

(AR虚拟现实)红包 技术思考 - GIS与图像识别的完美结合

2 minute read

背景 作为搞IT的小伙伴们,对虚拟现实(AR)应该并不陌生,这次带来了一个很有趣的功能,虚拟现实与藏红包结合起来。 简单介绍一下这个业务,然后我们再来思考背后的技术。 (AR虚拟现实)藏红包、找红包 玩法介绍 想象一下,你可以把你的红包藏在世界各地的任意角落,让全世界的人来找红包,是不是一件很有趣的事情。 ...

导购系统 - 电商内容去重内容筛选应用(实时识别转载盗图侵权?) - 文本、图片集、商品集、数组相似判定的优化和索引技术

10 minute read

背景 同一个热点事件,可能有很多的媒体报道。 同一篇好的文章,可能被多人转载。 一个商品、或者同一堆商品,可能会被诸多广告平台、导购平台推送。 导购网站、新闻媒体、技术论坛、搜索引擎,充斥着各种李逵、李鬼。相似甚至内容完全相同的文章或者图片集等。 不涉及利益时,这些都不是大问题。一旦涉及利益,这些问题可能...

PostgreSQL psql 安全设置数据库用户密码的方法之一

2 minute read

背景 密码有多重要就不需要多说了,但是你知道密码有多少可能泄露的渠道吗? 大多数人可能觉得在设置好密码后,保管好不被泄露就可以了。 但是你有没有想过,在设置密码的过程中就泄露了呢? 比如数据库中设置用户密码,有多少种可能泄露的渠道? 比如,我们在修改数据库用户密码时,可能经历这么长的流程才能最终将新的密码...

Linux cgroup - memory子系统讲解

11 minute read

背景 Linux是一个很好的多用户平台,但是当我们在Linux中运行多个资源耗费很大的应用(比如数据库)时,应用间的资源争抢可能就比较严重。 那么有什么好的方法可以隔离不同应用之间的资源使用呢?cgroup是一个不错的选择。 cgroup目前已支持 cpu, 网卡, memory, io, 硬件设备 的隔离,...

PostgreSQL 如何只监听unix socket?

3 minute read

背景 可能出于某些原因(例如避免数据库的本机用户跨用户通过IP地址访问,而只通过LINUX文件权限来保护数据库的连接权限等),用户只需要监听unix socket,而不期望监听任何IP(包括127.0.0.1)。 怎么做呢? 配置 配置是很简单的,只需要把listen_addresses设置为空就可以了。 ...

PostgreSQL 数据库扩展语言编程 之 plpgsql - 1

7 minute read

背景 PostgreSQL是一个开放的数据库,开发性表现在支持自定义数据类型、索引方法、索引、操作符、聚合、窗口、服务端编程语言等等。 所以我们可以看到在PostgreSQL的生态中有很多贴近业务的用法,比如在PostgreSQL中存储和处理化学分子、存储和处理图像、存储和处理基因数据、存储和处理文本(包括正则...

PostgreSQL C tutorial

16 minute read

背景 转自 http://zetcode.com/db/postgresqlc/ 正文 This is a C programming tutorial for the PostgreSQL database. It covers the basics of PostgreSQL programming wit...

PostgreSQL PHP tutorial

22 minute read

背景 转自 http://zetcode.com/db/postgresqlphp/ 正文 This is a PHP tutorial for the PostgreSQL database. It covers the basics of PostgreSQL programming with PHP. T...

PostgreSQL Ruby tutorial

13 minute read

背景 转自 http://zetcode.com/db/postgresqlruby/ 正文 This is a Ruby programming tutorial for the PostgreSQL database. It covers the basics of PostgreSQL programmi...

PostgreSQL Python tutorial

19 minute read

背景 转自 http://zetcode.com/db/postgresqlpythontutorial/ 正文 This is a Python programming tutorial for the PostgreSQL database. It covers the basics of PostgreS...

PostgreSQL Java tutorial

33 minute read

背景 转自 http://zetcode.com/db/postgresqljavatutorial/ 正文 This is a Java tutorial for the PostgreSQL database. It covers the basics of PostgreSQL programming w...

PostgreSQL 全表 全字段 模糊查询的毫秒级高效实现 - 搜索引擎颤抖了

4 minute read

背景 在一些应用程序中,可能需要对表的所有字段进行检索,有些字段可能需要精准查询,有些字段可能需要模糊查询或全文检索。 比如一些前端页面下拉框的勾选和选择。 这种需求对于应用开发人员来说,会很蛋疼,因为写SQL很麻烦,例子: 之前写过一篇文章来解决这个问题 《PostgreSQL 行级 全文检索》 使用...

PostgreSQL 在被除数=0时的小纯真和小倔强

less than 1 minute read

背景 0不能作为被除数,小学就学过的知识。 对于数据库来说,设计严谨,遵循一些基本的原则也是很有必要的。 当在数据库中除以0时,应该如何处理呢? PostgreSQL为例,它具有非常浓烈的学院派风格,你说它你能让你除以0吗? 显然不让,如下: postgres=# select 1/0; ERROR...

PostgreSQL != , <> 索引

6 minute read

背景 在数据库中不等于能不能走索引呢?理论上是不行的,但是有方法可以让不等于也走索引(虽然走索引也不一定好)。 比如使用外连接实现(需要表有PK才行,没有PK可以使用行号代替),或者使用not exists,或者使用partial index(不支持变量)。 对于返回结果集很大的场景,建议使用游标分页返回,此...

想挑战AlphaGO吗?先和PostgreSQL玩一玩?? PostgreSQL与人工智能(AI)

4 minute read

背景 想必很多朋友这几天被铺天盖地的AI战胜60位围棋高手的新闻,我们不得不承认,人工智能真的越来越强了。 http://wallstreetcn.com/node/283152 1月4日晚,随着古力认输,Master对人类顶尖高手的战绩停留在60胜0负1和,而令人尴尬的是这唯一一场和棋还是因为棋手掉线系统自...

PostgreSQL DISCARD SEQUENCES

4 minute read

背景 PostgreSQL当前版本(9.3以及9.3以下版本)DISCARD没有discard sequence的功能. 即使DISCARD ALL也不会. 9.4会不会加入这个补丁, 现在还不确定, 要看committer是否能同意将之提交. 例子 digoal=# create sequence seq_...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 9

3 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 8

6 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 7

less than 1 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 6

11 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 5

7 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 4

14 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 3

8 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 2

3 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

PostgreSQL 流式数据处理(聚合、过滤、转换…)系列 - 1

20 minute read

背景 2013年帮朋友做的方案。写了一些列文档来解决当时某个大数据BI平台的异步流式数据处理的功能。 逐步优化,化繁为简。 在业务层面,统计,数据的过滤,数据的清洗,数据的事件触发等。是比较常见的需求。 比如以COUNT就是一个很典型的例子。 在9.2以前全表的count只能通过扫描全表来得到, 即使有p...

在OOM现场 谈一谈数据库内存分配, 以及审计的重要性

10 minute read

背景 数据库是比较重内存的应用软件之一,比如排序、聚合、使用较大的列、使用很长的SQL(值SQL本身的内容长度),或者传入很大的变长类型值时,都可能使得单个连接就会消耗很大的内存。 而另一方面,每个连接会消耗一定的内存,比如SYSCACHE , RELCACHE,随着访问的对象变多,如果是长连接,消耗的内存也会...

ApsaraDB的左右互搏(PgSQL+HybridDB+OSS) - 解决OLTP+OLAP混合需求

3 minute read

背景 随着IT行业在更多的传统行业渗透,我们正逐步的在进入DT时代,让数据发挥价值是企业的真正需求,否则就是一堆废的并且还持续消耗企业人力,财力的数据。 传统企业可能并不像互联网企业一样,有大量的开发人员、有大量的技术储备,通常还是以购买IT软件,或者以外包的形式在存在。 数据的核心 - 数据库,很多传统的行...

PostgreSQL 10.0 preview - 截至2017元旦装备了哪些核武器

9 minute read

背景 早上送给大家的新年大礼包,一年一个大版本是PostgreSQL社区的传统,虽然发布时间通常为秋天,还有一段时间,但是已经迫不及待地想看看2017金秋将要发布的10.0版本已经装备了哪些核武器。 放心,还会有一波又一波的feature和增强搭上开往2017金秋的列车,本文提到的可能只是其中的某一节车厢沃,P...

Back to Top ↑

2016

PostgreSQL 重复 数据清洗 优化教程

10 minute read

背景 重复数据清洗是一个比较常见的业务需求,比如有些数据库不支持唯一约束,或者程序设计之初可能没有考虑到需要在某些列上面加唯一约束,导致应用在上线一段时间后,产生了一些重复的数据。 那么重复数据的清洗需求就来了。 有哪些清洗手段,如何做到高效的清洗呢? 一个小小的应用场景,带出了10项数据库技术点,听我道来...

轻松打爆netfilter conntrack table的Greenplum SQL

1 minute read

背景 Greenplum 是一款MPP数据库,数据哈希打散存放在数据节点,当执行JOIN时,如果JOIN字段非分布键,那么数据会在数据节点之间重分布。重分布使用四阶段方法,参考如下: 《分布式DB(Greenplum)中数据倾斜的原因和解法 - 阿里云HybridDB for PostgreSQL最佳实践》 ...

netfilter内核模块知识 - 解决nf_conntrack: table full, dropping packet

9 minute read

背景 netfilter是一个Linux内核网络包管理模块。支持包过滤、规则转发、会话状态跟踪等功能。 很多人可能遇到过nf_conntrack table full, dropping packet的问题,(正常情况下不应该出这样的问题,除非是DDos攻击,把netfilter的会话跟踪表打满了),又或者应用...

Linux 时钟精度 与 PostgreSQL auto_explain (explain timing on Linux时钟开销估算)

6 minute read

背景 我们在诊断SQL的执行计划时,通常会用explain analyze,analyze有几个开关,其中一个是timing,它会帮你记录下SQL每个NODE的执行时间。 但是这部分是有一定的性能开销的,而且这个开销与操作系统的时钟获取接口有关。 有时,你会发现explain analyze的执行时间远大于真...

从天津滨海新区大爆炸、危化品监管聊聊 IT人背负的社会责任感

4 minute read

背景 缘分所致,前几天与一些来自ING行业的企业做了一次深入的交流,有感而发,写下本文。 其实技术和业务相互依赖,相互推动着各自的发展。哪一个发明不是从自嗨开始的呢,作为IT人不应该故步自封,敞开胸怀,承担更多的社会责任,一起来推动社会变革吧。 天津滨海大爆炸只是危化品事故的其中之一,看看事故后的一片狼藉...

从真假美猴王谈起 - 让套牌车、克隆x 无处遁形的技术手段思考

2 minute read

背景 西游记想必大家小时候都看过吧,其中有一集“真假美猴王”还记得吗? 假的美猴王简直是克隆的,和孙悟空一模一样。一开始菩提祖师、如来佛祖、观音菩萨、就连最亲近的师父、师兄弟都分辨不出来,最后师父使出紧箍咒的绝招才辨别出来。 打假在现实世界中的需求也非常旺盛,诸如我们看到的一些商品的防伪码验证、水印验证、...

恭迎万亿级营销(圈人)潇洒的迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计

9 minute read

背景 我们仅用了PostgreSQL的两个小特性,却解决了业务困扰已久的大问题。 推荐系统是广告营销平台的奶牛,其核心是精准、实时、高效。 这么多广告平台,到底谁家强?谁的核心牛逼? 1. 精准,指对用户的描述精准,通常需要基于大量的用户行为数据,经历深度学习后形成的用户画像,或称之为标签系统。 标签的准确...

DBA专供 冈本003系列 - 数据库安全第一,过个好年

less than 1 minute read

背景 快过年了,安全第一。先给DBA们的冈本003系列,请收好了,并提前祝大伙们过个好年。 通常数据库在是企业中占据非常重要的位置,既然这么重要,当然要保护好,否则数据库被注入,数据被误删就不好看啦,不仅仅影响业务,还可能造成用户的信息被泄露。 本文本的本意是想写PostgreSQL数据库的某些安全特性的,提...

聊一下PostgreSQL优化器 - in里面有重复值时PostgreSQL如何处理?

3 minute read

背景 比如某个业务APP收集了用户的位置信息,在数据库中会有用户去过的地方的一些行为日志数据。 现在要找出今天某些用户群体去过了哪些地方。 会发生什么呢? 一个人在某一个地点可能会上报很多条数据,同时不同的人也可能会去过同一个地点,因此同一个地名可能会有多条重复记录。 所以如果使用这样的查询,会导致IN里...

从相似度算法谈起 - Effective similarity search in PostgreSQL

5 minute read

背景 相似度分析是一个非常普遍的需求,例如根据用户提供的线索,从一堆文本数据、图片数据、视频数据中筛选一段与用户的描述相近的。 我之前写过一系列的文章来介绍,文本、图片相似度搜索的技术和使用场景。 《PostgreSQL 在视频、图片去重,图像搜索业务中的应用》 《弱水三千,只取一瓢,当图像搜索遇见Post...

一场IT民工 与 人贩子 之间的战争 - 只要人人都献出一点爱

1 minute read

背景 快过年啦,提防人贩子,小孩要带好。 有两部片子《失孤》、《亲爱的》拍得触目惊心。 很多家庭耗尽时间和金钱,找了很多年还是没有找到,最终选择了放弃。 社会中依旧还有很多爸爸妈妈还没有找到丢失的孩子,除了严打罪犯;作为IT人,我们能做什么吗 ? 为什么人贩子猖獗?如何才能让人贩子无处遁形? 这...

Linux page allocation failure 的问题处理 - lowmem_reserve_ratio

6 minute read

背景 Linux把物理内存划分为三个层次来管理:存储节点(Node)、管理区(Zone)和页面(Page)。 每一个Node,系统又将其分为多个Zone,x86架构下,node被分为ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM,而64位x86架构下有ZONE_DMA、ZONE_DMA32、...

流计算风云再起 - PostgreSQL携PipelineDB力挺IoT

6 minute read

背景 pipelinedb是基于PostgreSQL的一个流式计算数据库,纯C代码,效率极高(32c机器,单机日处理流水达到了250.56亿条)。同时它具备了PostgreSQL强大的功能基础,正在掀起一场流计算数据库制霸的腥风血雨。 在物联网(IoT)有非常广泛的应用场景,越来越多的用户开始从其他的流计算平台...

Oracle log file parallel write 等待事件分析 - PostgreSQL的WAL异曲同工

6 minute read

背景 数据库的可靠性是关系数据库的命脉之一,为了保证数据库的可靠性,重做日志是非常关键的技术,消除随机写,确保事务成功提交前,事务产生的日志都已经落盘。 因为每个变更产生的REDO都要落盘,所以REDO WRITE在某些情况下也很容易成为瓶颈,REDO WRITE也产生了很多优化技术。 Oracle log ...

分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱

22 minute read

背景 随着移动互联网的发展,数据爆炸性增长,企业对数据产生价值的渴望越来越多。 比如很多APP中会埋点(已经不是什么秘密),以此收集用户的行为数据,用户的位置变化,上了什么网站,浏览了哪些网页,和什么人聊天。 又比如汽车类的应用,汽车的轨迹,油耗,停留的时间,最喜欢去的商圈等。 金融方面,用户的付费行为,和...

PostgreSQL 10.0 preview 功能增强 - 内置分区表

13 minute read

背景 PostgreSQL 和它的LOGO大象一样,给人非常强大的安全感。 就拿它的Feature来说,一个大的feature要打磨很多年才能正式的合并到master分支。 比如并行计算的特性,从9.4就开始准备,加入了work process和dynamic shared memory的功能,奠定了多进程并...

金融风控、公安刑侦、社会关系、人脉分析等需求分析与数据库实现 - PostgreSQL图数据库场景应用

21 minute read

背景 人类是群居动物,随着人口的增长,联络方式越来越无界化,人与人,人与事件,人与时间之间形成了一张巨大的关系网络。 有许多场景就是基于这张巨大的关系网络的,比如。 1. 猎头挖人 作为IT人士或者猎头、HR,对Linkedin一定不陌生,领英网实际上就是一个维护人际关系的网站。 通过搜索你的一度人脉...

官人要杯咖啡吗? - PostgreSQL实时监测PLAN tree的执行进度 - pg_query_state

24 minute read

背景 当我们在数据库中执行一些比较大的查询,或者执行比较复杂的函数时,如果要知道执行到哪里了,预计还要多久。 怎么办呢? 有方法得到吗?当然有。 目前PostgreSQL支持的是传统的SQL执行方法,将(nonutility)语句parser后,根据parser tree生成plan tree, 然后根据pl...

PostgreSQL 从源码找出哪些操作需要超级用户权限

7 minute read

背景 在数据库中哪些操作需要超级用户的权限才能执行? 这个问题翻文档可能翻不全面,或者是已经比较难以完成的任务。 但是从源码里面是比较好找出这个答案的。 权限 例如 postgres=# select * from pg_authid; rolname | rolsuper | ro...

实时数据交换平台 - BottledWater-pg with confluent

20 minute read

背景 想必大家都在图书馆借过书,小时候有好看的书也会在小伙伴之间传阅。 借书和数据泵有点类似,一份数据通过数据泵实时的分享给订阅者。 例如在IoT的场景中,有流式分析的需求,也有存储历史数据的需求,同时还有数据挖掘的需求,搜索引擎可能也需要同一份数据,还有一些业务可能也要用到同一份数据。 但是如果把数据统统...

PostgreSQL 按拼音排序 - convert to GBK/EUC_CN coding

7 minute read

背景 国内的应用,在文本排序上基本都是按照拼音来进行排序的。 在不同的字符集中,汉字的编码可能不一样,比如UTF8和GBK,其中GBK是按拼音的顺序进行编码的,而UTF8则不是。 所以如果你的数据库使用了UTF8编码,对中文字段进行排序时,可能得到的并不是按拼音排序的结果。 在PostgreSQL中,中文按...

用PostgreSQL描绘人生的高潮、尿点、低谷 - 窗口/帧 or 斜率/导数/曲率/微积分?

19 minute read

背景 人生就像一场戏,有高潮,有尿点,有低谷。如果用曲线来描述漫漫人生路的话,怎么找出高潮、尿点、低谷呢? 其实类似的场景还有很多,比如来自传感器(比如人身上可以探测的指标就有很多)的监控数据;服务器的监控数据;温度,湿度的变化数据;等等,都可以数字化,用曲线来表示。 找高潮、尿点、低谷有什么好的方法吗? ...

用PostgreSQL找回618秒逝去的青春 - 递归收敛优化

4 minute read

背景 有一个这样的场景,一张小表A,里面存储了一些ID,大约几百个。 (比如说巡逻车辆ID,环卫车辆的ID,公交车,微公交的ID)。 另外有一张日志表B,每条记录中的ID是来自前面那张小表的,但不是每个ID都出现在这张日志表中,比如说一天可能只有几十个ID会出现在这个日志表的当天的数据中。 (比如车辆的行车...

PostgreSQL 源码性能诊断(perf profiling)指南 - 珍藏级

13 minute read

背景 数据库的性能优化是一个非常经典的话题,数据库的优化手段以及优化的角度也各不相同。 例如,可以从OS内核、网络、块设备、编译器、文件系统、SQL、数据库参数、业务逻辑、源码等各个方面去进行优化。 但是如果在优化前了解瓶颈在什么地方,可以向打鼹鼠一样,先打大的,起到事半功倍的效果。 本文将针对Linux平...

时序数据合并场景加速分析和实现 - 复合索引,窗口分组查询加速,变态递归加速

5 minute read

背景 在很多场景中,都会有数据合并的需求。 例如记录了表的变更明细(insert,update,delete),需要合并明细,从明细中快速取到每个PK的最新值。 又比如有很多传感器,不断的在上报数据,要快速的取出每个传感器的最新状态。 对于这种需求,可以使用窗口查询,但是如何加速,如何快速的取出批量数据呢?...

Linux 性能诊断 perf使用指南

37 minute read

背景 Linux在服务端已占据非常大的比例,很多业务很多服务都跑在Linux上面。 软件运行在Linux下,软件本身、以及Linux系统的性能诊断也成为热门的话题。 例如,你要如何回答这些问题 Why is the kernel on-CPU so much? What code-paths? W...

PostgreSQL 在视频、图片去重,图像搜索业务中的应用

1 minute read

背景 图像处理的业务场景比较多,例如 图像搜索、视频去重、人脸识别、美图、图片去重 等。 比如,视频去重,一些用户上传了较多的视频,同一部电影可能有不同的版本,分辨率不一样,音轨不一样,压缩比不一样。这种情况会导致服务端重复存储大量的视频。 又比如甄别黄色视频或黄色图片,鉴黄师的职业要消失了。 有什么方法可...

PostgreSQL update returning NEW OLD column value 在对账 购票 防纂改 原子操作中的妙用

1 minute read

背景 在数据库中更新记录时,有时为了对账,或者防纂改的目的,需要在更新后立即返回更新前和更新后的值。 例如以set bit为例,假设使用BIT串作为火车的每个位置,每个BIT代表一张票,0表示未售卖,1表示已售卖。 购票时,使用set bit=1的操作,为了确保不出现重复售票的问题,必须确保被set的valu...

PostgreSQL 利用编译器extension 支持int128,提升聚合性能

3 minute read

背景 PostgreSQL 9.4以及以前的版本,在INT,INT2,INT8的聚合计算中,为了保证数据不会溢出,中间结果使用numeric来存储。 numeric是PostgreSQL自己实现的一种数值类型,可以存储非常大的数值(估计是做科学计算的需求),但是牺牲了一定的性能。 为了提高聚合,特别是大数据量...

PostgreSQL 与 12306 抢火车票的思考

7 minute read

背景 马上春节了,又到了火车票的销售旺季,一票难求的问题依旧存在吗? 还记得10年前春节前买火车票得在放票前1天搬个小板凳去排队,对于热门路线,排一个晚上都有可能买不到票。 随着互联网的发展,几年前建设了12306网上购票系统,可以从电脑上买票,但是不要以为在电脑上就能买到票。 我记得12306刚推出时,经...

门禁广告销售系统需求剖析 与 PostgreSQL数据库实现

4 minute read

背景 上班打卡是一件很常见的事情,就像小时候的大宝广告,大宝天天见。 对于这种每天都要见的事物,也是广告主追逐的地盘,就好像电梯广告一样,门禁广告也悄然流行起来。 小小的门禁机,每天活跃的时间为上下班高峰,可能也就2小时左右的时间,通常广告不易过长,往往是很简短的广告,也不易放太多广告在门禁内,一般十几个已经...

PostgreSQL AWR报告(for 阿里云ApsaraDB PgSQL)

4 minute read

背景 熟悉Oracle的童鞋一定对AWR不陌生,通常要分析一个数据库在某个时间段的性能,可以从数据库的动态视图等统计信息记录中生成一份该时段的统计分析报告。 里面包含了常见的等待事件分析,TOP SQL, TOP event等。 PostgreSQL是一个功能和Oracle几乎可以媲美的开源产品,分析报告的工...

PostgreSQL 函数调试、诊断、优化 & auto_explain

4 minute read

背景 PostgreSQL的服务端编程能力比较强,不仅支持像java, R, python这种流行的编程语言,另外还内置了一个与Oracle plsql功能几乎一致的plpgsql语言。 对于开发人员来说,有了语言还不够的,调试是非常常见的需求。 所以PostgreSQL的函数语言怎么调试呢,使用pldebu...

PostgreSQL on Linux 最佳部署手册 - 珍藏级

5 minute read

背景 数据库的安装一直以来都挺复杂的,特别是Oracle,现在身边都还有安装Oracle数据库赚外快的事情。 PostgreSQL其实安装很简单,但是那仅仅是可用,并不是好用。很多用户使用默认的方法安装好数据库之后,然后测试一通性能,发现性能不行就不用了。 原因不用说,多方面没有优化的结果。 Postgre...

转载 - Linux软中断不均的调优

4 minute read

背景 原文 http://www.aichengxu.com/view/9627015 原文 Rpc程序主要是io bound程序,这里主要针对的是linux的网络的部分性能调优,对于具体的问题具体分析。

转载 - Linux用户态和内核态

less than 1 minute read

背景 原文 http://longmans1985.blog.163.com/blog/static/7060547520109262178736/ 原文 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序...

转载 - Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity)

2 minute read

背景 原文 http://www.vpsee.com/2010/07/load-balancing-with-irq-smp-affinity/ 原文 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。...

转载 - Linux用户空间与内核空间数据传递

2 minute read

背景 原文 http://wdqfirst.blog.163.com/blog/static/113347411201182222252954/ 原文 Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换...

转载 - 用户空间与内核空间,进程上下文与中断上下文[总结]

3 minute read

背景 原文 http://www.cnblogs.com/Anker/p/3269106.html 1、前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文。 看着很熟悉,半天又说不出到底是怎么回事,有什么区别。 看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,...

PostgreSQL 数组忽略大小写匹配

less than 1 minute read

背景 一位兄弟的开发需求,要求不区分大小写,匹配数组内的字符串。 如下,这样的匹配。 postgres=# select 'a' = any(array['A','1']); ?column? ---------- f (1 row) 需要将数组内的字符串转换为小写后匹配。 ``` postgre...

聊一聊双十一背后的技术 - 毫秒分词算啥, 试试正则和相似度

11 minute read

双十一背后的技术系列文章 《聊一聊双十一背后的技术 - 物流, 动态路径规划》 《聊一聊双十一背后的技术 - 分词和搜索》 《聊一聊双十一背后的技术 - 强奸式秒杀技术实现》 背景 看刑侦剧经常有看到人物拼图,然后到图库搜索的,以前可能靠的是人肉,今天,使用PG,可以靠数据库的图形近似度搜索功能。 《弱水...

聊一聊双十一背后的技术 - 不一样的秒杀技术, 裸秒

4 minute read

双十一背后的技术系列文章 《聊一聊双十一背后的技术 - 物流, 动态路径规划》 《聊一聊双十一背后的技术 - 分词和搜索》 《聊一聊双十一背后的技术 - 不一样的秒杀技术, 裸秒》 背景 秒杀在商品交易中是一个永恒的话题,从双十一,到一票难求,比的仅仅是手快吗? 其实对于交易平台来说,面对的不仅仅是人肉,...

聊一聊双十一背后的技术 - 分词和搜索

9 minute read

背景 2016双十一刚过,大伙还在忙着收快递,我也没有闲着,总结一些双十一背后的数据库技术。 本文将要给大家分享的是 双十一背后的 搜索和分词 相关技术。 我曾经写过一些类似的话题,可以参考如下,有幸帮助不少朋友解决了一些业务场景的问题。 《PostgreSQL 全文检索加速 填补搜索引擎无法满足的功能》 ...

用好PostgreSQL role membership来管理继承组权限

4 minute read

背景 在数据库中,如果你想把A用户创建的对象权限赋予给B用户,或者其他用户。 通常我们会对需要赋权的对象使用grant的语法来赋权。 但是这种方法比较繁琐,因为需要对每个对象,每一组需要的权限进行赋权。 如果你需要整个A用户所有对象的权限,以及它将来创建的对象的所有权限,有没有好的方法呢? 没错,你一定会...

聊一聊双十一背后的技术 - 物流、动态路径规划

4 minute read

背景 每年双十一的交易额都创新高,今年也不例外,双十一几乎成了各种IT系统的大考,物流也不例外。 每次双十一快递几乎都被爆仓,但是随着技术的发展,今年,听说双十一刚过,小伙伴们的包裹都快收到了。 今天,来给大家分享一下物流与背后的数据库技术,当然我讲的还是PostgreSQL, Greenplum, Post...

用静态路由和ip forward打通虚拟机与其他宿主机

1 minute read

背景 最近我在做一些测试,用到了虚拟机环境,如图,有多台物理机,其中有一台物理机安装了几个虚拟机。 物理机之间处于同一网段,可以相互通信。 虚拟机新开了一个网段。 现在的目标是把虚拟机和其他几个物理机的网络打通。 为了不依赖网络层的改动来实现虚拟机和其他物理机网络的打通。 需要用到宿主机的ip fo...

linux 如何利用ISO搭建yum仓库

less than 1 minute read

背景 在使用Linux时,很多包有依赖关系,所以很多LINUX的发行版本都有自己的仓库管理软件,例如suse , debian, ubuntu , centos , rhel. 等等发行版本,各自有各自的软件仓库管理方法。 以CentOS为例,红帽派系的基本上都使用的是yum仓库管理手段。 使用仓库管理可以方...

linux IP 命令使用举例

4 minute read

背景 ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig、route等,使用权限为超级用户。几乎所有的Linux发行版本都支持该命令。 还包括像net namespace的管理,在docker环境中结合veth net设备打通本地和container...

Linux中如何克隆KVM虚拟机

4 minute read

背景 当需要批量部署虚拟机时,通常有几种做法,使用模板重新安装。 或者使用已有的虚拟机克隆。 使用模板安装可以参考kickstart脚本的编写方法。 《install kvm hosts use kickstart in CentOS 6 in text mode》 本文介绍一下在已经安装好的虚拟机上,克...

数据仓库架构的变迁

less than 1 minute read

背景 本文是HashData发表的关于Greenplum, HAWQ的文章,内容很丰富,向作者致敬,收藏。 HashData是原pivotal HAWQ的开发团队出去创业创办的大数据产品公司。 转自 https://segmentfault.com/a/1190000007419222?from=group...

epoll源码分析

6 minute read

背景 本文转自 http://www.cnblogs.com/debian/archive/2012/02/16/2354454.html 原文 当系统启动时,epoll进行初始化: 1 static int __init eventpoll_init(void) 2 { 3 mute...

linux下epoll如何实现高效处理

3 minute read

背景 本文转自 http://www.cnblogs.com/debian/archive/2012/02/16/2354469.html 开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。 大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百...

深层次探讨mutex与semaphore之间的区别

4 minute read

背景 本文依旧和《PostgreSQL 同步流复制锁瓶颈分析》这篇文章有关。 本文主要介绍一下Linux下面信号量(semaphore)和互斥锁(mutex)的区别。 原文地址 http://www.aichengxu.com/view/2456963 原文 看过Linux内核的同学都知道,Linux内核...

network namespace与veth pair

2 minute read

背景 在Linux虚拟化技术中,网络层面,通常除了网桥或虚拟交换机技术外。 还有一个重要的就是namespace和veth pair。 net namespace主要是隔离网络设备本身,例如在Linux 中有多个容器,每个容器对应各自的namespace,我们可以把不同的网络设备指派给不同的容器。 veth...

Linux中的spinlock和mutex

less than 1 minute read

背景 最近在压测PostgreSQL同步流复制时,遇到一个mutex锁的瓶颈问题。 具体见 《PostgreSQL 同步流复制锁瓶颈分析》 PG是以backend process睡眠,然后通过sender唤醒的方式来处理同步等待的问题。 转一篇文章,了解一下spinlock, mutex。 http:/...

在PostgreSQL中实现按拼音、汉字、拼音首字母搜索的例子

1 minute read

背景 PostgreSQL有很多特性是可以提升开发效率,提高生产力的。 在前端页面中,搜索是一个非常常用的功能,例如淘宝首页的搜索。 为了提升用户体验,用户可以按拼音首字母进行搜索,按中文单词搜索,或者按拼音的全部进行搜索。 又比如家里的电视盒子,因为没有实体键盘,按拼音首字母搜索就非常方便。 但是如...

PostgreSQL 并行计算tpc-h测试和优化分析

5 minute read

背景 PostgreSQL 9.6首次推出支持聚合、全表扫描、HASH JOIN、nestloop的并行计算。 https://www.postgresql.org/docs/9.6/static/release-9-6.html Parallel queries (Robert Haas, Amit Kap...

PostgreSQL 多租户

less than 1 minute read

背景 Oracle 12c提出了数据库多租户的概念,即PDBs(私有数据库),因为早期Oracle的设计是以schema为隔离的,schema的隔离不够彻底,原因是通过赋权就很容易获得不同SCHEMA下的数据。 PDB的设计与PostgreSQL的Database概念非常相似,所以PostgreSQL实际上很适...

Linux 内核编程基本功之内核同步与互斥锁mutex

5 minute read

背景 在使用PostgreSQL实现同步流复制时,在主节点发现有大量的mutex,导致了写并发被限制。 本文为转载文章 http://blog.csdn.net/cug_fish_2009/article/details/6126414 Pro-II、内核同步与互斥锁 1、理解互斥锁? 互斥锁的使用也是保持...

PostgreSQL 同步流复制(高并发写入)锁瓶颈分析

47 minute read

背景 PostgreSQL的同步流复制实际上是通过walsender接收到的walreceiver的LSN位点,来唤醒和释放那些需要等待WAL已被备库接收的事务的。 对同步事务来说,用户发起结束事务的请求后,产生的RECORD LSN必须要小于或等于walsender接收到的walreceiver反馈的LSN位...

PostgreSQL 流复制xlog异步send

4 minute read

背景 PostgreSQL的流复制相比大家并不陌生,但是目前PG为了保证主的高度统治地位,一切以主库为准。包括SEND WAL时,也要求主已经FLUSH才能发给备库。 这实际上会导致些许的延迟,当然这个延迟目前来看可以忽略不计,但是随着硬件的发展,将来这个模式可能就会不适应。 那么能不能让主库的WAL rec...

PostgreSQL clang vs gcc 编译

6 minute read

背景 CLANG是一个不错的编译器,本文将介绍一下使用CLANG编译以及它的优化开关,如何编译PostgreSQL,同时对比一下GCC 4.4.6版本的性能。 安装clang 安装clang,需要更高版本的gcc来进行编译。 安装gcc 找一个比较快的镜像下载源码包 https://gcc.gnu.org/...

PostgreSQL Oracle 兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁

4 minute read

背景 PostgreSQL的plpgsql服务端编程语言与Oracle数据库的pl/sql编程语言非常类似,但是对于自治事务一直没有语法层面的支持。 以往如果要支持自治事务,可以使用exception或者使用dblink来实现。 写法有点复杂,如果你想要语法层面的支持,可以试试社区放出的这个补丁,补丁还没有合...

致DBA , 开发者 , 内核开发者 , 架构师 - PostgreSQL 爱好者参考资料

2 minute read

背景 给 DBA、应用开发者、内核开发者、架构师 整理了一些PostgreSQL的相关资料。 一、TO 应用开发者 PPT 1、安装PG集群,PG SQL语言精讲,plpgsql开发语言精讲,PG 客户端、服务端管理,PG 数据库架构,PG 日常维护,PG 分布式使用,PG数据库监控,PG 性能优化。 &l...

PostgreSQL 使用 pgbench 测试 sysbench 相关case - pg_oltp_bench

9 minute read

背景 pgbench是PostgreSQL的性能测试工具,C写的,调用LIBPQ,效率非常高。pgbench也支持自定义测试脚本,支持自定义随机算法,支持自定义脚本的weight设置等等,用途非常广泛。 sysbench是一个比较流行的测试软件框架,可测试内存,CPU,数据库,存储等。测试时调LUA的脚本进行测...

PostgreSQL 透明加密(TDE,FDE) - 块级加密

6 minute read

背景 在数据库应用中,为了提高数据的安全性,可以选择很多中安全加固的方法。 例如, 1. 可以对敏感字段进行加密,可以使用服务端加密,也可以使用数据库端加密,例如pgcrypto加密插件。 服务端加解密相对来说比较安全,因为在数据库端存储的是加密后的数据,只要服务端的秘钥保护好,基本上数据都是安全的。 但...

PostgreSQL 收缩膨胀表或索引 - pg_squeeze or pg_repack

1 minute read

背景 PostgreSQL的表或索引发生膨胀后,用户可以使用vacuum full或rewrite table(如cluster)的方式重建表。 但是vacuum full或者rewrite都需要持有排它锁,会堵塞读操作。 为了减少锁冲突,社区有一个名为pg_reorg或pg_repack的插件,使用了增量的...

PostgreSQL 流行 HA 方案

less than 1 minute read

背景 数据库的HA是一个比较经典的话题,几乎所有的生产环境都会考虑给数据库部署HA。 PostgreSQL 的HA方案也很多,在我的GIT里有两个自定义的HA脚本,有兴趣的童鞋可以参考一下原理。 单个虚拟IP, 自动failover, 手动failback, 需fence设备 双虚拟IP, 自动failov...

PostgreSQL 9.6 sharding based on FDW & pg_pathman

8 minute read

背景 可以阅读以下几篇文章先回顾一下FDW,基于FDW的shared以及高效的分区插件pg_pathman。 《PostgreSQL 9.6 单元化,sharding (based on postgres_fdw) - 内核层支持前传》 《PostgreSQL 9.6 sharding + 单元化 (base...

PostgreSQL 9.5+ 高效分区表实现 - pg_pathman

41 minute read

背景 目前PostgreSQL社区版本的分区表功能比较弱,需要通过继承和触发器或RULE来实现分区表的功能,由于查询和更新涉及约束的检查、插入则涉及触发器或规则重写,导致分区功能性能较差。 商业版本EDB,以及数据仓库Greenplum都有比较好的分区支持。 去年GP开源后,阿里云RDS PostgreSQL...

基于 阿里云 RDS PostgreSQL 打造实时用户画像推荐系统(varbitx)

20 minute read

背景 用户画像在市场营销的应用重建中非常常见,已经不是什么新鲜的东西,比较流行的解决方案是给用户贴标签,根据标签的组合,圈出需要的用户。 通常画像系统会用到宽表,以及分布式的系统。 宽表的作用是存储标签,例如每列代表一个标签。 但实际上这种设计不一定是最优或唯一的设计,本文将以PostgreSQL数据库为基...

PostgreSQL 无缝自增ID的实现 - by advisory lock

3 minute read

背景 一般来说,数据库都会有序列的功能,例如PostgreSQL就支持序列。 序列是指一直增长的值,但是它有一个不好的地方,就是用掉后就不会再有了,因此对于使用者来说,可能会拿到空洞的值。 例如 ``` postgres=# create table seq_test(id serial, info tex...

MySQL 增量同步到 PostgreSQL

less than 1 minute read

背景 接触到越来越多MySQL的数据库迁移到PostgreSQL的需求,整理了一些从MySQL增量迁移到PostgreSQL的开源项目。 有一些是基于binlog的,增量效果比较好,有兴趣的童鞋可以参考一下。 有一些是比较通用的,例如结合Kafka的。 参考 1. https://github.com/xs...

PostgreSQL 全文检索加速 快到没有朋友 - RUM索引接口(潘多拉魔盒)

5 minute read

背景 全文检索,模糊查询在现实的应用中用得非常多,特别是搜索引擎。 通常我们会想到使用搜索引擎来解决,但是需要考虑数据同步到搜索引擎,以及同步延迟,更新,一致性的问题。 并且使用搜索引擎我们还得多维护一个组件。 那么有没有更好的办法呢? 答案是有的,在PostgreSQL中,有内置的全文检索数据类型,以及...

Hacking PostgreSQL

3 minute read

本文为转载文章,原文地址 http://www.cnblogs.com/Yinxinghan/p/Hacking_PostgreSQL.html 背景 这篇文章主要讲解了如何 Hacking PostgreSQL 数据库,总结了一些常用方法。 SQL 注入 大体上和 MySQL 差不多,有一些变量不一样。 ...

PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率

1 minute read

背景 通常在数据库中最小粒度的锁是行锁,当一个事务正在更新某条记录时,另一个事务如果要更新同一条记录(或者申请这一条记录的锁),则必须等待锁释放。 通常持锁的时间需要保持到事务结束,也就是说,如果一个长事务持有了某条记录的锁,其他会话要持有这条记录的锁,可能要等很久。 如果某张表的全表或者大部分记录要被更新的...

PostgreSQL DaaS设计注意 - schema与database的抉择

17 minute read

背景 市面上有一些提供DaaS服务的厂商,例如heroKu,可能有上百万的数据库服务; 又比如提供PaaS平台的服务商,数据库也会有很多,同事这些数据库可能也是模板化的,这些厂商并不一定是为每个客户都新建一个数据库集群来满足数据库的需求。 很有可能是使用数据库或者schema来隔离不同用户的。 1. 例如将...

PostgreSQL 可靠性分析 - 关于redo block原子写

14 minute read

背景 PostgreSQL 可靠性与大多数关系数据库一样,都是通过REDO来保障的。 群里有位童鞋问了一个问题,为什么PostgreSQL的REDO块大小默认是8K的,不是512字节。 这位童鞋提问的理由是,大多数的块设备扇区大小是512字节的,512字节可以保证原子写,而如果REDO的块大于512字节,可能...

PostgreSQL 9.6 内核优化 - sort 性能增强

5 minute read

背景 PostgreSQL 9.6在排序这块做了一些性能增强,前面一篇主要讲了排序算法的变更。 《PostgreSQL 9.6 内核优化 - sort性能增强(batch化quicksort代替replacement selection when work_mem small)》 本文针对另外几个SORT增强...

PostgreSQL md5 对比 MySQL - 秘钥认证

3 minute read

背景 PostgreSQL支持的认证方法很多,例如 20.3.1. Trust Authentication 20.3.2. Password Authentication 20.3.3. GSSAPI Authentication 20.3.4. SSPI Authentication 20.3.5. Ide...

PostgreSQL 9.6 内核优化 - sort性能增强(batch化quicksort代替replacement selection when work_mem small)

24 minute read

背景 排序是比较常见的业务需求,为了降低排序的CPU开销,通常会使用索引来满足排序的需求。 但是并不是所有的QUERY都能使用索引排序,或者说使用索引排序就一定高效。 例如带过滤条件的QUERY,过滤完之后再根据某些字段或表达式排序。这种QUERY的排序不一定能用上索引。 当需要实时排序时,PostgreS...

PostgreSQL 9.6 内核优化之 聚合代码优化OP复用浅析

14 minute read

背景 聚合操作指将分组的数据聚合为一个结果输出。 聚合通常用在统计应用中,例如统计分组的最大值,最小值,记录数,平均值,方差,截距,相关性。 聚合也可能被用于文本分析或者图像分析等,例如最佳相似度,行列变换,聚合为数组或JSON,图像堆叠等。 因此聚合通常需要启动值,行的处理,以及结果的格式转换3个过程。 ...

PostgreSQL 9.6 平滑fsync, write原理浅析

7 minute read

背景 汽车换挡是否平顺,通常取决于档位数,或者换挡技术。 档位数越多,换挡时感觉会约平顺,档位数较少的情况下,换挡可能会有比较明显的顿挫感觉。 数据库也一样,有些时候可能就会出现卡顿的现象,比如尖锐(堆积)的IO需求时。 本文将给大家介绍9.6在fsync, write方面的平顺性改进,减少尖锐的IO需求。...

PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别

4 minute read

背景 对于金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本。 例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本。 另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法。 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库a...

PostgreSQL 等待事件 及 等待采样统计(pg_wait_sampling)

5 minute read

背景 PostgreSQL 9.6动态视图pg_stat_activity新增了wait_event_type, wait_event的等待事件展示。 当会话处于等待状态时,wait_event与wait_event_type非空,表示会话正在等待的类型。 根据等待信息,可以了解当前会话的状态。 将来也可以...

PostgreSQL 9.6 快照过旧 - 源码浅析

17 minute read

背景 在PostgreSQL 9.6以前,垃圾回收存在的问题。 当vacuum回收垃圾时,遇到垃圾记录的xmax大于数据库中现存的最早未提交事务xmin时,不会对其进行回收。 因此当数据库中存在很久为结束的事务时,可能会导致数据库膨胀。 PostgreSQL 9.6加入了快照过旧的功能,目的是防止过长的...

PostgreSQL 9.6 scale-up高并发增强 VS 9.5

15 minute read

背景 PostgreSQL 在向和纵向的扩展能力在开源数据库中一直处于非常领先的地位,例如今年推出的9.6,内置了sharding的功能,同时在scale-up的能力也有非常明显的提升,特别是在多核与高并发处理这块。 社区有同学在128核的机器上测试tpc-b的select only模式可以达到几百万的qps。...

PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析

10 minute read

背景 PostgreSQL的tuple(即记录)头信息中有两个字段分别为XMIN,XMAX用于标记行产生与变更的事务号,以标示记录的版本号,事务的可见性等。 这个事务号是32BIT的长度,因此PG设计了一个事务存活的最长时间是约20亿,如果超过20亿必须将这个事务置为frozen。 被置为frozen状态的记...

PostgreSQL 9.6 并行计算 在 xfs, ext4 下的表现对比

2 minute read

背景 ext4在红帽5,6的版本中作为主流的文件系统,有非常多的用户群体,也能满足大多数的应用场景需求。 XFS经过几年的发展,从红帽7开始,XFS会成为默认的文件系统。 同时XFS在高并发的场景相比EXT4有较明显的优势,前面我对单机多实例也做过测试,使用EXT4和CGROUP容易遇到IO HANG的问题,...

PostgreSQL 9.6 并行计算 优化器算法浅析 - 以及如何强制并行度

9 minute read

背景 PostgreSQL 9.6引入了多核计算的强大功能,那么它是如何决策并行计算,以及并行度的呢? 与Oracle不同,PostgreSQL 并不需要用户在SQL中使用HINT来启用并行计算,因为优化器会从成本的角度做出选择,是否使用,以及使用的并行度是多大。 优化器选择并行计算的相关参数 Postgre...

PostgreSQL 9.6 引领开源数据库攻克多核并行计算难题

13 minute read

背景 经过多年的酝酿(从支持work process到支持动态fork共享内存,再到内核层面支持并行计算),PostgreSQL 的多核并行计算功能终于在2016年发布的9.6版本中正式上线,为PG的scale up能力再次拔高一个台阶,标志着开源数据库已经攻克了并行计算的难题。 相信有很多小伙伴已经开始测试了...

PostgreSQL 单机多实例on XFS 润滑性测试

3 minute read

背景 前面一篇将EXT4 单机多实例在使用cgroup限制IOPS时,出现了IO HANG, 即使使用了data=writeback问题依旧。 从D状态的进程打印的PSTACK可以看到,问题卡在ext4上面。 详见 《PostgreSQL 9.6 检查点SYNC_FILE_RANGE 在单机多实例下的IO H...

PostgreSQL 前世今生

less than 1 minute read

PIC下载 背景 PostgreSQL是40几年陈的产品,算是关系数据库中的老大哥,但是它依旧保持着飞速的迭代和发展。这是为什么呢?...

PostgreSQL 巧妙的数据采样方法

4 minute read

背景 因为线上数据库较大,通常我们可以通过数据采样来构建测试库。 数据采样除了需要对数据进行均匀的抽取之外,还可能有一种需求是对数据进行加密,例如需要隐藏或加密一些敏感字段的信息。 PostgreSQL 9.5开始支持tablesample的语法,参考如下 https://www.postgresql.or...

PostgreSQL 主机性能测试方法 - 单机单实例

4 minute read

背景 业界有一些通用的数据库性能测试模型,可以用来测试硬件在不同测试模型下的性能表现。 参考 http://www.tpc.org/ https://github.com/oltpbenchmark/oltpbench http://oltpbenchmark.com/ 本文主要以PostgreSQL为例,...

PostgreSQL 主机性能测试方法 - 单机多实例

5 minute read

背景 业界有一些通用的数据库性能测试模型,可以用来测试硬件在不同测试模型下的性能表现。 参考 http://www.tpc.org/ https://github.com/oltpbenchmark/oltpbench http://oltpbenchmark.com/ 本文主要以PostgreSQL为例,...

PostgreSQL pgbench SQL RT 与 事务RT 浅析

2 minute read

背景 使用pgbench测试数据库性能时,在输出的报告中,可以输出事务的平均RT,以及单条SQL的平均RT。 那么这两个有什么分别呢? 每行代表一个线程,被填充了颜色的部分表示从客户端发起SQL到SQL返回的时间窗口,没有填充颜色的部分表示线程的空闲时间。 如何统计事务 平均RT : 执行的事务数/...

Oracle 并行计算 JOIN HINT

2 minute read

背景 Oracle的并行查询在处理JOIN时,可以通过调整优化器的HINT,指定优化器在处理JOIN时表的分布与关联策略。 例如,两张表JOIN时,如果是HASH或者MERGE JOIN,可以使用HASH分片,然后每个并行的计算单元处理一个数据分片,达到提高效率的目的。 又或者可以将某个较小的表进行broad...

PostgreSQL 数据库开发规范

28 minute read

背景 PostgreSQL的功能非常强大,但是要把PostgreSQL用好,开发人员是非常关键的。 下面将针对PostgreSQL数据库原理与特性,输出一份开发规范,希望可以减少大家在使用PostgreSQL数据库过程中遇到的困惑。 目标是将PostgreSQL的功能、性能发挥好,她好我也好。 Postgr...

PostgreSQL Oracle 兼容性之 - 字符编码转换 CONVERT

1 minute read

背景 参考 https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions027.htm Oracle 中,可以将一个字符串从一个编码转换为另一个编码的输出。 convert(string, 目标字符集, 源字符集) 例如 ``` SEL...

PostgreSQL Oracle 兼容性之 - COMPOSE , UNISTR , DECOMPOSE

2 minute read

背景 参考 http://www.th7.cn/db/Oracle/2011-06-30/8490.shtml 很多语言,包括英语在内,都使用沉音字符(accented character)。 因为这些字符不属于 ASCII 字符集,所以假如不查看 Unicode 值也不使用 Unicode 编辑器并将其...

PostgreSQL Oracle 兼容性之 - BIT_TO_NUM , BITAND , 比特运算 , 比特与整型互相转换

8 minute read

背景 比特类型转换为整型,整型转换为比特类型,以及整型的比特运算。 在数据分析时被经常使用,例如对多个用0和1表示的标签字段叠加,使用一个整型表示。 又或者将数字表述的标签信息转换为比特位,以获取分散的标签信息。 在Oracle中可以使用bit_to_num将多个0,1转换为number,使用bitand对...

PostgreSQL Oracle 兼容性之 - ASCIISTR

2 minute read

背景 在Oracle中有一个函数asciistr,可以将非ASCII字符转换成UTF-16编码的字符,因此转换后的字符串可以存储在只支持ASCII编码的数据库中。 ASCIISTR takes as its argument a string, or an expression that resolves to...

PostgreSQL failed IANA tz database BUG修复

less than 1 minute read

背景 PostgreSQL 可以使用IANA发布的时区数据库,但是由于IANA发布的数据库中,有些定义的时区别名并没有对应的时区。 从而导致PG在解析对应别名时会报错。 # select '2016-09-02 08:00:00 NOVST'::timestamptz; ERROR: time zone a...

PostgreSQL Oracle 兼容性之 - TZ_OFFSET

less than 1 minute read

背景 Oracle提供的TZ_OFFSET函数,目的是将时区别名转换为以UTC为标准的OFFSET。 例如 ``` SELECT TZ_OFFSET(‘US/Eastern’) FROM DUAL;

PostgreSQL Oracle 兼容性之 - NEW_TIME , SYS_EXTRACT_UTC

2 minute read

背景 如何将一个时区的本地时间,转换为另一个时区的本地时间? 在Oracle中可以使用NEW_TIME这个函数实现这个目的。 NEW_TIME(ts, tz1, tz2) NEW_TIME returns the date and time in time zone timezone2 when date ...

PostgreSQL Oracle 兼容性之 - REMAINDER

1 minute read

背景 在PostgreSQL数据库中常用的取余函数为mod,Oracle另外还提供了一个取余的函数remainder,它与mod的区别在于,mod取余时用了floor处理,而remainder使用round处理。 算法 1. mod ``` PG & Oracle mod mod(x,y) = x - ...

bcache / 如何使用bcache构建LVM,软RAID / 如何优化bcache

15 minute read

bcache 背景知识 本小章节转载自 http://www.sysnote.org/2014/06/20/bcache-analysis/ 1. 简介 bcache是linux内核块设备层cache,类似于flashcache使用ssd作为hdd的缓存方案,相比于flashcache,bcache更加灵活,支...

如何在CentOS 6.x x64系统中创建超过16TB的ext4文件系统

less than 1 minute read

背景 在使用Ext4文件系统时,发现无法创建超过16TB的文件系统。 例如我的服务器中有多块8T的盘,使用逻辑卷或者软RAID做成较大的块设备,然后使用mkfs.ext4格式化,当LVM或软RAID设备大于16TB时,出现这样的报错 # mkfs.ext4 -b 4096 /dev/md0 mke2fs 1.4...

HAWQ 集群部署 on ECS

21 minute read

背景 之前写过两篇HAWQ on CentOS 6.x, 7.x的单机部署,本文主要描述的是HAWQ on ECS的多机部署。 本文参考以下文章部署,详见如下 http://hdb.docs.pivotal.io/20/ http://www.aboutyun.com/thread-7684-1-1.ht...

facebook linkbench 测试PostgreSQL社交关系图谱场景性能

5 minute read

背景 Linkbench是facebook提供的一款数据库性能测试开源软件,它的思路是围绕社交关系图谱构建一套测试数据,然后在此基础之上对数据进行关系查询,新增关系,断开关系等操作。 Linkbench的介绍可参考 https://www.facebook.com/notes/facebook-engine...

如何从PostgreSQL json中提取数组

4 minute read

背景 在PostgreSQL中使用JSON类型时,除了能存,大家更关心的是JSON中的数据的使用,例如 1. VALUE支持哪些类型, 通过以下方法可以提取JSON最外层的VALUE的数据类型 json_typeof(json) jsonb_typeof(jsonb) 目前支持的类型如下...

如何防止数据库雪崩(泛洪 flood)

less than 1 minute read

背景 在数据库的使用过程中,一些微妙的操作,在特殊的场景中就可能导致雪崩效应。 1. 当数据库中存在未提交事务,并且未提交事务已经持有了某个表的哪怕是最小的锁时,如果此时对这个对象发起DDL操作,这个DDL操作将会堵塞接下来的其他对该对象的任意操作请求,包括读请求。 因为PG的锁等待判断是整个等待队列的冲突判...

Greenplum , HAWQ outer join与motion问题讲解

5 minute read

背景 Greenplum,HAWQ是分布式的数据库,在建表时,我们可以选择分布列,或者选择随机分布。 多个表做等值JOIN时,如果JOIN列为分布列,则不需要进行数据的重分布。 但是,如果使用的是OUTER JOIN,情况就不一样了,你可能会发现多个表进行outer join时,如果JOIN列都是HASH分布...

CentOS 7.x x64 部署 HAWQ

14 minute read

背景 在CentOS 6.x 上不管是源码或二进制部署HAWQ都有点苦逼,原因是6自带的软件版本都比较老,而HAWQ依赖的环境的版本都比较新。 《CentOS 6.x 部署HAWQ》 在7.x上部署HAWQ会轻松许多。 本文简单的讲一下在CentOS 7.x 的单机上使用源码部署HAWQ的过程。

PostgreSQL reload配置的动作反馈与源码分析

2 minute read

背景 PostgreSQL数据库的配置文件中,有一些配置项是支持reload的,但是如果配置写错了,reload时怎么知道呢? 源码分析 reload其实是通过给postmaster进程发SIGHUP信号来实现的。 通过pg_ctl或者kill或者pg_reload_conf()函数都可以发信号。 post...

CentOS 6.x x64 部署HAWQ

15 minute read

背景 HAWQ与Greenplum师出同门,都是来自pivotal的分析型数据库产品,均以PostgreSQL为基础代码。 HAWQ与Greenplum相似之处 1. 强大的SQL兼容性,SQL-92, SQL-99, SQL-2003, OLAP extension 2. ORCA查询优化器 3. MPP架...

PostgreSQL rename 代码修正风波

6 minute read

背景 PostgreSQL的数据目录,包括所有相关的文件,建议的权限是700,owner是启动数据库集群的操作系统用户。 如果权限不对,或者OWNER不对,在打开文件时可能出错,会带来安全隐患,并导致一些不必要的麻烦。 例子 比如PostgreSQL fsync_fname_ext调用,默认会以读写的方式打开...

PostgreSQL CVE-2016-5423 BUG

3 minute read

背景 PostgreSQL 的一个BUG,存在于9.5.3, 9.4.8, 9.3.13, 9.2.17, 9.1.22及以下版本。 在使用嵌套CASE WHEN语句时,如果嵌套子句中有检测条件为空时,会导致判断不准确。 如果内外检测值的类型不同,甚至有可能导致数据库crash。 https://www.p...

PostgreSQL 最佳实践 - pg_rman 数据库恢复示例 与 软件限制解说

8 minute read

背景 pg_rman备份已经讲完了,接下来讲一下数据恢复。 由于pg_rman使用了物理备份,所以恢复时,与普通物理备份的恢复原理是一样的。 需要将数据文件恢复,同时需要提供recovery.conf,在recovery.conf中指定需要恢复到哪个位置,以及如何获取XLOG归档文件等配置。 数据库恢复 p...

PostgreSQL 最佳实践 - pg_rman 以standby为源的备份浅析

4 minute read

背景 为了降低备份对数据库的性能影响,我们在有standby的情况下,可以选择从standby备份PostgreSQL。 pg_rman是一个备份工具,同样支持从standby备份数据库,但是有一些使用的注意事项。 例如需要连接主库,需要能读取归档目录,需要告诉主库和备库的连接地址,需要备库的$PGDATA等...

pg_dump一致性备份以及cache lookup failed错误的原因分析

2 minute read

背景 PostgreSQL逻辑备份,如何保证备份数据的一致性呢,例如备份的同时,数据被纂改或者有新增的数据,如何保证在全库视角,备份出来的数据是在备份开始时看到的一致数据。 一致性逻辑备份分析 可以追溯到1999年的代码,早期PostgreSQL通过serializable隔离级别来保证备份的一致性。 ht...

PostgreSQL 最佳实践 - 块级别增量备份(pg_rman baseon LSN)源码浅析与使用

12 minute read

背景 对于商业数据库来说,备份的功能一般都非常的全面。 比如Oracle,它的备份工具rman是非常强大的,很多年前就已经支持全量、增量、归档的备份模式,支持压缩等。 还支持元数据存储到数据库中,管理也非常的方便,例如保留多少归档,备份集的管理也很方便,例如要恢复到什么时间点,将此前的备份清除等等。 对于开...

Greenplum 最佳实践 - 估值插件hll的使用(以及hll分式聚合函数优化)

3 minute read

背景 在大数据分析中,通常会有一些估值的需求,例如估计某个时间段有多少新增用户,估计某个时间段有多少用户。 常用的估值算法如HyperLogLog,还有一些其他的估值算法。 可以参考 http://www.pipelinedb.com/ 我在几年前写过如何在PostgreSQL中使用HLL,请参考 ...

PostgreSQL延迟hot standby使用问题及源码浅析

1 minute read

背景 在某些场景中,用户可能需要部署延迟的数据库,比如用来应对误操作。 用户可以创建延迟2小时的standby数据库,如果在2小时内发现了误操作,可以直接使用hot standby,查看误操作前的数据,从而进行恢复。 而不需要对数据库进行PITR恢复操作。 当然这个防范左右还有更好的方法,比如使用我前面写的...

PostgreSQL 最佳实践 - 读写分离

12 minute read

背景 一直以来PostgreSQL数据库在scale up和scale out的方向都走得比较靠前,例如 单元化技术 oleg postgrespro的 PostgreSQL cluster,在分布式事务性能提升,选举算法方面的贡献非常大。 https://github.com/postgre...

PostgreSQL 最佳实践 - 水平分库(基于plproxy)

9 minute read

背景 我一直以来都比较推荐plproxy这个PostgreSQL代理软件, 因为它小巧灵活好用, 效率高. 最近朋友邀请我给他们做个分布式的方案, 所以又把plproxy翻出来了. 本文讲一讲在单节点中如何快速的部署plproxy环境. 环境 PostgreSQL 9.3.1 plproxy 2.x...

一个笛卡尔积的update from语句引发的(内存泄露?)问题

14 minute read

场景 PostgreSQL支持多表JOIN的更新操作,但是如果SQL没有写好,可能会导致出现笛卡尔积的情况。 如果是条查询语句,出现笛卡尔积时,没什么问题,大不了就是查询慢一点。 如果是条更新语句,现在看来可能代码中有内存泄露的BUG,已反馈给PG社区。 另外需要注意PostgreSQL不允许自关联的更新,...

PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)单个数据库采用多个zfs卷(如表空间)时如何一致性备份

6 minute read

背景 当我们使用了多个ZFS卷或者文件系统时,如果一个实例的多个部分,如表空间,放在了不同的zfs上,再使用基于ZFS快照的备份时,可能出现多个文件系统不一致的情况。 例如控制文件是新的,但是数据是旧的。 保物理备份的一致性检查 基于文件的物理备份,为了保证备份的一致性,在备份开始时,需要做一个检查点,同时打...

PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)备份集有效性自动校验

2 minute read

背景 前面我写过一篇关于使用ZFS的快照特性和PostgreSQL流复制来完成数据库块级别的增量PITR备份的文章。 达到可控的备份与恢复SLA。 https://yq.aliyun.com/articles/59363 本文将基于这个备份机制, 写一个自动的恢复测试脚本。 (假设快照每天一个, 并且按规...

PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)方案与实战

13 minute read

背景 在实际的生产环境中, 当数据库越来越多, 越来越大. 备份可能会成为比较大的问题, 传统的逻辑备份对于大的数据库不适用(因为备份和还原可能是比较耗时的, 而且也不能回到任意时间点, 还会造成数据库膨胀(长时间repeatable read隔离级别), 好处是可以跨平台恢复, 可选恢复表等). 而基于XL...

PostgreSQL 最佳实践 - 任意时间点恢复源码分析

6 minute read

背景 我们知道PostgreSQL是支持任意时间点恢复的,那么背后的原理是什么? 本文将对PG的时间点恢复进行详细的讲解,帮助用户理解。 本文涉及源码参考PostgreSQL 9.2.2版本. 时间点恢复涉及的参数 我们知道PostgreSQL 支持PITR, 基于时间点的恢复. 通过配置recovery....

PostgreSQL 最佳实践 - 在线增量备份与任意时间点恢复

9 minute read

背景 冷备份, 以及逻辑备份都是某一个时间点的备份, 没有增量的概念. 如果数据库在运行过程中发生故障, 使用逻辑备份只能将数据库还原到备份时刻, 无法恢复到故障发生前的那个时刻. 又或者在使用过程中由于误操作修改或删除了重要数据, 需要还原到误操作前的那个时刻怎么办呢? 使用冷备份加上有效的归档文件可以实...

PostgreSQL 最佳实践 - 冷备份与还原介绍

6 minute read

背景 PostgreSQL 冷备份, 指在数据库关机状态下对数据库的数据文件进行的备份. 这种备份在生产中并不实用, 一般生产环境都需要保证数据库7*24小时不间断运行. 冷备份需要备份的是数据库集群主目录($PGDATA), 表空间目录, 事务日志(pg_xlog)目录. 如果在参数文件中指定了其他目录或...

PostgreSQL 最佳实践 - 在线逻辑备份与恢复介绍

10 minute read

背景 PostgreSQL 逻辑备份, 指在线备份数据库数据, DDL以SQL语句形式输出, 数据则可以以SQL语句或者固定分隔符(row格式)的形式输出. 备份时不影响其他用户对备份对象的DML操作. 本文主要介绍一下PostgreSQL提供的逻辑备份工具pg_dump, pg_dumpall, 以及数据库...

德哥的PostgreSQL私房菜 - 史上最屌PG资料合集

2 minute read

背景 看完并理解这些文章,相信你会和我一样爱上PostgreSQL,并成为一名PostgreSQL的布道者。 资料不断更新中… … 沉稳的外表无法掩饰PG炙热的内心 。 扩展阅读,用心感受PostgreSQL 内核扩展 《找对业务G点, 体验酸爽 - PostgreSQL内核扩展指南》 http...

PostgreSQL 内存表

6 minute read

背景 在某些场景,要求快速的DML,并且对数据可靠性要求不是非常高。 例如游戏的会话信息,传感器上传的最新数据,运算的中间结果,等等。 例如在一个场景中,有非常多的传感器的数据要不断的被更新和查询,可以使用这种方法,每个传感器的ID哈希后分配给对应的会话,这个传感器。 上面的需求,PostgreSQL ...

冗余数据JOIN导致的慢SQL优化一例

2 minute read

背景 CASE 一个这样的查询,每个表都只有几千条数据,但是查询非常慢,几十秒不出结果。 select distinct abc.pro_col1, abc.col3 from t0 p INNER JOIN t1 abc on p.id=abc.par_col2 ...

如何评估QUERY的响应时间?

1 minute read

背景 如何评估QUERY的响应时间? 需要买什么样的硬件能满足为了业务XXX的需求? 这种问题在企业中非常常见,但是估计大多数是拍脑袋的回复,做得更好点,可能是根据业务的benchmark提供的数据,给一个拍脑袋的决定。 本文将针对数据库的QUERY展开,看看应该如何正确的评估QUERY的响应时间。 从执...

PostgreSQL 文本数据分析实践之 - 相似度分析

2 minute read

背景 在日常的生活中,我们可能会经常需要一些像相近、相仿、距离接近、性格接近等等类似这样的需求,对数据进行筛选。 这些需求PostgreSQL居然都支持,是不是很变态呢。 变态的例子 这些场景都支持索引排序和检索,否则怎么叫变态呢。 按长相相似度排序 比如最近的王宝强和马蓉的事件,估计很多人会拿宋喆的照片进...

PostgreSQL 9.6 并行计算 优化器算法浅析

10 minute read

背景 之前写过几篇 PostgreSQL 并行计算的文章,文中并没有仔细描述PostgreSQL是如何决策并行计算,以及并行度的。 开源数据库PostgreSQL攻克并行计算难题 https://yq.aliyun.com/articles/44655 PostgreSQL 并行计算 在 xf...

PostgreSQL 多路并行 xlog 设计

less than 1 minute read

背景 本文截取自《多核处理器下事务型数据库性能优化技术综述》 http://www.cnki.com.cn/Article/CJFDTotal-JSJX201509012.htm 数据库的redo记录了事务的重做信息,它最重要的功能之一是用来恢复数据库,例如当数据库crash后,需要从数据库的一致检查点开始,...

PostgreSQL雕虫小技,分组TOP性能提升44倍

3 minute read

背景 按分组取出TOP值,是非常常见的业务需求。 比如提取每位歌手的下载量TOP 10的曲目、提取每个城市纳税前10的人或企业。 传统方法 传统的方法是使用窗口查询,PostgreSQL是支持窗口查询的。 例子 测试表和测试数据,生成10000个分组,1000万条记录。 postgres=# crea...

PostgreSQL源码分析 备库查询冲突 - User was holding shared buffer pin for too long

3 minute read

背景 PostgreSQL 的基于流复制的物理备库是基于redo的物理块复制备库,允许开放只读的功能,但是需要注意,由于主库可能不断的产生redo,这些redo可能会与备库的QUERY产生冲突。 什么情况下query会堵塞、或与恢复冲突? 当以下操作产生的REDO被复制到备库,并且备库准备拿这些REDO来恢复时...

Greenplum 最佳实践 - 行存与列存的选择以及转换方法

2 minute read

背景 数据在数据库中的存储形式多种多样,比较常见的如 1. PostgreSQL的堆表,以行的形式存储,(当变成字段压缩后的长度超过数据块的四分之一时,会以TOAST的形式存储到TOAST表)。 2. MySQL innodb则是以b+tree形式存储的。 3. 在数据仓库产品中,如Greenplum,支持...

使用pg_resetxlog修复PostgreSQL控制文件的方法

13 minute read

背景 PostgreSQL 控制文件在$PGDATA/global目录下名为pg_control. 控制文件中记录了以下三部分信息 : 1. initdb时生成的静态信息 : pg_control version number: 922 Catalog version nu...

异版本pg_resetxlog后导致的控制文件差异问题处理

6 minute read

背景 数据库的redo日志损坏时,或者控制文件损坏时,可能导致数据库无法启动。 如果存放pg_xlog或者pg_control文件的块设备遇到问题,可能引发这种情况。 遇到xlog或者控制文件损坏的时候,怎么处理呢? 数据库正常关闭时会写控制文件,redo是在数据库crash后需要用来恢复数据库的,如果数据...

旋转门数据压缩算法在PostgreSQL中的实现 - 流式压缩在物联网、监控、传感器等场景的应用

4 minute read

背景 在物联网、监控、传感器、金融等应用领域,数据在时间维度上流式的产生,而且数据量非常庞大。 例如我们经常看到的性能监控视图,就是很多点在时间维度上描绘的曲线。 又比如金融行业的走势数据等等。 我们想象一下,如果每个传感器或指标每100毫秒产生1个点,一天就是864000个点。 而传感器或指标是非常...

为什么cgroup blkio不能限制分区

1 minute read

背景 在使用cgroup blkio子系统限制块设备的IOPS时,有没有遇到过这样的错误? #echo "8:1 10000" >./blkio.throttle.write_iops_device bash: echo: write error: No such device 当限制的块设...

Understanding memory

50 minute read

背景 原文 http://careers.directi.com/display/tu/Understanding+and+optimizing+Memory+utilization Understanding page frames and pages Memory in Linux is organi...

未对齐(alignment)造成SSD 写放大一例

5 minute read

背景 SSD的存储组织,决定了它在写入操作时,是以固定的单元进行写入的,所以在使用SSD时,务必要进行对齐操作。 不对齐的后果很严重,不仅仅使得性能下降,还会带来写放大。 来看一张图,例如实线分开的是SSD的写入单元,如果建立分区,或者LVM时,没有进行对齐,那么一个IO操作就可能跨SSD的写入单元,从而使得...

Linux 逻辑卷(lvm)管理的两个错误记录

less than 1 minute read

背景 在使用lvm时遇到几个问题记录一下,如你也刚好碰到,可以减少点排错时间。 1. 创建lv时报错,可能是以前这个vg的数据有问题,不过它这里有个提示。 Cannot change VG vgdata01 while PVs are missing. Consider vgreduce --re...

从PostgreSQL支持100万个连接聊起

9 minute read

背景 100万个数据库连接,绝逼疯了,常人怎么会干这种事情。 没错,数据库支持100万个连接意味着什么呢?不能用连接池吗? 除了抱着玩一玩的心态,也能了解到操作系统层的一些知识,何乐不为? 碰壁 根据我前几天写的《如何度量Kernel Resources for PostgreSQL》,我们可以评估得出,如...

PostgreSQL 表达式索引 - 语法注意事项

less than 1 minute read

背景 表达式索引是非常有用的功能之一,但是使用时语法上要注意一下,表达式需要用括号括起来 expression An expression based on one or more columns of the table. The expression usually must be written...

DBA不可不知的操作系统内核参数

19 minute read

背景 操作系统为了适应更多的硬件环境,许多初始的设置值,宽容度都很高。 如果不经调整,这些值可能无法适应HPC,或者硬件稍好些的环境。 无法发挥更好的硬件性能,甚至可能影响某些应用软件的使用,特别是数据库。 数据库关心的OS内核参数 512GB 内存为例 1. 参数 fs.aio-max-nr ...

如何度量Kernel Resources for PostgreSQL

10 minute read

背景 对于操作系统来说,数据库算是比较大型的应用,往往需要耗费大量的系统资源,特别是在内部进程间通信这块的资源。 操作系统默认的配置可能无法满足数据库对资源使用的需求。 那么应该如何根据数据库的需要,设置操作系统相关资源参数呢? PostgreSQL 对系统资源的需求计算 在讲资源分配前,大家可以参考阅读一...

search_path在PostgreSQL函数开发中的注意事项

less than 1 minute read

背景 PostgreSQL 与大多数数据库一样,通过schema,逻辑上划分对象的归属,如图。 用户还可以参考《PostgreSQL 逻辑结构 和 权限体系 介绍》 https://yq.aliyun.com/articles/41210 因为有了schema的概念,在访问数据库中的对象时,我们需要指定...

securecrt克隆会话与sshd 的 MaxSessions

less than 1 minute read

背景 使用securecrt克隆会话时,原有会话连接的session数会自增。 例如 要使用ssh连接,sshd的MaxSessions必须>=1,默认是10。 如果把MaxSessions改成2,那么对同一个ssh连接,只能克隆1个,(克隆出来的ssh连接窗可以再克隆,但是对同一个连接窗只能克隆...

论数据库redo/data存储规划与SSD写倾斜

5 minute read

背景 SSD以其良好的IOPS和读写带宽,正在逐渐取代原来的主流存储,成为企业存储市场的新宠。 在一些对存储IOPS和读写带宽需要较大的重要应用中,例如数据库,SSD的使用也越来越普遍。 但是SSD的寿命和写入量有关,如果没有规划好,可能会拉高故障率和成本。 另一方面,SSD还存在写放大的可能,例如写1字节...

固若金汤 - PostgreSQL pgcrypto加密插件

8 minute read

背景 默认情况下数据都是以明文存储在数据库中的。 如果未使用数据传输层加密手段的话, 数据一旦在传输中被截获的话就很容易泄漏数据。 本文将要介绍的是数据内容的加密。 数据内容的加密可以在数据库服务端进行加解密, 也可以在客户端进行加解密. 在数据库服务端加解密的话, 网络上传输的还是未加密的内容, 所以为...

PostgreSQL 会话级资源隔离探索

less than 1 minute read

背景 如果一个数据库对外提供的服务,或者承载的业务很多时,你首先想到的肯定是拆分数据库。 但是,拆分毕竟是有成本的,而且有时并不是所有的场景都适合拆分来解决。 如果多个业务混合在一起使用一个数据库,就容易造成资源的争抢。 那么不拆分的情况下,控制每个业务或者每个会话的资源使用呢? 如何区分来源应用 要隔离...

弱水三千,只取一瓢,当图像搜索遇见PostgreSQL(Haar wavelet)

1 minute read

背景 图片搜索是继文字搜索后又一个比较常用的搜索引擎。 市面上常见的搜索引擎有谷歌、百度、搜狗等图片搜索引擎。 http://image.baidu.com/ http://images.google.com.hk 例如在搜索引擎提供的接口中上层了一张雪人的图片,搜出来一堆和雪人近似的图片。 图片搜...

PostgreSQL 创建库时如何指定 Collate, Ctype

1 minute read

背景 初始化集群,建库,建表,建索引,sort | compare QUERY时都可以指定COLLATE。 用法参考 https://www.postgresql.org/docs/9.5/static/sql-createtable.html https://www.postgresql.org/docs...

用Valgrind检测PostgreSQL内存泄露

2 minute read

背景 Valgrind简介 Valgrind是一个开源工具集合,其中最有名的是Memcheck可用来检测C,C++程序的内存泄露,判断程序运行是否会crash或者产生不可预知的结果。 Valgrind Memcheck工具的用法 以下内容参考自Valgrind的quick start manual htt...

page fault带来的性能问题

3 minute read

背景 Linux进程如何访问内存 Linux下,进程并不是直接访问物理内存,而是通过内存管理单元(MMU)来访问内存资源。 原因后面会讲到。 为什么需要虚拟内存地址空间 假设某个进程需要4MB的空间,内存假设是1MB的,如果进程直接使用物理地址,这个进程会因为内存不足跑不起来。 既然进程不是直接访问物理内存...

PostgreSQL 如何高效解决 按任意字段分词检索的问题 - case 1

5 minute read

背景 在有些应用场景中,可能会涉及多个字段的匹配。 例如这样的场景,一张表包含了几个字段,分别为歌手,曲目,专辑名称,作曲,歌词, 。。。 用户可能要在所有的字段中以分词的方式匹配刘德华,任意字段匹配即返回TRUE。 传统的做法是每个字段建立分词索引,然后挨个匹配。 这样就导致SQL写法很冗长,而且要使...

PostgreSQL Oracle 兼容性之 - 锁定执行计划(Outline system)

2 minute read

背景 绑定SQL执行计划,大家一定会想到SQL HINT,通过HINT告诉优化器你要用什么访问方法,用什么JOIN方法,JOIN的顺序,驱动表等等。 但是SQL HINT有一定的弊端,它需要修改应用程序中的SQL语句,把SQL加上HINT。 对pg_hint_plan感兴趣的同学,可以参考我写到文档 htt...

mongoDB BI 分析利器 - PostgreSQL FDW (MongoDB Connector for BI)

4 minute read

背景 mongoDB是近几年迅速崛起的一种文档型数据库,广泛应用于对事务无要求,但是要求较好的开发灵活性,扩展弹性的领域,。 随着企业对数据挖掘需求的增加,用户可能会对存储在mongo中的数据有挖掘需求,但是mongoDB的语法较为单一,不能满足挖掘的需求。 PostgreSQL是起源于伯克利大小的一个开源数...

如何加快PostgreSQL结巴分词pg_jieba加载速度

3 minute read

背景 PostgreSQL的全文检索接口是开放API的,所以中文分词的插件也非常多,例如常用的scws分词插件,还有结巴分词的插件。 但是你在使用结巴分词插件的时候,有没有遇到这样的问题。 每个会话,第一次查询会比较慢,接下来的查询就快了。 例如 psql (9.5.3) Type "help" fo...

PostgreSQL 使用递归SQL 找出数据库对象之间的依赖关系

5 minute read

背景 在数据库中对象与对象之间存在一定的依赖关系,例如继承表之间的依赖,视图与基表的依赖,主外键的依赖,序列的依赖等等。 在删除对象时,数据库也会先检测依赖,如果有依赖,会报错,需要使用cascade删除。 另外一方面,如果需要重建表,使用重命名的方式是有一定风险的,例如依赖关系没有迁移,仅仅迁移了表是不够的...

一致性哈希在分布式数据库中的应用探索

less than 1 minute read

背景 本文大部分内容参考自 http://blog.csdn.net/cywosp/article/details/23397179 在分布式数据库中,设计数据分布算法通常需要考虑到几点 平衡性(Balance) 平衡性是指哈希的结果能够尽可能分布到所有的分片节点中去,这样可以使得...

关键时刻HINT出彩 - PG优化器的参数优化、执行计划固化CASE

7 minute read

背景 有过数据库使用经验的童鞋可曾遇到过SQL执行计划不准确,或者SQL执行计划抖动的问题。 PostgreSQL的执行计划与大多数的企业数据库是一样的,都是基于成本优化。 基于成本优化的优化器,在算法靠谱,统计信息准确的前提下,通常得到的执行计划是比较准确的。 那么什么时候执行计划可能不准确呢? ...

如何查看sshd当前配置 (gcore, gdb 的妙用)

7 minute read

背景 Linux sshd没有提供显示当前sshd的配置的接口,所以当我们需要了解它的配置时,怎么办呢? 另外我们还不知道sshd已经加载的配置文件名,这有从何下手呢? 本文将结合openssh的源码,给大家一种取得当前sshd配置的方法。 sshd将要加载哪些配置文件 调用sshd进程,并且通过strac...

Greenplum 大集群应该调整的sshd_config配置

2 minute read

背景 Greenplum是MPP数据库,所以大的集群可能涉及很多的主机以及很多的segments。 Greenplum的很多管理脚本都会涉及ssh的连接,通过SSH进行远程的管理或命令的调用。 因此如果有并发的管理任务,会建立很多的SSH会话。 但是默认情况下Linux的sshd_config配置是比较保守...

SSH服务的几个超时参数 以及 类似DDOS攻击的方法

3 minute read

背景 sshd是Linux的一个常用的网络连接的服务,通常被用来远程连接,管理服务器。 一般我们很少去配置sshd,本文要给大家分享几个sshd的参数,有超时参数,有触发拒绝连接的参数等等。 如果你哪天遇到类似的问题,也行能帮助你找到问题的根源。 sshd 空闲超时参数 man sshd_config ...

阿里云RDS for PostgreSQL用户如何定制数据库参数

4 minute read

背景 为了满足大多数用户的需求,阿里云提供的RDS PG,数据库参数是根据通用性场景设置的。 如果用户不是通用的场景,或者用户有自定义参数的需求怎么办呢? 由于数据库的参数是分级的,层级越高优先级越高,用户可以在高层级设置参数的值,以此来覆盖RDS PG设置的一些参数,达到修改参数值的目的。 Postgre...

阿里云RDS PG/PPAS(Oracle 兼容版) 用户连接规划

less than 1 minute read

背景 PostgreSQL在设计时为DBA考虑了保留连接,通过参数superuser_reserved_connections来控制,也就是说当数据库的最大连接为100时,普通用户最多能连100-superuser_reserved_connections个连接。 剩余的连接是给超级用户保留的,方便DBA连接到...

PostgreSQL 编译选项-g的影响

6 minute read

背景 PostgreSQL 的编译选项之一–enable-debug,用途编译时是给编译器一个flag,告诉编译器产生用于调试的symbols。 但是它会影响性能吗? 对于gcc编译器,支持debug模式与optimizer模式同时开启,所以性能影响比较微小,但是显而易见还是有一定的影响的 (编译器在混用模式...

Greenplum 最佳实践 - 数据分布黄金法则 - 分布列与分区的选择

6 minute read

背景 阿里云ApsaraDB for Greenplum公测以来,已经收到好多用户的公测申请。 要使用Greenplum,登陆到数据库后第一件事当然是建表,然后倒入数据开测。 大部分用户以前是使用MySQL的,并没有接触过Greenplum,语法需要适应一下。 例如MySQL中的建表语句 DROP TAB...

阿里云ApsaraDB RDS用户 - OLAP最佳实践

less than 1 minute read

背景 随着大数据分析型产品越来越丰富、细化,用户可能会看得眼花缭乱,如果对产品没有深度的理解,选错了岂不是劳民伤财? 本文将给大家分析一下RDS用户应该如何选择适合自己的大数据的分析产品,以及最佳实践方案。 用户环境分析 以最常用的服务举例,通常云用户会购买的产品如下 ECS,虚拟机 ...

Greenplum 资源隔离的原理与源码分析

6 minute read

背景 Greenplum是一个MPP的数据仓库系统,最大的优点是水平扩展,并且一个QUERY就能将硬件资源的能力发挥到极致。 但这也是被一些用户诟病的一点,因为一个的QUERY就可能占光所有的硬件资源,所以并发一多的话,query相互之间的资源争抢就比较严重。 Greenplum资源隔离的手段 Greenpl...

PostgreSQL 索引扫描offset内核优化 - case

4 minute read

背景 最近写了好几篇与offset有关的文章,上一篇是解offset质变的问题。 https://yq.aliyun.com/articles/57730 这一篇要解的是offset偏移量越大,越慢的问题。 offset偏移量很大的情况下,即使走的是索引(没有使用额外的sort),也会很慢,这是为什么呢?...

Greenplum ORCA 优化器的编译安装与使用

3 minute read

背景 ORCA 是PostgreSQL的下一代优化器,在QUERY的优化上比自带的优化器有长足的进步。 https://github.com/greenplum-db/gporca 安装ORCA cmake wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.g...

Greenplum 最佳实践 - 三张图读懂OLAP数据库在企业的正确使用姿势

less than 1 minute read

背景 很多使用数据仓库的朋友可能都有过这样的困惑,为什么数据仓库的资源经常会出现不可控,或者抢用的情况,严重的甚至影响正常的作业任务,导致不能按时输出报表或者分析结果。 这里的原因较多,最主要的原因可能还是使用姿势不对,MPP是用极资源的产品,一伙人在抢资源当然跑不好。你想想一个跑道能让多架飞机同时起飞或降落吗...

PostgreSQL 数据访问 offset 的质变 case

3 minute read

背景 offset limit是一个多么常见的需求啊,但是你知道offset的数据可能隐藏着质变吗? 如图 node有30W条数据,其中前100条是满足条件的,然后100条到20W条都是不满足条件的。 所以offset 10 limit 10非常的快。 但是offset 100 limit 10,就要...

PostgreSQL 老湿机图解平安科技遇到的垃圾回收坑

14 minute read

背景 近日收到 平安科技 海安童鞋 那里反馈的一个问题,在生产环境使用PostgreSQL的过程中,遇到的一个有点”不可思议”的问题。 一张经常被更新的表,通过主键查询这张表的记录时,发现需要扫描异常多的数据块。 本文将为你详细剖析这个问题,同时给出规避的方法,以及内核改造的方法。 文中还涉及到索引的结构解...

如何防止远程程序与RDS PG连接中断

12 minute read

背景 偶尔有用户会遇到远程程序连接RDS PG,在不做任何操作一段时间后可能中断。 其实可能是用户和RDS PG之间,某些网络设备设置了会话空闲超时,会主动中断会话。 那么有什么方法能解决这个问题呢? 运维的同学可能有这方面的经验,例如使用securecrt或者其他终端连接服务器时,可以设置这些管理工具的n...

PostgreSQL PL/Perl 钩子安全性分析

5 minute read

背景 plperl 是PostgreSQL支持的函数语言之一。 在使用plperl时,可以使用plperl提供的钩子功能,满足一些特殊场景的需求。 钩子分2种,一种是加载plperl.so库时的钩子,一种是加载perl语言解释器时的钩子。 钩子的使用有安全问题吗? 钩子用法介绍 加载plperl.so库时...

PostgreSQL Oracle 兼容性之 - PL/SQL record, table类型定义

1 minute read

背景 Oracle PL/SQL是非常强大的一门SQL编程语言,许多Oracle用户也使用它来处理一些要求延迟低且数据一致性或可靠性要求很高的业务逻辑。 PostgreSQL也有一门非常高级的内置SQL编程语言,plpgsql。与Oracle PL/SQL语法极其类似,但是还是有一些不一样的地方。 (PS:除...

连接 0.0.0.0/32 发生了什么

2 minute read

背景 根据RFC 3330, 1700 的描述, 0.0.0.0/32 可以用作当前网络的源地址。 0.0.0.0/8 - Addresses in this block refer to source hosts on "this" network. Address 0.0.0.0/32 may be...

聊一聊双十一背后的技术 - 物流, 动态路径规划

4 minute read

背景 双十一背后的技术系列文章 《聊一聊双十一背后的技术 - 分词和搜索》 每年双十一的交易额都创新高,今年也不例外,双十一几乎成了各种IT系统的大考,物流也不例外。 每次双十一快递几乎都被爆仓,但是随着技术的发展,今年,听说双十一刚过,小伙伴们的包裹差不多都收到了,今年的快递效率怎么如此之高呢? 今天,来...

PostgreSQL relcache在长连接应用中的内存霸占坑

3 minute read

背景 阿里巴巴内部的某业务在使用阿里云RDS PG时,业务线细心的DBA发现,一些长连接占据了大量的内存没有释放。后来找到了复现的方法。使用场景有些极端。 有阿里巴巴内部业务这样的老湿机陪伴的RDS PG,是很靠谱的。 PostgreSQL 缓存 除了常见的执行计划缓存、数据缓存,PostgreSQL为了提高...

PostgreSQL 内核扩展之 - 管理十亿级3D扫描数据(基于Lidar产生的point cloud数据)

7 minute read

背景 背景知识 还记得成龙演的那部《十二生肖》里用3D扫描和打印技术复制的生肖吗? 3D打印是近几年兴起的一种技术,除了存储 物体表面的位置信息,还有颜色,密度等信息 。 而3D扫描其实在军用领域很早以前就有了。 如果使用普通的数据库来存储,得把这些属性拆开来存。 而在PostgreSQL中,你完全不...

找对业务G点, 体验酸爽 - PostgreSQL内核扩展指南

1 minute read

背景 通用数据库就像带装修的房子一样,如果按数据库的功能划分,可以分为豪华装修、精装、简装。 PostgreSQL从SQL兼容性、功能、性能、稳定性等方面综合评价的话,绝对算得上豪华装修级别的,用户拎包入住就可以。 不过通用的毕竟是通用的,如果G点不对的话,再豪华的装修你也爽不起来,这是很多通用数据库的弊病,...

为什么用 PostgreSQL 绑定变量 没有 Oracle pin S 等待问题

1 minute read

背景 早上看到盖国强老师在朋友圈里分享了一篇关于软解析带来的Pin S等待的问题。 有感而发,跟大家聊一聊为什么PostgreSQL不存在这个问题。 Oracle 在Oracle中多个会话高并发的执行同一条SQL,如果使用了绑定变量的话,会产生pin s的等待事件。 原因如下(取自互联网http://www...

PostgreSQL plan cache 源码浅析 - 如何确保不会计划倾斜

3 minute read

背景 早上写了一篇文章《为什么用 PostgreSQL 绑定变量 没有 Oracle pin S 等待问题》,可以看到PostgreSQL为开发人员着想的,设计得非常人性化。 https://yq.aliyun.com/articles/55698 同时也收到了一些朋友发来的问题,有朋友问我PostgreSQ...