掌握 JuiceFS:数据存储的基本单元
传统文件系统只能使用本地磁盘存储数据和对应的元数据,JuiceFS 会将数据格式化以后存储在对象存储,同时会将文件的元数据存储在元数据引擎,具有很好的扩展性,可以轻松处理大量数据和高并发访问。本文学习JuiceFS 文件系统的架构和它的Chunk、Slice 和 Block。
传统文件系统只能使用本地磁盘存储数据和对应的元数据,JuiceFS 会将数据格式化以后存储在对象存储,同时会将文件的元数据存储在元数据引擎,具有很好的扩展性,可以轻松处理大量数据和高并发访问。本文学习JuiceFS 文件系统的架构和它的Chunk、Slice 和 Block。
刷力扣时,有这样一道题,要求设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构,实现这道题用到了Go 官方库提供的container/list
包中的List(双向链表)。
channel
的底层结构是一个复杂的并发数据结构,包含了缓冲区、等待队列、互斥锁等组件,用于实现goroutine
之间的安全通信和同步。
Go 语言中的 channel 底层是通过 hchan
结构体实现的,hchan
结构体的定义和相关操作都位于 runtime/chan.go
文件中,以下源代码基于 go1.23.3 版本,有删减。
Go 中的 map 是一种内置的数据结构,它实现了哈希表的特性,可以存储键值对。本篇文章学习map的底层结构和扩容机制。
map 的相关部分可以在源码下的 runtime/map.go
文件中查看,以下源代码基于 go1.23.3 版本,有删减。
在MySQL中,当数据量达到千万级时,B+树通常有3层。本文学习如何计算InnoDB中一棵B+树可以存放的数据数,以及如何根据数据量推算出对应的层数。
学习 LSM-tree(Log-Structured Merge Tree)数据结构的原理、特性以及在数据库中的应用。
时间轮(Timing Wheel)是一种高效的数据结构,用于管理定时任务或事件。在分布式任务调度系统等场景中经常可以看到时间轮的实现,以实现对大量定时任务的高效调度。
之前用Go实现延时队列,我使用了Go标准库中的container/heap
接口来构建一个优先队列。为什么Go的container/heap
接口可以实现一个优先队列呢?
这是因为Go的container/heap
定义了一套完整的方法,使得任何实现了这些方法的数据结构都能够作为堆来使用。优先队列是堆的一种应用,它允许快速访问最高(或最低)优先级的元素。