自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 K8s CSI(Container Storage Interface)

该接口旨在建立标准化机制,这样SP只需要各自维护其符合CSI规范的out-of-tree的CSI Volume Driver,并由各CO来维护各自的in-tree的CSI Volume Plugin,就可以在各种CO中使用其存储系统。由于,Kubernetes所有的Volume Plugin是in-tree的,意味着存储供应商(Storage Provider,SP)向Kubernetes添加新的存储系统需要实现新的Volume Plugin,并将代码检入核心Kubernetes代码仓库中。

2023-04-30 22:06:22 349

原创 TiDB 源码阅读 物理优化

TiDB 源码阅读 物理优化physicalOptimizepreparePossiblePropertiesPreparePossibleProperties*DataSource.PreparePossibleProperties*LogicalAggregation.PreparePossiblePropertiesphysicalOptimizefunc physicalOptimize(logic LogicalPlan, planCounter *PlanCounterTp) (Physi

2023-04-17 14:26:41 178

原创 TiDB 源码阅读 逻辑优化

TiDB 源码阅读 逻辑优化一级目录二级目录三级目录一级目录二级目录三级目录

2023-04-17 14:26:16 156

原创 TiDB 源码阅读 Compile

TiDB 源码阅读 CompileCompileInsertStmtTable *TableRefsClauseTableRefs *JoinLeft, Right ResultSetNodeTableSourceTableNameTp JoinTypeOn *OnConditionUsing []*ColumnNameColumns []*ColumnNameLists [][]ExprNodeSetlist []*AssignmentPriority mys

2023-04-17 14:25:59 114

原创 TiDB 分布式事务

TiDB 分布式事务PercolatorPrewriteCommitGetClean UpTiDB事务隔离级别EncodingKVMVCCCF[MVCC 数据读取](https://pingcap.com/zh/blog/tikv-source-code-reading-13)Latch乐观事务整体流程PrewriteCommitRollbackClean Up缺点重试机制Async Commit & Single Region 1PC悲观事务初步想法整体流程悲观锁遇到更新的数据遇到其他事务的锁Co

2021-12-21 19:43:05 1368

原创 事物概览

数据库事物概览ACID隔离级别与异常现象Dirty WriteDirty ReadRepeatable ReadPhantom Read业务程序员的错误Read SkewLost UpdateWrite Skew避免 Lost Update & Write Skew参考ACID原子性:当客户想进行多次写入,但在一些写操作处理完之后出现故障的情况。例如进程崩溃,网络连接中断,磁盘变满或者某种完整性约束被违反。如果这些写操作被分组到一个原子事务中,并且该事务由于错误而不能完成(提交),则该事务将被中

2021-12-08 21:09:18 618

原创 raft 线性一致性

raft 线性一致性什么是线性一致性什么时候回复 client什么时候是 leaderleader readlog readread indexlease readfollower read参考什么是线性一致性对于同一个对象 x,其初始值为 1,客户端 ABCD 并发地进行了请求,按照真实时间(real-time)顺序,各个事件的发生顺序如上图所示。对于任意一次请求都需要一段时间才能完成,例如 A,“x R() A” 到 “x Ok(1) A” 之间的那条线段就代表那次请求花费的时间。四个次请求中只

2021-12-08 02:56:46 666

原创 leveldb version

leveldb 版本控制版本控制版本控制LevelDB如何能够知道每一层有哪些SST文件;如何快速的定位某条数据所在的SST文件;重启后又是如何恢复到之前的状态的,等等这些关键的问题都需要依赖元信息管理模块。compaction 简言之,是一个新增与删除文件的过程。对于上一篇 minor compaction,是新增一个文件。对于 major compaction,则是归并 N 个文件到 M 个新文件,这 N+M 个历史文件与新文件,共同存储在磁盘上。因此需要一个文件管理系统,能够识别出哪些是当前的

2021-11-29 22:05:01 260

原创 leveldb cache

leveldb cacheCacheShardedLRUCacheCacheleveldb 以虚函数的形式定义了 cahce 所应该具有的功能,具体 cache 策略的实现应该继承 Cache 类并实现其虚函数。namespace leveldb {class LEVELDB_EXPORT Cache { public: Cache() = default; Cache(const Cache&) = delete; Cache& operator=(const Ca

2021-11-25 23:36:23 263

原创 go interface

这里写目录标题函数调用值接收值调用指针调用指针接收值调用指针调用实现接口值实现接口指针实现接口接口赋值值或指针 => 接口接口 => 接口接口 => 值或指针函数调用值接收package mainimport "fmt"type Person struct { age int}func (p Person) howOld() { fmt.Println(p.age)}func (p Person) growUp() { p.age += 1}值调用

2021-09-07 00:10:37 78

原创 muduo TcpServer 和 TcpClient

muduo TcpServer 和 TcpClientAcceptorTcpServer接受新连接TcpConnection可读事件关闭连接AcceptorAcceptor 用于 accept 新的 TCP 连接,并通过 NewConnectionCallback 回调通知调用者。它是内部 class 供 TcpServer 使用,声明周期由后者控制class Acceptor : noncopyable{ public: typedef std::function<void (int

2021-09-03 15:47:11 485

原创 muduo EventLoop

muduo EventLooploopwakeup调配任务timerclass EventLoop : noncopyable{ public: typedef std::function<void()> Functor; EventLoop(); ~EventLoop(); // force out-line dtor, for std::unique_ptr members. /// /// Loops forever. /// /// Must be

2021-08-30 22:19:55 177

原创 muduo Poller 和 Channel

muduo Poller和ChannelPollerPollPollerupdateChannelPollPollPollerPollerPoller class 是 IO multiplexing(多路复用)的封装,是一个纯虚类。////// Base class for IO Multiplexing////// This class doesn't own the Channel objects.class Poller : noncopyable{ public: typede

2021-08-28 23:57:10 176

原创 muduo 使用网络库和 Protobuf 来构建 RPC 框架

moduo 使用网络库和Protobuf来构建RPC框架pb generated sourcessudoku.protosudoku.proto.hSudokuServicemethoddescriptorServiceDescriptorMethodDescriptorDescriptor通过阅读moduo中rpc的示例程序来分析,如何利用一个网络库和Protobuf来构建一个RPC框架pb generated sources分析pb生成了哪些源码,思考需要用网络库去实现哪部分来实现通信sudok

2021-08-23 23:01:42 813

原创 leveldb 读写流程

这里写目录标题APIWritePut & DeleteAPI// A DB is a persistent ordered map from keys to values.// A DB is safe for concurrent access from multiple threads without// any external synchronization.class LEVELDB_EXPORT DB { public: // Open the database with

2021-06-09 16:38:53 720

原创 leveldb skiplist & MemTable

leveldb skiplistleveldb对skiplist的需求skiplist 的定义Node & NewNodeInsert & containsInsertFindGreaterOrEqualcontains内存序Iterator参考skiplist的基本原理不介绍了,本文是有关leveldb中skiplist的实现leveldb对skiplist的需求无锁并发读外部加锁的非并发insert,且insert的key不能相同不提供del,因为如果leveldb想要del

2021-06-03 16:40:31 244

原创 leveldb compaction

leveldb compactionCompaction的作用数据持久化 minor compaction提高读效率 major compaction之seek compaction降低compaction的IO开销 major compaction之size compaction整理数据入口minor compaction在MakeRoomForWrite()中触发暂停或延缓写入过程WriteLevel0TablePickLevelForMemTableOutputVersionSet::Finalize

2021-06-01 21:04:13 441

原创 leveldb sstable 读取和使用

openStatus Table::Open(const Options& options, RandomAccessFile* file, uint64_t size, Table** table) { *table = nullptr; // 先把尾部定长的footer读出来 char footer_space[Footer::kEncodedLength]; Slice footer_input; Status s = file

2021-04-25 23:35:09 419 1

原创 leveldb env

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-04-06 23:04:26 293

空空如也

空空如也

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

TA关注的人

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