专栏导览
按领域划分的六个长青专栏,均提供独立的 RSS 订阅源。

PostgreSQL例行维护
汽车需要上油,数据库也需要维护保养。对Pg而言,有三项比较重要的维护工作:备份、重整、清理。

备份恢复手段概览
备份是DBA的安身立命之本,有备份,就不用慌。

Pgbouncer快速上手
Pgbouncer是一个轻量级的数据库连接池,这里简单介绍Pgbouncer的配置、管理与使用。

PgBackRest2中文文档
PgBackRest是用perl写的一组PostgreSQL备份工具。

使用sysbench测试PostgreSQL性能
尽管PostgreSQL提供了pgbench,但有时候为了吊打一下MySQL,还是需要用到sysbench的。

使用FIO测试磁盘性能
FIO可以很方便地测试磁盘IO性能。

空中换引擎:PostgreSQL不停机迁移数据
通常涉及到数据迁移,常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。

PG服务器日志常规配置
建议配置PostgreSQL的日志格式为CSV,方便分析,而且可以直接导入PostgreSQL数据表中。

找出没用过的索引
索引很有用,但不是免费的。没用到的索引是一种浪费,使用这里的方法找出未使用的索引。

批量配置SSH免密登录
快速配置所有机器的免密登陆。

Wireshark抓包分析协议
Wireshark是一个很有用的工具,特别适合用来分析网络协议,这里简单介绍使用Wireshark抓包分析PostgreSQL协议的方法。

file_fdw妙用无穷——从数据库读取系统信息
通过file_fdw,轻松查看操作系统信息,拉取网络数据,把各种各样的数据源轻松喂进数据库里统一查看管理。

香格里拉:洛克线游记
单人重装洛克线,用三天半的时间走完了6天的路,真是差点死在山上啊。

源码编译安装 PostGIS
PostGIS是PG的杀手锏插件,但编译安装可不容易。

Linux 常用统计 CLI 工具
top, free, vmstat, iostat:四大常用 CLI 工具命令速查。

Go数据库教程:database/sql
同JDBC类似,Go也有标准的数据库访问接口。本文详细介绍了Go语言中database/sql的使用方法和注意事项。

GO与PG实现缓存同步
巧妙运用Pg的Notify功能,可以方便地通知应用元数据变更,实现基于触发器的逻辑复制。

用触发器审计数据变化
有时候,我们希望记录一些重要的元数据变更,以便事后审计之用。PostgreSQL的触发器就可以很方便地自动解决这一需求。

神经网络基本原理
神经网络从大脑的工作原理得到启发,可用于解决通用的学习问题。本文介绍神经网络的基本原理与实践

推断统计:p值的前生今世
推断统计的核心在于假设检验。基本逻辑是基于科学哲学的一个重要论点:全称命题只能被否证而不能被证明。这个道理很简单,个案当然不足以证明一个全称命题,但是却可以否定全称命题。

统计学基础:描述统计
统计分析分为描述统计与推断统计两个领域, 描述统计(Descriptive Statistics)是关于对已有数据进行描述或表征的技术,也是统计学中最基础的部分。

SQL实现ItemCF推荐系统
用PostgreSQL 5分钟实现一个最简单ItemCF推荐系统。

概率论基本概念
概率论基础知识笔记,公理化基础,概率演算,计数,条件概率,随机变量与分布函数

从/0开始:理解错误与异常
在计算机中除以0会发生什么?答案并不是固定的,在不同的操作系统,不同的编程语言,甚至不同的编译器下,答案都可能是不同的。

PostgreSQL例行维护
汽车需要上油,数据库也需要维护保养。对Pg而言,有三项比较重要的维护工作:备份、重整、清理。

备份恢复手段概览
备份是DBA的安身立命之本,有备份,就不用慌。

Pgbouncer快速上手
Pgbouncer是一个轻量级的数据库连接池,这里简单介绍Pgbouncer的配置、管理与使用。

PgBackRest2中文文档
PgBackRest是用perl写的一组PostgreSQL备份工具。

使用sysbench测试PostgreSQL性能
尽管PostgreSQL提供了pgbench,但有时候为了吊打一下MySQL,还是需要用到sysbench的。

使用FIO测试磁盘性能
FIO可以很方便地测试磁盘IO性能。

空中换引擎:PostgreSQL不停机迁移数据
通常涉及到数据迁移,常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。

PG服务器日志常规配置
建议配置PostgreSQL的日志格式为CSV,方便分析,而且可以直接导入PostgreSQL数据表中。

找出没用过的索引
索引很有用,但不是免费的。没用到的索引是一种浪费,使用这里的方法找出未使用的索引。

批量配置SSH免密登录
快速配置所有机器的免密登陆。

Wireshark抓包分析协议
Wireshark是一个很有用的工具,特别适合用来分析网络协议,这里简单介绍使用Wireshark抓包分析PostgreSQL协议的方法。

file_fdw妙用无穷——从数据库读取系统信息
通过file_fdw,轻松查看操作系统信息,拉取网络数据,把各种各样的数据源轻松喂进数据库里统一查看管理。

香格里拉:洛克线游记
单人重装洛克线,用三天半的时间走完了6天的路,真是差点死在山上啊。

源码编译安装 PostGIS
PostGIS是PG的杀手锏插件,但编译安装可不容易。

Linux 常用统计 CLI 工具
top, free, vmstat, iostat:四大常用 CLI 工具命令速查。

Go数据库教程:database/sql
同JDBC类似,Go也有标准的数据库访问接口。本文详细介绍了Go语言中database/sql的使用方法和注意事项。

GO与PG实现缓存同步
巧妙运用Pg的Notify功能,可以方便地通知应用元数据变更,实现基于触发器的逻辑复制。

用触发器审计数据变化
有时候,我们希望记录一些重要的元数据变更,以便事后审计之用。PostgreSQL的触发器就可以很方便地自动解决这一需求。

神经网络基本原理
神经网络从大脑的工作原理得到启发,可用于解决通用的学习问题。本文介绍神经网络的基本原理与实践

推断统计:p值的前生今世
推断统计的核心在于假设检验。基本逻辑是基于科学哲学的一个重要论点:全称命题只能被否证而不能被证明。这个道理很简单,个案当然不足以证明一个全称命题,但是却可以否定全称命题。

统计学基础:描述统计
统计分析分为描述统计与推断统计两个领域, 描述统计(Descriptive Statistics)是关于对已有数据进行描述或表征的技术,也是统计学中最基础的部分。

SQL实现ItemCF推荐系统
用PostgreSQL 5分钟实现一个最简单ItemCF推荐系统。

概率论基本概念
概率论基础知识笔记,公理化基础,概率演算,计数,条件概率,随机变量与分布函数

从/0开始:理解错误与异常
在计算机中除以0会发生什么?答案并不是固定的,在不同的操作系统,不同的编程语言,甚至不同的编译器下,答案都可能是不同的。
PostgreSQL例行维护

汽车需要上油,数据库也需要维护保养。 PG中的维护工作 对Pg而言,有三项比较重要的维护工作:备份、重整、清理 备份(backup):最重要的例行工作,生命线。 制作基础备份 归档增量WAL 重整(repack) 重整表与索引能消除其中的膨胀,节约空间,确保查询性能不会劣化。 清理(vacuum) 维护表与库的年龄,避免事务ID回卷故障。 更新统计数据,生成更好的执行计划。 回收死元组。节约空间,提高性能。 备份 备份可以使用 pg_backrest 作为一条龙解决方案,但这里考虑使用脚本进行备 …
汽车需要上油,数据库也需要维护保养。 PG中的维护工作 对Pg而言,有三项比较重要的维护工作:备份、重整、清理 备份(backup):最重要的例行工作,生命线。 制作基础备份 归档增量WAL 重整(repack) 重整表与索引能消除其中的膨胀,节约空间,确保查询性能不会劣化。 清理(vacuum) 维护表与库的年龄,避免事务ID回卷故障。 更新统计数据,生成更好的执行计划。 回收死元组。节约空间,提高性能。 备份 备份可以使用 pg_backrest 作为一条龙解决方案,但这里考虑使用脚本进行备 …
备份恢复手段概览

备份是DBA的安身立命之本,有备份,就不用慌。 备份有三种形式:SQL转储,文件系统备份,连续归档 1. SQL转储 SQL 转储方法的思想是: 创建一个由SQL命令组成的文件,服务器能利用其中的SQL命令重建与转储时状态一样的数据库。 1.1 转储 工具 pg_dump、pg_dumpall 用于进行SQL转储。结果输出到stdout。 pg_dump dbname > filename pg_dump dbname -f filename pg_dump 是一个普通的PostgreSQL客户 …
备份是DBA的安身立命之本,有备份,就不用慌。 备份有三种形式:SQL转储,文件系统备份,连续归档 1. SQL转储 SQL 转储方法的思想是: 创建一个由SQL命令组成的文件,服务器能利用其中的SQL命令重建与转储时状态一样的数据库。 1.1 转储 工具 pg_dump、pg_dumpall 用于进行SQL转储。结果输出到stdout。 pg_dump dbname > filename pg_dump dbname -f filename pg_dump 是一个普通的PostgreSQL客户 …
Pgbouncer快速上手

Pgbouncer是一个轻量级的数据库连接池。 概要 pgbouncer [-d][-R][-v][-u user] <pgbouncer.ini> pgbouncer -V|-h 描述 pgbouncer 是一个PostgreSQL连接池。 任何目标应用程序都可以连接到 pgbouncer, 就像它是PostgreSQL服务器一样,pgbouncer 将创建到实际服务器的连接, 或者它将重用其中一个现有的连接。 pgbouncer 的目的是为了降低打开PostgreSQL新连接时的性能影响。 …
Pgbouncer是一个轻量级的数据库连接池。 概要 pgbouncer [-d][-R][-v][-u user] <pgbouncer.ini> pgbouncer -V|-h 描述 pgbouncer 是一个PostgreSQL连接池。 任何目标应用程序都可以连接到 pgbouncer, 就像它是PostgreSQL服务器一样,pgbouncer 将创建到实际服务器的连接, 或者它将重用其中一个现有的连接。 pgbouncer 的目的是为了降低打开PostgreSQL新连接时的性能影响。 …
PgBackRest2中文文档

pgBackRest主页:http://pgbackrest.org pgBackRest Github主页:https://github.com/pgbackrest/pgbackrest 前言 pgBackRest旨在提供一个简单可靠,容易纵向扩展的PostgreSQL备份恢复系统。 pgBackRest并不依赖像tar和rsync这样的传统备份工具,而在内部实现所有备份功能,并使用自定义协议来与远程系统进行通信。 消除对tar和rsync的依赖可以更好地解决特定于数据库的备份问题。 自定义 …
pgBackRest主页:http://pgbackrest.org pgBackRest Github主页:https://github.com/pgbackrest/pgbackrest 前言 pgBackRest旨在提供一个简单可靠,容易纵向扩展的PostgreSQL备份恢复系统。 pgBackRest并不依赖像tar和rsync这样的传统备份工具,而在内部实现所有备份功能,并使用自定义协议来与远程系统进行通信。 消除对tar和rsync的依赖可以更好地解决特定于数据库的备份问题。 自定义 …
使用sysbench测试PostgreSQL性能

sysbench首页:https://github.com/akopytov/sysbench 安装 二进制安装,在Mac上,使用brew安装sysbench。 brew install sysbench --with-postgresql 源代码编译(CentOS): yum -y install make automake libtool pkgconfig libaio-devel # For MySQL support, replace with mysql-devel on …
sysbench首页:https://github.com/akopytov/sysbench 安装 二进制安装,在Mac上,使用brew安装sysbench。 brew install sysbench --with-postgresql 源代码编译(CentOS): yum -y install make automake libtool pkgconfig libaio-devel # For MySQL support, replace with mysql-devel on …
使用FIO测试磁盘性能

Fio是一个很好用的磁盘性能测试工具,可以通过以下命令测试磁盘的读写性能。 fio --filename=/tmp/fio.data \ -direct=1 \ -iodepth=32 \ -rw=randrw \ --rwmixread=80 \ -bs=4k \ -size=1G \ -numjobs=16 \ -runtime=60 \ -group_reporting \ -name=randrw \ --output=/tmp/fio_randomrw.txt \ && unlink …
Fio是一个很好用的磁盘性能测试工具,可以通过以下命令测试磁盘的读写性能。 fio --filename=/tmp/fio.data \ -direct=1 \ -iodepth=32 \ -rw=randrw \ --rwmixread=80 \ -bs=4k \ -size=1G \ -numjobs=16 \ -runtime=60 \ -group_reporting \ -name=randrw \ --output=/tmp/fio_randomrw.txt \ && unlink …
空中换引擎:PostgreSQL不停机迁移数据

通常涉及到数据迁移,常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。 不停机数据迁移在本质上,可以视作由三个操作组成: 复制:将目标表从源库 逻辑复制 到宿库。 改读:将应用 读取路径 由源库迁移到宿库上。 改写:将应用 写入路径 由源库迁移到宿库上。 但在实际执行中,这三个步骤可能会有不一样的表现形式。 逻辑复制 使用逻辑复制是比较稳妥的做法,也有几种不同的做法:应用层逻辑复制,数据库自带的逻辑复制(PostgreSQL 10 之后的逻辑订阅),使用第三方逻辑复制插件(例如 …
通常涉及到数据迁移,常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。 不停机数据迁移在本质上,可以视作由三个操作组成: 复制:将目标表从源库 逻辑复制 到宿库。 改读:将应用 读取路径 由源库迁移到宿库上。 改写:将应用 写入路径 由源库迁移到宿库上。 但在实际执行中,这三个步骤可能会有不一样的表现形式。 逻辑复制 使用逻辑复制是比较稳妥的做法,也有几种不同的做法:应用层逻辑复制,数据库自带的逻辑复制(PostgreSQL 10 之后的逻辑订阅),使用第三方逻辑复制插件(例如 …
PG服务器日志常规配置

建议配置PostgreSQL的日志格式为CSV,方便分析,而且可以直接导入PostgreSQL数据表中。 日志相关配置项 log_destination ='csvlog' logging_collector =on log_directory ='log' log_filename ='postgresql-%a.log' log_min_duration_statement =1000 log_checkpoints =on log_lock_waits =on log_statement …
建议配置PostgreSQL的日志格式为CSV,方便分析,而且可以直接导入PostgreSQL数据表中。 日志相关配置项 log_destination ='csvlog' logging_collector =on log_directory ='log' log_filename ='postgresql-%a.log' log_min_duration_statement =1000 log_checkpoints =on log_lock_waits =on log_statement …
找出没用过的索引

索引很有用, 但不是免费的。没用到的索引是一种浪费,使用以下SQL找出未使用的索引: 首先要排除用于实现约束的索引(删不得) 表达式索引(pg_index.indkey 中含有0号字段) 然后找出走索引扫描的次数为0的索引(也可以换个更宽松的条件,比如扫描小于1000次的) 找出没有使用的索引 视图名称:monitor.v_bloat_indexes 计算时长:1秒,适合每天检查/手工检查,不适合频繁拉取。 验证版本:9.3 ~ 10 功能:显示当前数据库索引膨胀情况。 在版本9.3与10.4上 …
索引很有用, 但不是免费的。没用到的索引是一种浪费,使用以下SQL找出未使用的索引: 首先要排除用于实现约束的索引(删不得) 表达式索引(pg_index.indkey 中含有0号字段) 然后找出走索引扫描的次数为0的索引(也可以换个更宽松的条件,比如扫描小于1000次的) 找出没有使用的索引 视图名称:monitor.v_bloat_indexes 计算时长:1秒,适合每天检查/手工检查,不适合频繁拉取。 验证版本:9.3 ~ 10 功能:显示当前数据库索引膨胀情况。 在版本9.3与10.4上 …
批量配置SSH免密登录

配置SSH是运维工作的基础,有时候还是要老生常谈一下。 生成公私钥对 理想的情况是全部通过公私钥认证,从本地免密码直接连接所有数据库机器。最好不要使用密码认证。 首先,使用 ssh-keygen 生成公私钥对 ssh-keygen -t rsa 注意权限问题,ssh内文件的权限应当设置为 0600,.ssh 目录的权限应当设置为 0700,设置失当会导致免密登录无法使用。 配置ssh config穿透跳板机 把 User 换成自己的名字。放入 .ssh/config,这里给出了有跳板机环境下配置 …
配置SSH是运维工作的基础,有时候还是要老生常谈一下。 生成公私钥对 理想的情况是全部通过公私钥认证,从本地免密码直接连接所有数据库机器。最好不要使用密码认证。 首先,使用 ssh-keygen 生成公私钥对 ssh-keygen -t rsa 注意权限问题,ssh内文件的权限应当设置为 0600,.ssh 目录的权限应当设置为 0700,设置失当会导致免密登录无法使用。 配置ssh config穿透跳板机 把 User 换成自己的名字。放入 .ssh/config,这里给出了有跳板机环境下配置 …
Wireshark抓包分析协议

Wireshark是一个很有用的工具,特别适合用来分析网络协议。 这里简单介绍使用Wireshark抓包分析PostgreSQL协议的方法。 假设调试本地PostgreSQL实例:127.0.0.1:5432 快速开始 下载并安装Wireshark:下载地址 选择要抓包的网卡,如果是本地测试选择 lo0 即可。 添加抓包过滤器,如果PostgreSQL使用默认设置,使用 port 5432 即可。 开始抓包 添加显示过滤器 pgsql,这样就可以滤除无关的TCP协议报文。 然后就可以执行一些操作 …
Wireshark是一个很有用的工具,特别适合用来分析网络协议。 这里简单介绍使用Wireshark抓包分析PostgreSQL协议的方法。 假设调试本地PostgreSQL实例:127.0.0.1:5432 快速开始 下载并安装Wireshark:下载地址 选择要抓包的网卡,如果是本地测试选择 lo0 即可。 添加抓包过滤器,如果PostgreSQL使用默认设置,使用 port 5432 即可。 开始抓包 添加显示过滤器 pgsql,这样就可以滤除无关的TCP协议报文。 然后就可以执行一些操作 …
file_fdw妙用无穷——从数据库读取系统信息

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

单人重装洛克线,用三天半的时间走完了6天的路,真是差点死在山上啊。 惦记了半年的洛克线,这次终于走完了。还是有点恍惚的。在山上的最后一天,感冒药吃完了,连着两天大雨把衣服和帐篷都淋湿了。差点交代在山上,还好最后还是挺下来了,三天半、单人、重装、走完洛克线,这牛逼我能吹一辈子哈。 行程概览 本来计划洛克线5天走完,最后三天半走完,10月4日中午点从亚丁景区大门出来。累的半死,直接回家了。中途在稻城县、康定又各待了一天。 时间 起点 终点 说明 09-28 07:40~10:40 北京首都T1 成 …
单人重装洛克线,用三天半的时间走完了6天的路,真是差点死在山上啊。 惦记了半年的洛克线,这次终于走完了。还是有点恍惚的。在山上的最后一天,感冒药吃完了,连着两天大雨把衣服和帐篷都淋湿了。差点交代在山上,还好最后还是挺下来了,三天半、单人、重装、走完洛克线,这牛逼我能吹一辈子哈。 行程概览 本来计划洛克线5天走完,最后三天半走完,10月4日中午点从亚丁景区大门出来。累的半死,直接回家了。中途在稻城县、康定又各待了一天。 时间 起点 终点 说明 09-28 07:40~10:40 北京首都T1 成 …
源码编译安装 PostGIS

强烈建议使用使用 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 …
强烈建议使用使用 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 …
Linux 常用统计 CLI 工具

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

Go使用SQL与类SQL数据库的惯例是通过标准库database/sql。这是一个对关系型数据库的通用抽象,它提供了标准的、轻量的、面向行的接口。不过 database/sql 的包文档只讲它做了什么,却对如何使用只字未提。快速指南远比堆砌事实有用,本文讲述了 database/sql 的使用方法及其注意事项。 1. 顶层抽象 在Go中访问数据库需要用到 sql.DB 接口:它可以创建语句(statement)和事务(transaction),执行查询,获取结果。 sql.DB 并不是数据库连接 …
Go使用SQL与类SQL数据库的惯例是通过标准库database/sql。这是一个对关系型数据库的通用抽象,它提供了标准的、轻量的、面向行的接口。不过 database/sql 的包文档只讲它做了什么,却对如何使用只字未提。快速指南远比堆砌事实有用,本文讲述了 database/sql 的使用方法及其注意事项。 1. 顶层抽象 在Go中访问数据库需要用到 sql.DB 接口:它可以创建语句(statement)和事务(transaction),执行查询,获取结果。 sql.DB 并不是数据库连接 …
GO与PG实现缓存同步

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

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

神经网络从大脑的工作原理得到启发,可用于解决通用的学习问题。本文介绍神经网络的基本原理与实践 神经网络表示 神经元模型 神经网络从大脑的工作原理得到启发,可用于解决通用的学习问题。神经网络的基本组成单元是 神经元(neuron)。每个神经元具有一个轴突和多个树突。每个连接到本神经元的树突都是一个输入,当所有输入树突的兴奋水平之和超过某一阈值,神经元就会被激活。激活的神经元会沿着其轴突发射信号,轴突分出数以万计的树突连接至其他神经元,并将本神经元的输出并作为其他神经元的输入。数学上,神经元可以用 …
神经网络从大脑的工作原理得到启发,可用于解决通用的学习问题。本文介绍神经网络的基本原理与实践 神经网络表示 神经元模型 神经网络从大脑的工作原理得到启发,可用于解决通用的学习问题。神经网络的基本组成单元是 神经元(neuron)。每个神经元具有一个轴突和多个树突。每个连接到本神经元的树突都是一个输入,当所有输入树突的兴奋水平之和超过某一阈值,神经元就会被激活。激活的神经元会沿着其轴突发射信号,轴突分出数以万计的树突连接至其他神经元,并将本神经元的输出并作为其他神经元的输入。数学上,神经元可以用 …
推断统计:p值的前生今世

推断统计的核心在于假设检验。基本逻辑是基于科学哲学的一个重要论点:全称命题只能被否证而不能被证明 。这个道理很简单,个案当然不足以证明一个全称命题,但是却可以否定全称命题。 假设检验的哲学基础 假设检验的基本思想是:小概率反证法。假设检验的假设是关于总体的一个普遍性论断,这个检验是看从样本得出的结论能否推论到总体。 假设检验的基本逻辑是基于科学哲学的一个重要论点:全称命题只能被否证而不能被证明。这个道理很简单,个案当然不足以证明一个全称命题,但是却可以否定全称命题。 我们想证明的结论既然无法通 …
推断统计的核心在于假设检验。基本逻辑是基于科学哲学的一个重要论点:全称命题只能被否证而不能被证明 。这个道理很简单,个案当然不足以证明一个全称命题,但是却可以否定全称命题。 假设检验的哲学基础 假设检验的基本思想是:小概率反证法。假设检验的假设是关于总体的一个普遍性论断,这个检验是看从样本得出的结论能否推论到总体。 假设检验的基本逻辑是基于科学哲学的一个重要论点:全称命题只能被否证而不能被证明。这个道理很简单,个案当然不足以证明一个全称命题,但是却可以否定全称命题。 我们想证明的结论既然无法通 …
统计学基础:描述统计

统计分析分为描述统计与推断统计两个领域,描述统计(Descriptive Statistics)是关于对已有数据进行描述或表征的技术,也是统计学中最基础的部分。 1. 统计与科学方法 1.1 认识方法 历史上,人类主要采用:权威,理性主义,直觉与科学方法 获取知识 权威(Authority):基于传统或者一些权威人士的意见获取知识 理性主义(rationalism):通过推理获取知识,但是对于判定命题的真假,推理是不够的 直觉(intuition):直觉是突然的顿悟,是涌入意识的突然想法。 科 …
统计分析分为描述统计与推断统计两个领域,描述统计(Descriptive Statistics)是关于对已有数据进行描述或表征的技术,也是统计学中最基础的部分。 1. 统计与科学方法 1.1 认识方法 历史上,人类主要采用:权威,理性主义,直觉与科学方法 获取知识 权威(Authority):基于传统或者一些权威人士的意见获取知识 理性主义(rationalism):通过推理获取知识,但是对于判定命题的真假,推理是不够的 直觉(intuition):直觉是突然的顿悟,是涌入意识的突然想法。 科 …
SQL实现ItemCF推荐系统

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

1. 集合论 样本空间和样本点是概率论中无定义的基本概念,如同几何中的点和直线的概念一般。 定义:事件 事件:事件是样本点的 集合。 $A=0$表示事件A不含任何样本点,即A是不可能事件。 $A=0$是一个代数表达式而不是算术表达式,0在这里是一个符号。 样本空间中一切不属于事件A的点所构成的事件称为A的补事件。或称非事件。并以$A^C$记之,$S^C=0$ 事件A、B、C的交,用$A\cap B \cap C$表示,并用$A \cup B \cup C$表示事件的并 $A\subset B$ …
1. 集合论 样本空间和样本点是概率论中无定义的基本概念,如同几何中的点和直线的概念一般。 定义:事件 事件:事件是样本点的 集合。 $A=0$表示事件A不含任何样本点,即A是不可能事件。 $A=0$是一个代数表达式而不是算术表达式,0在这里是一个符号。 样本空间中一切不属于事件A的点所构成的事件称为A的补事件。或称非事件。并以$A^C$记之,$S^C=0$ 事件A、B、C的交,用$A\cap B \cap C$表示,并用$A \cup B \cup C$表示事件的并 $A\subset B$ …
从/0开始:理解错误与异常

在计算机中除以0会发生什么?错误是错误,异常是异常。这里面但区别还是很微妙的。 是的,没有打错,标题中是 /0 而不是 0。 那么问题就来了:除以0会发生什么? 限定条件是必须的:在CS领域,*nix | win操作系统下任意编程语言中,整数除法运算中除数为零的情况。 答案并不是固定的,在不同的操作系统,不同的编程语言,甚至不同的编译器下,答案都可能是不同的。 除0异常 譬如, 在OS X下,使用C语言,Clang编译,引发除零并不会报错,会返回一个垃圾值。 $ echo 'void …
在计算机中除以0会发生什么?错误是错误,异常是异常。这里面但区别还是很微妙的。 是的,没有打错,标题中是 /0 而不是 0。 那么问题就来了:除以0会发生什么? 限定条件是必须的:在CS领域,*nix | win操作系统下任意编程语言中,整数除法运算中除数为零的情况。 答案并不是固定的,在不同的操作系统,不同的编程语言,甚至不同的编译器下,答案都可能是不同的。 除0异常 譬如, 在OS X下,使用C语言,Clang编译,引发除零并不会报错,会返回一个垃圾值。 $ echo 'void …





