PgSQL · 应用案例 · PostgreSQL IoT,车联网 - 实时轨迹、行程实践

背景 车联网场景,一个行程由若干个点组成,业务需要按行程查询,按。 但是问题来了: 一个行程包含多个点,那么一次查询意味着需要查询并返回多个点(多条记录)。 由于有多个设备(例如汽车),大概率可能同时活跃,同时上传点,因此以堆表存储的话,一个行程中的多条记录,实际上在数据库的表里面,存储在多个BLOCK里面。 如上分析,性能问题:IO放大。 如何优化? 1、行程记录,按行聚集存储。 类似cluster操作。 2、行程记录,合并到单条,聚集存储。 类似将一个行

MySQL · RocksDB · 数据的读取(二)

概述 上一篇文章中我们介绍了在RocksDB中如何在内存中查找对应的数据,这一篇我们将会详细介绍当内存中的数据不存在时,RocksDB如何在磁盘上查找对应的数据. 源码分析 依旧是从DBImpl::GetImpl开始,上一篇文章中我们分析这个函数只分析了Memtable相关的代码,这次我们来看当memtable没有查找到之后,RocksDB是如何处理的.我们可以看到当MemTable中没有找到对应的数据之后(包括删除),RocksDB将会进入对于sst的查找. if

PgSQL · 原理介绍 · PostgreSQL行锁实现

锁是数据库很重要的机制,PostgreSQL支持表锁,行锁,了解PostgreSQL行锁机制有助于我们在应用中分析和解决行锁的问题。 锁模式 当前PG支持4种行锁模式: FOR KEY SHARE, FOR SHARE, FOR NO KEY UPDATE, FOR UPDATE,我们常见的delete场景获取的均为FOR UPDATE锁,而update场景会获取FOR NO KEY UPDATE或者FOR UPDATE,要看有没有唯一索引了。 下面表格记录了4种锁模式的兼

Redis · 原理介绍 · 利用管道优化aofrewrite

前言 redis的aof持久化本质上是一个redo log,把所有执行过的写命令追加到aof文件中。那么随着redis的运行,aof文件会不断膨胀,当触发收缩条件时就要做aofrewrite。 redis是通过fork子进程来做aofrewrite,同时为了保证aof的连续性,父进程把aofrewrite期间的写命令缓存起来,等收割完子进程之后再追加到新的aof文件。如果期间写入量较大的话收割时就要有大量的写磁盘操作,造成性能下降。 为了提高aofrewrite效率,r

POLARDB · 引擎特性 · 物理复制解读

日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上所有的操作,日志模块的设计对于数据库的可靠性、稳定性和性能都非常重要。 可靠性方面,在有一个数据文件的基础全量备份后,对运行中的数据库来说,日志文件的重要性大于数据文件,只要操作记录到日志中并完成落盘,就等于操作完成,无须等待数据文件落盘。因为日志的顺序和增量方式,使得数据库的增量实时备份(包括备库)成为可能,更可以使用异步、同步或Raft多数等方式通过保护日志来保护所有的数据。 稳定性方面,日志的增量模式减少了需

MySQL · 原理介绍 · 再议MySQL的故障恢复

MySQL的事务处理—两阶段事务提交2PC MySQL数据库的INNODB是一款支持OLTP的存储引擎,为支持MySQL的高可用,支持跨机搭建高可用数据库集群,MySQL采用了一种简单有效的机制-基于binlog的复制,binlog是binary log的简称,实际上它是一种逻辑日志,相对InnoDB引擎的物理日志,它的数据量更小,格式也更简单,更易于跨机复制,尤其是对于网络环境不是很好的情况下,更具有天然的优势。 那么MySQL是如何协调InnoDB引擎与Binlog日志之

MSSQL · 最佳实践 · 行级别安全解决方案

摘要 在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥加密方式实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术和列加密技术带来的查询性能问题以及相应解决方案四篇文章。本期月报我们分享使用SQL Server RLS(Row Level Security)行级别访问控制解决方案最佳实践。 问题引入 在很久以前我分享过一篇文章SQL Server使用视图做权限控制来实现

PgSQL · 引擎特性 · PostgreSQL Hint Bits 简介

前言 MVCC (Multiversion Concurrency Control) 是数据库系统中常用的并发控制方式,通过保存数据的多个快照版本,实现 读不阻塞写,写不阻塞读。不同数据库系统实现数据多版本的方式不尽相同,MySQL,Oracle 基于回滚段实现,PostgreSQL 则在堆表中实际存储每个元组(tuple)的多个版本,多个版本的元组通过指针构成一个版本链。事务在执行时,依次判断元组的可见性,访问对其可见的元组。判断元组可见性时,通常需要知晓插入或删除该元组的

Database · 原理介绍 · 数据库的事务与复制

前言 本文试图讨论这几个问题: MySQL的redo log和binlog为什么要用XA MongoDB的oplog是按照什么顺序复制 Raft真的只能串行Apply吗 数据库的复制和事务是完全独立的两回事吗? 为什么MySQL不早点做一个Raft插件,直接用Raft实现高可用? 本文旨在阐述Fault-Tolerant Transaction的几种实现模式。虽然它们乍一看可能都是Raft + KVEngine + Concurrency Contr