Posts in 2018
  • 第十章 基础备份与时间点恢复

    2018年01月02日 in PG 内核

    在线数据库备份大致可分为两类:逻辑备份和物理备份。它们有着各自的优点和缺点。尽管各有优劣,但逻辑备份有一个缺点:执行需要花费太多时间。特别是对于大型数据库而言,需要花费很长时间进行备份,而从备份数据中恢复数据库可能需要更长的时间。相反的是,物理备份可以在相对较短的时间内备份和恢复大型数据库,因此在实际系统中,它是一个非常重要而实用的功能。 在PostgreSQL中,自8.0版本开始提供在线的全量物理备份,整个数据库集簇(即物理备份数据)的运行时快照称为基础备份(base backup)。 …

    Read more

  • 第十一章 流复制

    2018年01月01日 in PG 内核

    PostgreSQL在9.1版本中实现了流复制。它属于所谓的一主多从类型的复制,而这两个术语 —— 主(master)和从(slave),在PostgreSQL中通常分别被称为主(primary)和备(standby)。 译注:存储数据库副本的每个节点称为副本(replica)。每一次对数据库的写入操作都需要传播到所有副本上,否则副本就会包含不一样的数据。最常见的解决方案被称为基于领导者的复制(leader-based replication),也称主动/被动(active/passive) …

    Read more

Posts in 2017
  • file_fdw妙用无穷——从数据库读取系统信息

    2017年12月01日 in PG 开发

    PostgreSQL是最先进的开源数据库,其中一个非常给力的特性就是FDW:外部数据包装器(Foreign Data Wrapper)。通过FDW,用户可以用统一的方式从Pg中访问各类外部数据源。file_fdw就是其中随数据库附赠的两个fdw之一。随着pg10的更新,file_fdw也添加了一颗赛艇的功能:从程序输出读取。 小霸王妙用无穷,我们能通过file_fdw,轻松查看操作系统信息,拉取网络数据,把各种各样的数据源轻松喂进数据库里统一查看管理。 安装与配置 file_fdw是Pg自带的组 …

    Read more

  • 源码编译安装 PostGIS

    2017年09月07日 in PG 管理

    强烈建议使用使用 yum / apt 命令从 PostgreSQL 官方二进制仓库安装 PostGIS。 参考http://www.postgresonline.com/journal/archives/362-An-almost-idiots-guide-to-install-PostgreSQL-9.5,-PostGIS-2.2-and-pgRouting-2.1.0-with-Yum.html 1. 安装环境 CentOS 7 PostgreSQL10 PostGIS2.4 …

    Read more

  • Linux 常用统计 CLI 工具

    2017年09月07日 in PG 管理

    top free vmstat iostat top 显示Linux任务 摘要 按下空格或回车强制刷新 使用h打开帮助 使用l,t,m收起摘要部分。 使用d修改刷新周期 使用z开启颜色高亮 使用u列出指定用户的进程 使用<>来改变排序列 使用P按CPU使用率排序 使用M按驻留内存大小排序 使用T按累计时间排序 批处理模式 -b参数可以用于批处理模式,配合-n参数指定批次数目。同时-d参数可以指定批次的间隔时间 例如获取机器当前的负载使用情况,以0.1秒为间隔获取三次,获取最后一次 …

    Read more

  • GO与PG实现缓存同步

    2017年08月03日 in PG 开发

    Parallel与Hierarchy是架构设计的两大法宝,缓存是Hierarchy在IO领域的体现。单线程场景下缓存机制的实现可以简单到不可思议,但很难想象成熟的应用会只有一个实例。在使用缓存的同时引入并发,就不得不考虑一个问题:如何保证每个实例的缓存与底层数据副本的数据一致性(和实时性)。 PostgreSQL在版本9引入了流式复制,在版本10引入了逻辑复制,但这些都是针对PostgreSQL数据库而言的。如果希望PostgreSQL中某张表的部分数据与应用内存中的状态保持一致,我们还是需要自 …

    Read more

  • 用触发器审计数据变化

    2017年06月09日 in PG 开发

    有时候,我们希望记录一些重要的元数据变更,以便事后审计之用。 PostgreSQL的触发器就可以很方便地自动解决这一需求。 -- 创建一个审计专用schema,并废除所有非superuser的权限。 DROP SCHEMA IF EXISTS audit CASCADE; CREATE SCHEMA IF NOT EXISTS audit; REVOKE CREATE ON SCHEMA audit FROM PUBLIC; -- 审计表 CREATE TABLE …

    Read more

  • SQL实现ItemCF推荐系统

    2017年04月05日 in PG 开发

    推荐系统大家都熟悉,猜你喜欢,淘宝个性化什么的,前年双十一搞了个大新闻,还拿了CEO特别贡献奖。 今天就来说说怎么用PostgreSQL 5分钟实现一个最简单ItemCF推荐系统,以推荐系统最喜闻乐见的movielens数据集为例。 原理 ItemCF的原理可以看项亮的《推荐系统实战》,不过还是稍微提一下吧,了解的直接跳过就好。 Item CF,全称Item Collaboration Filter,即基于物品的协同过滤,是目前业界应用最多的推荐算法。ItemCF不需要物品与用户的标签、属性,只 …

    Read more

Posts in 2016
  • UUID性质原理与应用

    2016年11月06日 in PG 开发

    最近一个项目需要生成业务流水号,需求如下: ID必须是分布式生成的,不能依赖中心节点分配并保证全局唯一。 ID必须包含时间戳并尽量依时序递增。(方便阅读,提高索引效率) ID尽量散列。(分片,与HBase日志存储需要) 在造轮子之前,首先要看一下有没有现成的解决方案。 Serial 传统实践上业务流水号经常通过数据库自增序列或者发码服务来实现。 MySQL的Auto Increment,Postgres的Serial,或者Redis+lua写个小发码服务都是方便快捷的解决方案。这种方案可以保证全 …

    Read more

  • PostgreSQL MongoFDW安装部署

    2016年05月28日 in PG 管理

    更新:最近MongoFDW已经由Cybertech接手维护,也许没有这么不堪了。 最近有业务要求通过PostgreSQL FDW去访问MongoDB。开始我觉得这是个很轻松的任务。但接下来的事真是让人恶心的吐了。MongoDB FDW编译起来真是要人命:混乱的依赖,临时下载和Hotpatch,错误的编译参数,以及最过分的是错误的文档。总算,我在生产环境(Linux RHEL7u2)和开发环境(Mac OS X 10.11.5)都编译成功了。赶紧记录下来,省的下次蛋疼。 环境概述 理论上编译这套 …

    Read more