- 博客(9)
- 收藏
- 关注
原创 拼多多集团-PDD|2026届校招正式批启动啦!
Web前端研发工程师内推链接:https://careers.pddglobalhr.com/campus/grad/detail?服务端研发工程师内推链接:https://careers.pddglobalhr.com/campus/grad/detail?客户端研发工程师内推链接:https://careers.pddglobalhr.com/campus/grad/detail?算法工程师内推链接:https://careers.pddglobalhr.com/campus/grad/detail?
2025-09-16 21:27:52
753
原创 Redis集群源码 | 02 故障转移 failover
我们知道redis集群中为了保证高可用性,数据是多副本存储的,每一份数据都会存储在一个主节点以及一个或多个从节点上,只有主节点负责读写(在不开启slave read的情况下),而从节点异步复制主节点的数据,提供数据冗余。如果主节点宕机,那么将导致服务不可用,因此redis提供了一套集群中自动故障转移的机制,用于检测主节点的宕机、并进行自动的主从切换,从而让从节点顶替为新的主节点,继续提供服务。简单来说,故障转移机制包括四个步骤,故障发现、故障确认、主从切换、配置消息更新。
2025-06-02 17:49:42
1123
原创 LevelDB源码解析 | 05 版本管理 Version
为什么需要版本控制?LevelDB会面临读写并发的问题,当读和写同时进行时,如果并发处理不善,可能会导致读到修改到一半的数据(不正确的数据),解决这个问题的可能方式有:1)悲观锁。读数据的时候不可写、写的时候不可读。这种方法的缺点在于效率低2)乐观锁。先假设事务之间不会产生冲突,各自处理,事务提交时检查是否发生冲突,如果冲突则回滚并重试。这种方法适合读多写少的情况,如果冲突较多,回滚和重试会影响性能3)多版本并发控制(MVCC)。维护多个数据版本,并且只有一个当前版本。
2025-03-18 16:24:13
792
原创 LevelDB源码解析 | 04.3 SST之布隆过滤器
在前面关于SST文件的章节中,我们提到SST文件中包含index block和data block,在查询数据中先利用index block定位到相应的data block,然后再到data block中去查询数据。但是如果该key在该data block中并不存在,此番查询便是浪费功夫。那有没有更快速地直接判断一个key在一个集合中是否存在、而无需遍历查询的方式呢?答案之一就是布隆过滤器。
2025-03-15 19:22:29
1976
原创 LevelDB源码解析 | 04.2 SST之Minor Compaction
我们知道LevelDB有一个compaction机制,而compaction其实分为两个步骤:第一步是,它指的是将内存中只读的immutable memtable写入磁盘形成SST文件(一般是写入L0层);然后由于LSM Tree结构保留了每一条写请求,因此如果针对一个key有多次重复更新,其实是作为多条记录保存下来的。这样会导致两个问题:(1)空间放大:一个键值对的所有历史版本作为多条记录存储下来,占用磁盘空间。
2025-03-14 16:02:38
844
原创 LevelDB源码解析 | 04.1 SSTable格式
data block里的每条记录是数据库的键值对,而index block里每条记录的键是相邻data block的分割key,而值是data block的handle。data block的长度不是固定的,每当一个data block大小超过4KB就会刷盘并且开启一个新的data block。的,在读取时可以根据footer找到metaindex block的始末位置以及index block的始末位置,然后又可以根据index block找到key所在的data block的位置。
2025-03-14 13:51:50
893
原创 LevelDB源码解析 | 03 MemTable & SkipList
MemTable是LevelDB在内存中维护的按key有序的数据结构,LevelDB中采用跳表实现。一个DBImpl对象中包含两个MemTable对象,一个是memtable、另一个是immutable memtable,二者的区别在于memtable可读可写,而immutable memtable只可读不可写。一个memtable写满后会变为immutable memtable,等待落盘成SST文件。同时创建一个新的memtable,承接后续的写入。memtable在整个读写流程中至关重要,
2025-03-13 13:40:36
923
原创 LevelDB源码解析 | 02 WriteBatch & 合并写入机制
的机制,也就是由一个线程将其他多个线程的写请求合并到一起,并且代替它们完成写入。第二步:将Writer队列中的所有Writer的写入内容合并,形成合并好的WriteBatch,即DBImpl::BuildBatchGroup。的地址,由于Writer队列里的元素类型是Writer*,所以为了指向Writer*,需要传一个二级指针。获得锁的顺序受操作系统的调度,因此可能出现后到达的请求先抢到锁,导致数据写入顺序错误;如果线程醒来后发现自己的写任务还没完成,说明自己是新队头,就继续执行写入。
2025-03-12 15:03:45
2287
原创 LevelDB源码解析 | 01 总体架构
什么是leveldb?什么是leveldb?LevelDB 是一个由 Google 开发的高性能的嵌入式键值存储数据库,与传统的关系型数据库不同,LevelDB 是一个 NoSQL 类型的数据库,它采用了 键值对(Key-Value)的数据模型,因此可以高效地存储和检索大量数据。:LevelDB 是一个嵌入式数据库,意味着它并不作为独立的服务运行,而是直接嵌入到应用程序中,通常用于本地存储数据。:LevelDB 支持高吞吐量的读写操作,尤其在写入时表现优秀。
2025-03-12 10:58:34
2171
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅