PostgreSQL 10.0 preview 功能增强 - 更强可靠性, 过去式事务状态可查(杜绝unknown事务)
背景 在一些极端情况下,例如当客户端发出事务提交SQL后,客户端收到数据库返回的提交状态前,如果客户端崩溃或数据库异常,导致客户端不知道事务的最终状态到底是提交成功还是失败的。 那么怎么解决这个问题呢? 1. 一种方法是走2PC协议,先使用预提交,然后在发出commit 之前的预提交。(因为只要预提交成功,就...
背景 在一些极端情况下,例如当客户端发出事务提交SQL后,客户端收到数据库返回的提交状态前,如果客户端崩溃或数据库异常,导致客户端不知道事务的最终状态到底是提交成功还是失败的。 那么怎么解决这个问题呢? 1. 一种方法是走2PC协议,先使用预提交,然后在发出commit 之前的预提交。(因为只要预提交成功,就...
背景 PostgreSQL 10.0 使用radix tree提升UTF-8与其他字符编码转换的性能。 编码map文件按新的radix tree编排,性能相比binary search好了很多。 Use radix tree for character encoding conversions. a...
背景 10.0 把几个有一定“歧义”的目录更名了。它们分别为 pg_xlog, pg_clog, pg_log 更名为 pg_wal, pg_xact, log 分别对应WAL(write ahead log)日志,事务状态日志,日志。 省得有人误删其中的LOG目录中的文件。(还真有发生过)。 对应p...
背景 10.0 新增了一个DEBUG参数,用于检测recovery过程中,由于wal replay BUG或者备库的物理数据块异常导致的wal replay回放出来的块不正确的问题。 当产生脏页时,在wal记录中,可能有两种信息: 1. 只记录了数据变更的部分。 2. FULL PAGE,记录了整个数据块。...
背景 一些高端存储、包括ZFS文件系统,在使用了RAID后,有块检测和异常块的修复功能。 对于数据库来说,数据的可靠性是非常重要的指标,例如: 1. 写进入是什么,读出来就应该是什么。 2. 当操作系统的collate发生变化时,索引的顺序可能与实际的collate顺序不匹配。造成不稳定现象。 3. 数据...
背景 数据库一主多备,这个词在互联网应该不陌生。但是主备切换和应用程序如何配合才能天衣无缝呢?你可能会有这样的疑问。 1. 什么类型的QUERY发给主库,什么类型的QUERY发给备库? 2. 主库和备库发生了角色切换之后,客户端连接如何配合? 业界有一些做法可以回答这两个问题。 1. 通常使用集群软件,使...
背景 物流行业对地理位置信息数据的处理有非常强烈的需求,例如 1. 实时跟踪快递员、货车的位置信息。对数据库的写入性能要求较高。 2. 对于当日件,需要按发货位置,实时召回附近的快递员。 3. 实时的位置信息非常庞大,为了数据分析的需求,需要保留数据,所以需要廉价的存储。例如对象存储。同时还需要和数据库或分...
背景 证券行业产生的数据比较多,读写非常频繁。 以股票交易为例,一共有几千只股票。一年大概有240个交易日,交易日大概是从早上10点到下午4点。 1、数据写入需求: 实时的数据写入,按查询维度的实时数据合并(比如秒数据实时写入。分钟,几分钟,。。。则实时合并)。 数据分为不同粒度的分时数据。(精确到秒...
背景 随着物联网的发展,数据的产生越来越快。比如马路的汽车通过数据,用户的驻留数据,水纹传感器的数据,电商的FEED数据,网约车的轨迹数据 等等。 这么多的数据,用途也不一样,有需要流式实时统计的,也有时序处理相关需求的,还有全量分析需求的。 这些都有对应的解决方案。 《流计算风云再起 - Postgr...
背景 逻辑订阅是PostgreSQL 10.0的新特性。 具体的原理,使用方法可以参考如下文章。 《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》 《PostgreSQL 10.0 preview 逻辑订阅 - pg_hba.conf变化,不再使用replication条目》...