PgSQL · 特性分析 · 金融级同步多副本分级配置方法
背景对于金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本。例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本。另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法。9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库apply,虽然APPLY通常都很快,可能也在毫秒级别完成,但是以前没有apply级别的同步机制。例如,用户...
View ArticleMySQL · myrocks · myrocks之事务处理
前言mysql目前支持的事务引擎有innodb,tokudb。 rocksdb加入mysql阵营后,mysql支持的事务引擎增长至3个。 myrocks目前支持的事务隔离级别有read-committed和repeatable-read。 同innodb一样,myrocks也支持MVCC机制。可以说,myrocks提供了很好的事务支持,能够满足的一般业务的事务需求。sequence...
View ArticleMySQL · TokuDB · rbtree block allocator
背景Percona在今年8月引入了一个大patch “rb tree block allocation strategy”,使用变种的红黑树作为跟踪未使用block hole的数据结构。Percona上对此介绍的连接(点击这里跳转到原文)这个改进是基于percona内部性能测试和外部用户反馈,发现当TokuDB引擎在长时间写入压力比较大的场景下,随着时间增长写入性能会急剧下降;当采用small...
View ArticleMySQL · 引擎特性 · Column Compression浅析
前言当用户的数据量比较大时,通常需要对数据进行压缩,以减少磁盘占用。InnoDB目前有两种方式来实现这一目的。第一种是传统的数据压缩,通过指定row_format及key_block_size,能够将用户表压缩到指定的page size并进行存储,默认使用zlib。这种压缩方式使用比较简单,但也是诟病较多的,...
View ArticleMySQL · 引擎介绍 · Sphinx源码剖析(一)
介绍Sphinx是一个全文索引引擎,他被设计为可以非常简单方便的与各种数据库(mysql,PG…)进行交互。它提供了两种读取接口,a) sphinx自己实现的mysql协议的接口, SphinxQL。b) 各种语言客户端的接口,也就是native搜索API. c) 也可以直接通过mysql server的一个存储引擎插件来访问,...
View ArticlePgSQL · 特性分析 · PostgreSQL 9.6 如何把你的机器掏空
背景PostgreSQL 在向和纵向的扩展能力在开源数据库中一直处于非常领先的地位,例如今年推出的9.6,内置了sharding的功能,同时在scale-up的能力也有非常明显的提升,特别是在多核与高并发处理这块。社区有同学在128核的机器上测试tpc-b的select...
View ArticlePgSQL · 特性分析 · PostgreSQL 9.6 让多核并行起来
背景经过多年的酝酿(从支持work process到支持动态fork共享内存,再到内核层面支持并行计算),PostgreSQL 的多核并行计算功能终于在2016年发布的9.6版本中正式上线,为PG的scale...
View ArticleMSSQL · 最佳实战 · 巧用COLUMNS_UPDATED获取数据变更
业务场景在平时与数据库打交道的过程中,我们经常会有这样的疑惑:如何快速的获取数据变更记录呢?举个例子,搜索引擎要为外部客人提供快速准确的商品信息搜索功能,那么当有新的商品数据变更后,搜索引擎如何快速的发现这些新的变更数据呢?我们常见的两种做法:全量更新这种方法最为简单直接,反正不管三七二十一,搜索引擎每次全量拉取商品信息表所有数据,然后创建搜索索引,提供给外部客人查询。这种方法实现起来的确最为简单,...
View ArticlePgSQL · GIS应用 · 物流, 动态路径规划
背景双十一背后的技术系列文章《聊一聊双十一背后的技术 - 分词和搜索》每年双十一的交易额都创新高,今年也不例外,双十一几乎成了各种IT系统的大考,物流也不例外。每次双十一快递几乎都被爆仓,但是随着技术的发展,今年,听说双十一刚过,小伙伴们的包裹差不多都收到了,今年的快递效率怎么如此之高呢?今天,来给大家分享一下物流与背后的数据库技术,当然我讲的还是PostgreSQL, Greenplum,...
View ArticlePgSQL · 特性分析· JIT 在数据仓库中的应用价值
背景近几年,分析型数据库中有项技术得到了广泛的应用。它就是 JIT(Just-in-time compilation)动态编译。还有一些相关名词 LLVM codegen 和这项技术相关。本文把这项技术做一个简单的分析,和大家分享。一、JIT 是什么长久以来数据仓库都是以高效的处理量数据的能力著称。随着硬件的发展,他们使用大量相关技术充分挖掘硬件的能力提高数据的吞吐量和处理效率。例如 SMP MPP...
View ArticleMySQL · 引擎特性 · Infobright 列存数据库
简介系统架构存储引擎优化器和执行器数据装载和卸载领域知识查询优化简单场景的示例小结存储结构Data PackKnowledge Node数据压缩总结简介Infobright 是一个面向 OLAP 场景的开源列存数据库。比较容易找到代码的版本是 Infobright Community Edition 4.0.7,大概是 2006 年前后的代码。2016 年6 月,Infobright...
View ArticleMySQL · myrocks · myrocks统计信息
概述mysql查询优化主要是在代价统计分析的基础上进行的。合理的代价模型和准确的代价统计信息决定了查询优化的优劣。myrocks基于mysql5.6, 目前的代价模型依赖的主要因素是IO和CPU,mysql5.7及以上的版本代价模型做了较多改进,具体可以参考这里 IO主要跟数据量和缓存相关,而CPU主要跟参与排序比较的记录数相关。...
View ArticleSQL Server · 特性介绍 · 统计信息
SQL Server查询优化器对于执行计划成本的评估是基于数据库统计信息的。所以,数据库统计信息直接影响到数据库查询效率,是数据库系统快速响应,低延迟特性的幕后英雄,但是我们又经常忽视数据库统计信息的存在和维护,怀着为英雄正名和唤醒大家对幕后英雄尊重的目的写作这篇文章。什么是统计信息SQL...
View ArticlePgSQL · 案例分享 · 从春运抢火车票思考数据库设计
背景马上春节了, 火车票又到了销售旺季, 一票难求依旧。抢火车票是很有意思的一个课题,对IT人的智商以及IT系统的健壮性,尤其是数据库的功能和性能都是一种挑战。为什么这么说呢,我们一起来缕一缕。一、铁路售票系统的需求铁路售票系统最基本的需求包括查询余票、余票统计、购票、车次变化、退票、改签、中转乘车规划 等。 每个需求都有各自的特点,例如1....
View ArticleHybridDB · 最佳实践 · OLAP和OLTP一体化打造
HybridDB(基于Greenplum)经过长达四个月时间的公测,终于开始商业化的征程、为我们客户提供计算分析能力。在这之前,我们团队做了许多技术、产品上的打磨,其中OSS的高效访问与处理是其中较为重要的一环。这个功能可以给用户在数据流转方面带来质的变化。缘起在传统的OLAP方案中,链路是比较长的,数据流转的代价较为高昂。而且往往常用的数据同步工具未必能够满足需求,复杂的分析在同步上会需要一些功能...
View ArticleTokuDB · 特性分析 · 导入数据大杀器:Loader
Loader简介Loader设计思路是把<pk_key,pk_value>二元组缓存在内存中,对每个索引在后台计算索引key。等所有的数据插入操作完成后,对每个索引进行排序,最后用排好序的索引key数组建立FT文件。创建FT的过程:依次创建每个叶子节点(leaf node)和中间节点(internal node)。最后维护元数据,这里包括index descriptor,block...
View ArticlePgSQL · 案例分享 · PostgreSQL 性能诊断指南
背景数据库的性能优化是一个非常经典的话题,数据库的优化手段以及优化的角度也各不相同。例如,可以从OS内核、网络、块设备、编译器、文件系统、SQL、数据库参数、业务逻辑、源码等各个方面去进行优化。但是如果在优化前了解瓶颈在什么地方,可以向打鼹鼠一样,先打大的,起到事半功倍的效果。本文将针对Linux平台下的PostgreSQL服务,讲解如何诊断PostgreSQL...
View ArticleMySQL · 捉虫动态 · 5.6中ORDER BY + LIMIT 错选执行计划
问题描述create table t1(id int auto_increment primary key, a int, b int, c int, v varchar(1000), key iabc(a,b,c), key ic(c)) engine = innodb; insert into t1 select null,null,null,null,null; insert into t1...
View ArticlePgSQL · 案例分享 · 递归收敛优化
背景有一个这样的场景,一张小表A,里面存储了一些ID,大约几百个。(比如说巡逻车辆ID,环卫车辆的ID,公交车,微公交的ID)。另外有一张日志表B,每条记录中的ID是来自前面那张小表的,但不是每个ID都出现在这张日志表中,比如说一天可能只有几十个ID会出现在这个日志表的当天的数据中。(比如车辆的行车轨迹数据,每秒上报轨迹,数据量就非常庞大)。那么我怎么快速的找出今天没有出现的ID呢。(哪些巡逻车辆没...
View Article