- 博客(239)
- 收藏
- 关注
原创 新时代异步 IO 框架:IO_URING 的原理、用法、业界示例分析
I/O 模型同步 I/O 是目前应用最广的 I/O 模型,其缺点非常明显:大量内存拷贝、系统调用导致上下文切换频繁;随着设备性能越来越高,这种方式已经无法有效利用设备的全部性能。AIO 的优点就是通过异步方式和 Linux Kernel 交互,减少了对用户态应用程序的阻塞,提高了并发度,但其最大的缺点就是仅支持 Direct I/O,无法有效利用文件系统和 Page Cache。
2024-02-16 09:00:00 2607
原创 单机存储的容错机制:一文搞懂所有 RAID 级别的原理、性能、应用场景
RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,是一种数据存储虚拟化技术,通过将多个物理磁盘驱动器组件组合到一个或多个逻辑单元中,以达到获取大容量、高性能、容错等目的。
2024-02-13 09:30:00 2410
原创 高级数据结构与算法 | 布谷鸟过滤器(Cuckoo Filter):原理、实现、LSM Tree 优化
布谷鸟过滤器(Cuckoo Filter)是一种节省内存空间的概率数据结构,基于布谷鸟哈希算法实现的过滤器,和布隆过滤器一样,用于检测指定元素是否存在于某个集合中
2024-02-08 22:28:19 3981
原创 什么是 Docker?它能用来做什么?
Docker 是一个能够把开发的应用程序自动部署到容器的开源引擎。由 Docker 公司(前 dotCloud)的团队编写,基于 Apache 2.0 开源授权协议发行
2023-05-02 10:00:00 1758
原创 高级数据结构与算法 | 自适应基数树(Adaptive Radix Tree)
Adaptive Radix Tree(ART)是由 Phil Bagwell 在 2000 年提出的一种基于 Trie Tree 实现的数据结构,旨在解决 Trie Tree 在空间效率和查找性能方面存在的问题。与其他基于 Trie 的数据结构(如 Radix Tree、Digital Search Tree)相比,其引入了自适应节点,高度压缩等特性,具有更好的空间效率和更快的查找速度。
2023-04-16 14:00:00 2732 1
原创 高级数据结构与算法 | 基数树(Radix Tree)
Radix Tree是一种基于 Trie(字典树)的数据结构,旨在解决字符串搜索和匹配的问题。它最早由 Fredkin 在 1960 年提出,并在之后被广泛应用于各种应用领域。其最大的特点就是在 Trie 的基础上,加入了路径压缩的逻辑,通*合并前缀的方式大大的减少了 Trie 中的节点冗余问题,不仅提高了查询效率,还减少了存储空间的使用。
2023-04-14 10:00:00 2486
原创 高级数据结构与算法 | 三元搜索树(Ternary Search Tree)
Ternary Search Tree(三元搜索树),它是由 Bentley 和 Sedgewick 在 1997 年提出的一种基于 Trie 的思想改良的一种数据结构,其目的在于优化 Trie 在大规模数据集下的时间、空间开销。
2023-04-13 10:00:00 1346
原创 BitCask:基于日志结构哈希表的高性能 KV 引擎
BitCask 是分布式数据库 RIAK KV 的存储引擎,同时也是世界上最高效的 KV 存储引擎之一,其基于日志结构哈希表(Log-Structured Hash Table)实现。
2023-03-29 11:47:16 688
原创 CMake 快速入门
CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile 或者 project 文件,CMake 的配置文件取名为 CMakeLists.txt。也就是在 CMakeLists.txt 这个文件中写 cmake 代码。 一句话:cmake 就是将多个 cpp、hpp 文件组合构建为一个大工程的语言。......
2022-07-11 14:00:00 961
原创 从实践到原理掌握 GDB
GDB(GNU Debugger),是一个由 GNU 开源组织发布的、UNIX/LINUX 操作系统下的、基于命令行的、功能强大的程序调试工具;GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段;GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。...
2022-07-10 14:00:00 1562 1
原创 一文学会使用Bazel构建C++项目
Bazel 是一个开源构建和测试工具,类似于 Make、Maven 和 Gradle。它使用人类可读的简要构建语言。Bazel 支持多种语言的项目,并针对多个平台构建输出。Bazel 支持跨多个代码库和大量用户的大型代码库。...
2022-07-04 10:00:00 1969
原创 一文掌握谷歌 C++ 单元测试框架 GoogleTest
GoogleTest(简称 GTest) 是 Google 开源的一个跨平台的(Liunx、Mac OS X、Windows等)的 C++ 单元测试框架,可以帮助程序员测试 C++ 程序的结果预期。不仅如此,它还提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。......
2022-06-16 10:00:00 3216
原创 CPU Cache 一致性:Cache 结构、同步方式、Cache 一致性、总线嗅探、MESI 协议
随着时间的推移,CPU 和内存的访问性能相差越来越大,为了弥补 CPU 与内存两者之间的性能差异,就在 CPU 内部引入了 CPU Cache,也称高速缓存。CPU Cache 通常分为大小不等的三级缓存,分别是 L1 Cache、L2 Cache 和 L3 Cache。它们之间的层级关系如下图:介绍完了 CPU Cache 的层级关系后,再来聊聊它的构成。CPU Cache 其实是由多个 组成的,而 其实就是 CPU 从内存读取数据的基本单位,由 (标志)和 (数据块)组成。当我们把数据写入 Cach
2022-06-09 14:00:00 2532 1
原创 etcd Raft 源码剖析
etcd 是 coreOS 使用 golang 开发的分布式,一致性的 kv 存储系统,因其易用性和高可靠性被广泛运用于服务发现、消息发布和订阅、分布式锁和共享配置等方面,也被认为是 zookeeper 的强有力的竞争者。...
2022-06-04 14:00:00 1022
原创 新时代内存分配器:TCMalloc
TCMalloc 全称 Thread-Caching Malloc,即线程缓存的 `malloc`,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(`malloc`、`free`,`new`,`new[]` 等)。
2022-05-26 16:26:03 1694 1
原创 一篇文章掌握C++17核心特性
C++ 17 新特性:折叠表达式、结构化绑定、类模板实参推导、内联变量、STL 并行算法、file_system、string_view、any 等
2022-04-25 09:00:00 1674 1
原创 分布式系统概念 | 分布式时钟:物理时钟、逻辑时钟、Lamport 时间戳、向量时钟、版本向量
分布式系统概念 | 分布式时钟:物理时钟、逻辑时钟、Lamport 时间戳、向量时钟、版本向量
2022-04-12 15:12:34 3732
原创 LevelDB 源码剖析(九)DBImpl模块:Open、Get、Put、Delete、Write
LevelDB 源码剖析(九)DBImpl模块:Open、Get、Put、Delete、Write
2022-04-10 13:21:13 999
原创 LevelDB 源码剖析(八)Compaction模块:Minor Compaction、Major Compaction、文件选取、执行流程、垃圾回收
LevelDB 源码剖析(八)Compaction 模块:Minor Compaction、Major Compaction、文件选取、执行流程、垃圾回收
2022-04-08 16:11:56 1968 2
原创 LevelDB 源码剖析(七)版本管理:Manifest、Version、VersionEdit、VersionSet
LevelDB 源码剖析(七)版本管理:Manifest、Version、VersionEdit、VersionSet
2022-04-06 13:26:31 1755
原创 LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复
LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复
2022-04-04 16:38:15 1195
原创 LevelDB 源码剖析(五)SSTable模块:SSTable、Block、布隆过滤器、LRU Cache
LevelDB 源码剖析(五)SSTable模块:SSTable、Block、布隆过滤器、LRU Cache
2022-04-03 10:00:00 1198
原创 LevelDB 源码剖析(四)MemTable模块:SkipList、MemTable、持久化
LevelDB 源码剖析(四)MemTable模块:SkipList、MemTable、持久化
2022-04-01 14:00:00 1240
原创 LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作
LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作
2022-03-30 23:04:51 1325
原创 LevelDB 源码剖析(二)整体架构与基本组件:Comparator、Slice、Status、Iterator、Option
LevelDB 源码剖析(二)整体架构与基本组件:Comparator、Slice、Status、Iterator、Option
2022-03-30 15:49:54 2123
原创 LevelDB是什么?为什么我们需要K-V存储?
LevelDB 是一个由 Google 公司所研发的 K-V 存储嵌入式数据库管理系统编程库,以开源的 BSD 许可证发布。其作为 LSM Tree 的经典实现,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。
2022-03-28 23:01:30 4308
原创 ElasticSearch探索之路(六)实战:环境搭建、REST、CRUD、Search
ElasticSearch探索之路(六)实战:环境搭建、REST、CRUD、Search
2021-08-17 14:31:50 388
原创 ElasticSearch探索之路(五)集群与分片:选举、动态更新、近实时搜索、事务日志、段合并
ElasticSearch集群内部原理:选举、动态更新、近实时搜索、事务日志、段合并
2021-08-15 17:26:51 825
原创 ElasticSearch探索之路(四)索引原理:倒排索引、列式存储、Fielddata、索引压缩、联合索引
ElasticSearch索引结构、存储原理
2021-08-12 15:59:37 1700 1
原创 ElasticSearch探索之路(二)权重计算与文本分析:布尔模型、TF/IDF、向量空间模型、分析与分析器
ElasticSearch的权重计算与文本分析原理
2021-08-09 15:37:29 1251 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人