MySQL 海量数据导入优化:先导数据还是先建索引?
MySQL中,一种情况是新建一个表结构,先创建索引,再导入100w条数据,另一种情况是先导入100w条数据,再创建索引,哪种情况的效率高呢?答案是第2种,先导入100w条数据再创建索引的效率更高。具体原因隐藏在B+树的分裂机制、磁盘I/O模式以及排序算法的底层逻辑中。
MySQL中,一种情况是新建一个表结构,先创建索引,再导入100w条数据,另一种情况是先导入100w条数据,再创建索引,哪种情况的效率高呢?答案是第2种,先导入100w条数据再创建索引的效率更高。具体原因隐藏在B+树的分裂机制、磁盘I/O模式以及排序算法的底层逻辑中。
传统文件系统只能使用本地磁盘存储数据和对应的元数据,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)是一种高效的数据结构,用于管理定时任务或事件。在分布式任务调度系统等场景中经常可以看到时间轮的实现,以实现对大量定时任务的高效调度。