自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (3)
  • 收藏
  • 关注

原创 online schema change and create index

数据库online schema change

2022-08-05 17:05:42 430 1

原创 Log、Mini Transaction与ARIES Recovery

文章目录逻辑日志与物理日志redo log为什么使用物理日志?undo log为什么使用逻辑日志?Mini TransactionARIES Recovery术语ARIES主要思想Consistent Checkpoint 的RecoveryFuzzy Checkpoint的Recovery逻辑日志与物理日志redo log为什么使用物理日志?Logical log 只能作用于 Operation Consistency 的数据上。如果磁盘上的数据只反映了一些操作的部分更新,它就不是 Operat

2022-05-03 16:19:05 575

原创 OLAP数据库:hash、sort、shuffle、agg、join的实现原理

文章目录hash内存hashexternal hashsort内存sortexternal sortshufflehash shufflesort shuffleaggregatehash aggregatesort aggregate分布式aggregatejoinnested loop joinhash joinsort merge join分布式join总结hashhash算法是指对于key计算出hash值,基于hash值识别相同key,从而进行归类、聚合等操作。内存hash类似于JAVA H

2022-04-17 22:52:17 1456

原创 并发编程 - lost wakeup

Java中wait()方法为什么要放在同步块中?(lost wake-up 问题):https://www.cnblogs.com/sunweiye/p/11055550.htmllost wakeup问题sleep 和 wakeup使用于等待某事发生,用于阻塞和唤醒线程的情形中。所以sleep的使用逻辑是:检查状态,不符合则调用sleep阻塞当前线程;wakeup的使用逻辑是:改变状态,调用wakeup唤醒对应线程。lost wakeup问题:(1)线程1首先检查状态,发现不符合。(2)线程2改

2022-04-02 21:15:41 688 2

原创 Memory ordering - 内存屏障

CPU缓存会导致两个关于内存的并发问题:可见性有序性可见性描述的是多个线程的问题,一个线程修改变量之后,另一个线程却无法查看变量最新值的问题。有序性描述的是一个线程的问题,一个线程内的读写操作发送了重排序。但是这个现象一定是通过另外一个线程观察到的,因为对于同一个线程具有as-if-serial的性质。有序性问题可分为两大类:编译重排序和CPU指令并行执行重排序:指令的执行顺序在物理时间上发生了真正意义上的的重排序,即代码上位于后面的指令,却先执行了。CPU读写缓冲区重排序:指令的执行顺

2022-03-06 21:35:43 371

转载 Raft协议的优化

https://blog.csdn.net/weixin_43705457/article/details/115014226https://blog.csdn.net/qq_35423190/article/details/108982230

2022-02-26 12:25:00 115

原创 对于JAVA GC的理解

GC root所谓“GC roots”,或者说tracing GC的“根集合”,就是一组必须活跃的引用。注意,是一组必须活跃的引用,不是对象。而且对于年轻代GC,GC ROOT必须是年轻代对象的引用。对于老年代GC, GC ROOT必须是老年代对象的引用。GC root枚举以young gc为例(old gc同理):在进行gc trace之前,必须对gc root进行枚举,保证年轻代里所有存活的对象都能被标记到。JVM使用OoMap记录了负责记录堆外对堆内的引用,遍历OoMap,将其中属

2022-02-21 13:20:31 277

原创 分布式/并行SQL的执行调度

SQL语句的转换过程SQL语句 -》 抽象语法树 -》 逻辑算子树 -》 物理算子树(物理执行计划)物理执行计划的stage划分为什么要进行stage划分?对于分布式/并行SQL的执行,会将物理执行计划划分为若干stage,一个stage会使用多个线程/计算节点并行的执行计算Task,每个计算任务的执行逻辑是相同的,但是基于不同的数据split。多个计算任务能够并行执行,必须要保证其之间是没有依赖的,即每个计算任务完全基于自己的数据split即可完成计算。我们知道stage的划分是按照数据是否需要

2022-02-19 16:24:02 886

原创 数据库隔离级别 - SI和SSI

Snapshot IsolationSnapshot Isolation要求:当一个事务 T1 准备提交时获取一个 Commit-timestamp(commit_ts),大于所有已存在的 Commit-timemstap 和 Start-timestamp(start_ts)。First-committer-wins。一个事务T1能够提交成功当且仅当在[T1.start_ts, T2.commit_ts] 范围内不存在另一个事务T2,T2 和T1 修改了同一行,T1.start_ts < T

2022-02-15 10:42:29 1543

转载 深度比较Paxos和Raft

https://blog.csdn.net/zxpoiu/article/details/115524567

2022-02-09 17:39:05 130

原创 LSM Compaction(STCS和Leveled)

参考:https://blog.csdn.net/zxpoiu/article/details/116190330https://kernelmaker.github.io/Btree_LSM_FTIhttps://zhuanlan.zhihu.com/p/141186118基础概念读放大(read amplification):一次读取操作需要访问磁盘的次数,主要由compaction策略引入。可以引入cache和bloom filter优化。写放大(write amplificati

2022-01-30 16:40:22 1332

原创 Raft协议论文及工程实现总结

文章目录Raft领导选举Timeout启动之后候选者行为跟随者行为领导选举结果领导选举限制日志复制(心跳)概述日志复制的特性领导者行为跟随者行为集群成员变化集群成员变化的问题解决方法:两阶段方法、共同一致共同一致解决方法的分析:本项目优化解决方法集群成员变更之后带来的问题:日志压缩(快照)生成快照安装快照线性一致性raft违反线性一致性保证raft的线性一致性github实现RaftRaft 通过选举一个高贵的领导人,然后给予他全部的管理复制日志的责任来实现一致性。领导人从客户端接收日志条目,把日志条目

2022-01-20 16:07:27 660

原创 阿里巴巴2021第二届云原生编程挑战赛总结

针对冷热读写场景的RocketMQ存储系统设计https://tianchi.aliyun.com/competition/entrance/531922/introduction?spm=5176.12281968.1008.4.65812448foYVfh简单描述实现功能点实现了一个单机的消息队列存储引擎,实现了顺序写入和随机读取的基本功能,并保证机器断电数据不丢失的持久化特性。设计底层数据文件的存储结构,并基于topic和queueId实现文件分区。设置内存写缓冲区,实现多客户端写入

2022-01-20 12:11:08 643

原创 数据库存储过程

什么是存储过程存储过程是一些sql语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用。它的参数可以被传递和返回,与应用程序中的函数过程类似,存储过程可以通过名字来调用,具有输入参数和输出参数。存储过程的优缺点优点(1)执行速度快——存储过程只在创建时进行编译,以后每次执行存储过程都不需要重新编译,而一般SQL语句没执行一次就需编译一次,所以使用存储过程可提高数据库的执行速度。(2)减少网络通信量——当对数据库进行复杂

2021-12-17 21:48:31 7853

原创 磁盘IO总结:顺序读写、随机读写、4K对齐

对于不同类型的磁盘,顺序读写均优于随机读写,且4K对齐读写效率更高。但是其中的原因却不尽相同。机械硬盘IO方式 :顺序读写 > 随机读写机械硬盘寻道时间无法忽略,顺序读写减少了磁盘寻道的时间。顺序读写在操作系统页缓存的作用(预读和回写)下,也会有更高的读写效率。IO单位 :64KB >= 4KB > 1KBIO单位越大,读写相同的数据,系统调用的次数就越少。读操作:在机械硬盘的时代,在读取数据少的时候,很可能寻道时间远超过传输时间,那么基本上就是读取次数固定,比如硬盘如果io

2021-11-25 00:34:42 8041

原创 C++解释器、模板解释器和JIT的一些认识

解释执行:包括C++解释器和模板解释器。解释执行并不是每次执行字节码时动态把它编译成机器码,而是将根据字节码的类型,转到对应的机器码去执行,即一个派发(switch)的过程。而C++解释器派发到的是由字节码对应的C++代码所编译成的机器码,模板解释器派发到的是字节码对应的汇编模板所生成的机器码。由于C++代码由编译器编译成机器码,比较冗余,所以执行速度慢,而模板解释器的汇编模板是直接由汇编代码专门编写的,执行效率高。所以解释执行执行速度较慢,并不是每次将字节码动态编码生成机器码的原因,这是错误的。而是对..

2021-11-24 17:01:27 1161

转载 磁盘IO对齐

https://blog.csdn.net/FL63Zv9Zou86950w/article/details/116279367

2021-11-02 17:37:56 138

转载 CPU 寄存器

https://segmentfault.com/a/1190000037478310https://zhuanlan.zhihu.com/p/272135463

2021-11-02 11:08:09 67

原创 Java 文件操作

Java 文件 IO 操作之 DirectIO文件 IO 操作的一些最佳实践PolarDB 数据库性能大赛 Java 选手分享

2021-09-14 14:30:45 71

原创 SimpleDateFormat和Table(HBase)的并发问题

背景最近项目里出现了两个bug,找了很久,最后发现都是因为多线程并发导致的问题,所以在此记录。项目主要是做时空数据库,点线面等时空数据的查询。问题描述:对于点数据,我们在导入HBase时,会对其进行进行时空编码(time + Zorder)作为Rowkey,但是在利用时空索引进行时空查询时,竟然出现了不在时间范围内的点数据。在对HBase进行scan查询时,由于时空范围的分解会生成多个scan range,所以利用线程池提交多个查询任务进行并发查询,但是最后查询的会漏查一些数据。解决对于第

2021-05-31 16:49:44 158

原创 Spark 类加载器导致的Kryo序列化问题

文章目录背景Spark类加载器MutableURLClassLoader和ChildFirstURLClassLoaderMutableURLClassLoaderChildFirstURLClassLoader问题分析验证背景最近项目中设计到Spark BulkLoad Hbase,需要将一个自定义类的对象序列化成字节数组,存到Hbase中。考虑到Spark自带了java通用的Kryo序列化框架,所以参考网上的代码用Kryo实现了一个通用的序列化方法 public class KryoUtils {

2021-05-25 17:12:42 1253 5

原创 进程/线程上下文切换

Linux内核进程上下文切换深入理解操作系统(四) – 用户级线程与核心级线程(线程的切换)

2021-05-06 09:59:41 73

原创 为什么CPU执行虚函数耗时?

预备知识计算机组成原理16----CPU结构和指令周期计算机组成原理17----CPU指令流水线分支预测原因参考:C+±虚函数效率低 虚函数效率低 虚函数为什么执行效率低?c++ 虚函数机制 效率问题为什么 C++ 中使用虚函数时会影响效率?虚函数的编译过程:编译器发现一个类中有虚函数,编译器会立即为此类生成虚拟函数表 vtable(后面有对vtable的分析)。虚拟函数表的各表项为指向对应虚拟函数的指针。编译器在此类中隐含插入一个指针vptr(对vc编译器来说,它插在类的第一个位置

2021-04-19 17:50:00 394

原创 Spark 3.0 AQE(Adaptive Query Execution)

Spark Adaptive Execution数据倾斜?Spark 3.0 AQE专治各种不服

2021-04-19 15:12:50 143

原创 Apache Sedona(GeoSpark) spatial join 源码解析

文章目录Apache Sedona(GeoSpark) Spatial JoinRange joinDistance join源码解析SedonSQLRegistrator.registerAll(sparkSession)JoinQueryDetectorplanSpatialJoinplanDistanceJoinTraitJoinQueryExecdoExecute1. 构造SpatialRDD2. doSpatialPartitioning3. spatialJoin4. extraConditio

2021-04-06 17:13:32 1238

原创 分布式事务外部一致性、隔离性和时间戳的理解

外部一致性之前一直不懂分布式事务中时间戳的作用,经过查找阅读资料之后,有了一点理解,在此记录。分布式事务中的时间戳的主要作用是保证分布式事务的“外部一致性”。外部一致性的理解可以参考:https://tyler-zx.blog.csdn.net/article/details/108915068对于一致性的理解有很多解释,在这里阐述一下我的理解:传统ACID的一致性:数据库从一个一致性的状态转移到另一个一致性的状态。这里的一致性表达的是数据库处于一种符合数据库约束,也符合用户预期的一种状态,其

2021-04-01 17:28:29 1169

原创 XZ-ordering:A Space-Filling Curve for Objects with Spatial Extension

Z-orderZ-Ordering in Point DatabasesZ曲线定义将数据空间分割成四个sub-quadrants。这将递归地重复,直到达到某个基本分辨率为止。固定的递归迭代次数称为分辨率g。然后我们停止并使用得到的g位序列(称为象限序列)作为点的排序键(按字典顺序排序)。本文中每个代表数据空间中的一个区域的象限序列被称为元素(element)。Z曲线查询假设一个具有指定窗口的窗口查询。数据空间被分解为四个象限。测试每个象限与查询窗口的交集。如果象限不与查询窗口相交,则不需要做

2021-03-24 16:57:28 1153

原创 SQL查询计划(Query Plan)处理模型(processing model)

https://www.iteblog.com/archives/9806.html

2021-03-23 21:40:29 1349

原创 《SparkSQL内核剖析》阅读笔记

SparkSQL 简介Spark SQL执行过程SparkSQL 内部体系结构SparkSQL 编译器 ParserSparkSQL 逻辑计划 LogicalPlanSparkSQL 物理计划 PhysicalPlanSparkSQL Tungsten 技术实现SparkSQL Aggregation实现SparkSQL Join 实现

2021-03-15 17:27:29 341

原创 因果一致性在分布式系统(微信朋友圈)中的应用的理解

https://www.cnblogs.com/king0101/p/11908305.html上文中所描述的微信朋友圈评论同步问题,可看作多主复制数据库中的因果一致性问题。对于数据库中的某一条朋友圈(由唯一key标识),其value对应多条评论。朋友圈由多主复制数据库进行存储,四个数据中心中均存在朋友圈的主库,均提供写入功能。问题:假设用户A在数据中心1进行对朋友圈进行评论a,数据中心1将此条评论异步复制到数据中心2和数据中心3。当数据中心2接收到此评论后,用户B查看到评论a进行回复评论b...

2021-03-05 17:39:48 1088

原创 《MySQL技术内幕:InnoDB存储引擎》读后问题总结

文章目录MySQL Innodb特性插入缓冲的使用条件中为什么辅助索引不能是唯一的?为什么需要两次写?Binlog 和 RedologBinlog为什么不能用来做crash-safe?Binlog和redolog的区别Binlog和redolog的写入一致性问题Binlog和redolog的两阶段写入中为什么要在prepare阶段就落盘呢?为什么Mysql默认隔离级别是RR?和binlog的格式有什么关系?数据和索引数据页中的Page Directory的作用?为什么说外键不加索引会导致死锁mysql主键为

2021-03-03 21:49:10 254 1

原创 scala版本不一致:java.lang.NoSuchMethodError: org.apache.spark.sql.execution.datasources.FileFormat.$init$

这是最近将代码放到服务器环境上运行时出现的错误。java.lang.NoSuchMethodError除了可能真的是找不到对应方法,也有可能是语言、框架版本不一致所导致的问题。我的问题在于本地环境scala使用的是2.12.10,但是服务器上的spark是2.11_2.4.4版本,所以在本地将scala换成2.11.8版本,重新编译即可。...

2021-02-26 17:48:06 1707 1

转载 阿里云PolarDB及其共享存储PolarFS技术实现分析

阿里云PolarDB及其共享存储PolarFS技术实现分析(上)阿里云PolarDB及其共享存储PolarFS技术实现分析(下)

2021-02-22 17:52:10 262

原创 Paxos协议理解

Paxos协议要点Paxos协议中共有三种角色:Proposer、Acceptor、Learner,具体实现中一个进程可担当多个角色。Paxos协议的目的:针对同一主题,每个Proposer都可提出若干提案,所有的Acceptor和Learner必须从这些提案中一致的选定某个提案。某个提案被选定成功的定义:此提案被超过半数Acceptor 批准。Paxos的第一个Prepare阶段的目的是确定Proposer如何生成提案。这实际上涉及到Paxos协议的推导,可参考《从Paxos到Zo

2021-02-20 22:54:03 346

转载 HDFS 异常处理与恢复

https://www.cnblogs.com/mindwind/p/4833098.html

2021-02-20 13:31:10 399 1

转载 linux文件IO (MMAP和DIRECT IO区别)

转载 http://blog.chinaunix.net/uid-27105712-id-3270102.html

2021-02-11 15:24:33 313

转载 由数据范围反推算法复杂度以及算法内容

转自https://www.acwing.com/blog/content/32/

2021-02-08 15:12:06 70

原创 Spark DataSource 源码解析

文章目录SparkSession.read()DataFrameReaderformatschemaoptionjson、csv、text...loadDataSource.lookupDataSourceDataFrameReader.loadV1SourceDataSource.resolveRelationSparkSession.baseRelationToDataFrame数据源有关的StrategyFileSourceStrategyFileSourceScanExecDataSourceStr

2021-01-08 15:19:59 820

原创 Spark与MapReduce的对比误区与真正优势

Spark与MapReduce对比误区经常听到有人说Spark基于内存计算,将中间结果保存在内存中,避免了磁盘IO的次数。我觉得这句话的表面意思都对,但是很多人并没有了解其真正的含义。知乎: https://www.zhihu.com/question/319306621.Spark是基于内存计算的,难道MapReduce不是基于内存计算的吗?什么是内存计算,如果是指把磁盘中的数据读取到内存中做计算的话,那么MapReduce肯定也是内存计算。Spark的特殊之处在于可以将RDD缓存到内存之中,下次

2021-01-06 14:02:14 940 2

原创 数据库并发写入问题-丢失更新与写入偏差

MVCChttps://blog.csdn.net/qq_41775852/article/details/104853909数据库中的MVCC多版本并发控制(快照隔离)可以避免事务并发时的脏读、不可重复读以及幻读的问题,但是却无法避免丢失更新以及写入偏差的问题。丢失更新和写入偏差丢失更新:两个事务并发读取同一记录,并在此基础上修改记录,并将其写回数据库,第二次写入的结果会覆盖第一次写入的结果,导致数据库状态不一致。(丢失更新不仅出现在数据库中,在应用程序多线程并发修改变量、分布式系统多主复制和

2020-12-29 15:48:57 2028 1

Cygwin64 Terminal

Cygwin,用于在windows环境下模拟Linux操作环境,可用于hadoop window环境下配置。

2019-04-26

计算机网络ppt

武汉大学计算机学院计算机网络课程ppt

2019-03-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除