缓存,消息队列,分库分表是高并发解决方案三剑客。缓存之所以能够让系统“更快”,本质上做到了如下两点:减小CPU消耗将原来需要实时计算的内容提前算好、把一些公用的数据进行复用,这可以减少CPU消耗,从而提升响应性能。减小IO消耗将原来对网络、磁盘等较慢介质的读写访问变为对内存等较快介质的访问,从而提升响应性能。对于应用系统来讲,我们经常将缓存划分为本地缓存和分布式缓存。本地缓存:应用中的缓存组件,缓存组...
布隆过滤器是一个精巧而且经典的数据结构。你可能没想到:RocketMQ、Hbase、Cassandra、LevelDB、RocksDB这些知名项目中都有布隆过滤器的身影。对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。来吧,我们一起品味布隆过滤器的设计之美。1缓存穿透我们先来看一个商品服务查询详情的接口:publicProductqueryProductById(Longid){查询缓存ProductproductqueryFromCache(id);if(product!null){returnproduct;}从数据库...
RocketMQ是大家耳熟能详的消息队列,开源项目rocketmqspring可以帮助开发者在SpringBoot项目中快速整合RocketMQ。这篇文章会介绍SpringBoot项目使用rocketmqspringSDK实现消息收发的操作流程,同时笔者会从开发者的角度解读SDK的设计逻辑。1SDK简介项目地址:https:github.comapacherocketmqspringrocketmqspring的本质是一个SpringBootstarter。SpringBoot基于“约定大于配置”(Conventionoverconfiguration)这一理...
「重启程序」对我来讲,太熟悉了,我很纠结,因为它能帮我解决问题,但出于程序员对于程序健壮的强迫症,我又本能的抗拒。编程十年,慢慢的,我才发现:「重启程序」表面看是一个技术问题,但本质上是一个管理问题。1一路重启20102014年,我经历了一家彩票网站重构的整个过程,工作上我全情投入,学习技术如饥似渴,遇到了极多稀奇古怪的问题,取得了很大的进步。可是,公司的大小事故不断,研发人员经常使用重启来解决问题。第...
谈到分库分表中间件时,我们自然而然的会想到ShardingSphereJDBC。这篇文章,我们聊聊ShardingSphereJDBC相关知识点,并实战演示一番。1ShardingSphere生态ApacheShardingSphere是一款分布式的数据库生态系统,它包含两大产品:ShardingSphereProxyShardingSphereJDBC▍一、ShardingSphereProxyShardingSphereProxy被定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。代理层介...
背景在并发编程时,对于互斥区我们一般通过锁来保护。在Greenplum中也是如此,所以大家在源码中可以看到相应的锁操作,比如我们已经熟悉的spinlock,lwlock等等。但是在有些场景中,互斥区非常小(比如只访问一个变量的场景),为了提升性能,更希望使用无锁方式来进行操作,因此希望对应的操作可以原子化。针对这类场景,在大部分编程语言中都内置了相应的基础库,比如C++中的std::atomic,Java中的java.util.concurrent.atomic...
2022-08-03 17:46:38 1214浏览 0点赞 0回复 0收藏
优化器是数据库的关键组件,GPORCA是Greenplum中的强大的模块化查询优化器,帮助用户对SQL进行优化,生成高效的查询计划,提高查询效率。GPORCA优化器架构是基于Cascades模型,本文将对GPORCA优化器的Transform流程进行详细介绍。优化器简介SQL是一种描述性语言。对于一个复制的SQL语句,可能生成几十上百个等价的执行计划。实际上,选择最优执行计划的问题,已经被证明是一个NPHARD问题。因此,人为的把SQL推导成执行计划,并...
2022-08-03 17:46:17 2719浏览 0点赞 0回复 0收藏
位图(bitmap)索引是Greenplum中所特有(对比PostgreSQL)的一种索引类型,非常适用于大数据量且数据修改需求不大的数据分析场景(OLAP)中使用。Bitmap索引可以保证在提供优良查询速度的前提下,使用更小的空间开销,能够有效节省大数据量环境的硬盘空间使用,从而降低系统运行成本。1什么是BitmapIndexBitmapIndex非常类似于RevertedIndex(转置索引,或倒排索引),是一种反向索引,使用位图(bitmap)结构来记录某个唯一Key...
2022-08-03 17:45:54 3454浏览 0点赞 0回复 0收藏
续:深入浅出GreenplumBitmapIndex(上篇)3.1IndexScan首先来看下IndexScan的执行流程以及大致的函数调用栈,如下图所示:整体可以分为4大部分:最外层自然是AM,即AccessMethod部分,是PostgreSQL对数据访问方式的一种抽象,我们可以简单地理解为一种多态。BitmapIndex使用bmgettuple()每次向上层调用返回一个tuple,在第一次调用时将调用bitmapfirst()完成初始化工作,而后不断调用bitmapnext()返回结果;第二部分则是为索引扫...
2022-08-03 17:44:33 2287浏览 0点赞 0回复 0收藏
gprestore是专门用来做gpdb数据恢复的并行恢复工具,配合gpbackup使用,编译安装方式与gpbackup一样,无论是官方下载的软件包还是自行编译的软件包,均会有gprestore这个命令。下面我们仍然采用与中篇一样的套路来进行演示,首先把gprestore的详细命令给大家贴一下,然后通过实验的方式做几个具体场景的解释。在本文的最后,对整个工具进行一个总结,希望对大家日后使用有所帮助。1gprestore备份参数详解如果要使用gprestore进...
2022-08-03 17:44:03 1844浏览 0点赞 0回复 0收藏