Page Not Found
Page not found. Your pixels are in another canvas.
A list of all the posts and pages found on the site. For you robots out there is an XML version available for digesting as well.
Page not found. Your pixels are in another canvas.
关于我
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
按年份归档的文章列表(支持分页)
发布于:
论文:VSAG: An Optimized Search Framework for Graph-based Approximate Nearest Neighbor Search(PVLDB 18(12), 5017-5030, 2025)
原文:https://www.vldb.org/pvldb/vol18/p5017-cheng.pdf
DOI:10.14778/3750601.3750624
Artifact / Code:论文中给出https://github.com/antgroup/vsag(GitHub: antgroup/vsag)
发布于:
在上一篇文章中,我们深入了解了 Locator 与数据一致性的实现。本文将继续深入,详细解析文件系统抽象与存储格式的实现,这是理解 IndexLib 如何管理文件存储和访问的关键。
发布于:
在上一篇文章中,我们深入了解了索引类型的实现。本文将继续深入,详细解析 Locator 的实现细节和数据一致性保证机制,这是理解 IndexLib 如何保证数据不重复、不丢失的关键。
发布于:
在上一篇文章中,我们深入了解了内存管理与资源控制的机制。本文将继续深入,详细解析索引类型的实现,这是理解 IndexLib 如何支持不同类型索引的关键。
发布于:
在上一篇文章中,我们深入了解了 Segment 合并策略的实现。本文将继续深入,详细解析内存管理与资源控制的机制,这是理解 IndexLib 如何高效管理内存和资源的关键。
发布于:
在上一篇文章中,我们深入了解了版本管理和增量更新的机制。本文将继续深入,详细解析 Segment 合并策略的实现,这是理解 IndexLib 如何优化索引结构和提高查询性能的关键。
发布于:
在上一篇文章中,我们深入了解了查询流程的实现。本文将继续深入,详细解析版本管理和增量更新的机制,这是理解 IndexLib 如何管理索引版本和实现增量更新的关键。
发布于:
在上一篇文章中,我们深入了解了索引构建的完整流程。本文将继续深入,详细解析查询流程的实现,这是理解 IndexLib 如何从索引中查询数据的关键。
发布于:
在上一篇文章中,我们深入了解了 Tablet 和 Segment 的组织方式。本文将继续深入,详细解析索引构建的完整流程,这是理解 IndexLib 如何从文档构建索引的关键。
发布于:
在上一篇文章中,我们介绍了 IndexLib 的整体架构和核心概念。本文将继续深入,详细解析 Tablet 和 Segment 的组织方式,这是理解 IndexLib 索引机制的关键。
发布于:
发布于:
发布于:
论文:ARC: A Self-Tuning, Low Overhead Replacement Cache(Megiddo, Modha,FAST 2003)
发布于:
论文:Write Anywhere File Layout(Hitz, Lau, Malcolm,USENIX 1994;NetApp WAFL 系列公开资料的经典代表)
发布于:
论文:The Design and Implementation of a Log-Structured File System(Rosenblum, Ousterhout,SOSP 1991 / 1992 扩展版)
发布于:
论文:A Case for Redundant Arrays of Inexpensive Disks (RAID)(Patterson, Gibson, Katz,SIGMOD 1988)
发布于:
本文是「存储笔记:冷热分层:把热点留在 NVMe,把冷数据放远端」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
这一篇聚焦 RocksDB 的 SST(Sorted String Table):一个 SST 里大致有什么,以及一次点查通常会经历哪些步骤。
发布于:
本文梳理 Raft 的核心机制“讲透但不啰嗦”:无需背完所有 RPC 字段,也能理解它为什么安全、为什么能工作、工程里该关注哪些边界条件。
发布于:
本文是「存储笔记:写入合并(merge)与写扩散:从日志到段」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
本文作为 RocksDB 系列的第 1 篇,先把「一次 Put()/Write() 从 API 到落盘语义」讲清楚:写入路径、确认点(durability)、以及写入抖动来自哪里。后续再分别展开 SST、读路径与 compaction 调参。
发布于:
这篇作为“分布式一致性系列”第 1 篇,不从 Raft/Paxos 的细节开始,而是先把复制(replication)到底在保证什么讲清楚:
发布于:
本文讲清楚一个容易误解的事实:在很多存储系统(尤其 LSM)里,Delete 并不等于空间立刻释放。删除本质上是“写入一个 tombstone(删除标记)”,真正回收空间通常发生在后台 compaction/GC 之后。
发布于:
本文是「RocksDB 笔记:压缩与校验:CPU/IO 的权衡点」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
这篇讲清楚两件事:
发布于:
脑裂(split brain)的本质不是“网络断了”,而是:
发布于:
本文是「RocksDB 笔记:Write stall:为什么会卡住、如何定位」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
线性一致性(linearizability)这四个字经常被当成“强一致”的代名词,但工程里最重要的是:它是一个可以用客户端观察来定义、也可以被测试与反证的语义。
发布于:
这篇把 Raft 实现里两个最常见、也最容易误用的 index 讲清楚:
发布于:
本文是「RocksDB 笔记:MemTable/Immutable:写入高峰的内存结构演进」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
成员变更(reconfiguration)是强一致系统里最容易“看起来只是改个列表”,但实际上非常危险的操作。
发布于:
在 SSD 上看到的“写放大”,常常不是上层存储引擎(LSM/B+Tree)带来的那一个,而是设备内部也在发生:
发布于:
论文:RocksDB: Evolution of Development Priorities in a Key-Value Store Serving Large-Scale Applications(Dong et al., VLDB 2022)
发布于:
这篇讲清楚一个“基于日志复制的一致性系统”迟早要面对的现实:
发布于:
本文是「存储基础系列」的第 5 篇:用“工作负载”的视角比较 B+Tree 与 LSM,两者没有绝对优劣,只有取舍。
发布于:
在 RocksDB 写入链路中,最容易遇到两类“看似突然”的现象:
发布于:
论文:PolarDB: A Cloud-Native Database Designed for the Cloud(Wang et al., SIGMOD 2022)
发布于:
本文是「存储基础系列」的第 4 篇:为什么存储系统几乎都要 WAL,以及一个最小的崩溃恢复闭环应该长什么样。
发布于:
论文:The Log-Structured Merge-Tree(O’Neil et al., Acta Informatica 1996;在工程界常被视为 LSM 系统的源头之一)
发布于:
这篇解决一个工程上最常见的困惑:
发布于:
本文是「存储基础系列」的第 3 篇,建立一个 LSM 的“直觉模型”,并解释 compaction 为什么既是性能来源,也是写放大的主要来源。
发布于:
本文是「RocksDB 笔记:Bloom / Ribbon filter:降低负查的成本」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
论文:Access Path Selection in a Relational Database Management System(Selinger et al., SIGMOD 1979)
发布于:
论文:Spanner: Google’s Globally-Distributed Database(Corbett et al., OSDI 2012)
发布于:
论文:The Google File System(Ghemawat, Gobioff, Leung, SOSP 2003)
发布于:
本文围绕“读写多数派(quorum)为什么能工作”做一次工程化梳理:不背公式也能理解它的安全性来源,能把它落到系统实现与排障上。
发布于:
本文是「存储基础系列」的第 2 篇,聊三个经常一起出现的概念:读放大(Read Amplification)、布隆过滤器(Bloom Filter)、以及 缓存(Cache / Page Cache / Block Cache)。它们本质上都在回答一个问题:“我为一次读取,付出了多少额外成本?”
发布于:
论文:Silo: Exploiting Message Passing and Shared Memory for OLTP(Tu et al., SOSP 2013)
发布于:
论文:MapReduce: Simplified Data Processing on Large Clusters(Dean & Ghemawat, OSDI 2004)
发布于:
论文:Dynamo: Amazon’s Highly Available Key-value Store(DeCandia et al., SOSP 2007)
发布于:
本文是「存储基础系列」第 1 篇:解释写放大(Write Amplification)是什么、为什么几乎所有存储系统都绕不开它,以及工程上如何衡量与优化。
发布于:
这篇笔记更“贴近工程现场”地回答 RocksDB 的一个高频问题:Block Cache 到底缓存什么?怎么估算需要多大?为什么“命中率看起来不低”但延迟还是很差?
发布于:
论文:The Chubby Lock Service for Loosely-Coupled Distributed Systems(Burrows, OSDI 2006)
发布于:
论文:Bigtable: A Distributed Storage System for Structured Data(Chang et al., OSDI 2006)
发布于:
论文:ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks(Mohan et al., ACM TODS 1992)
发布于:
本文是「一致性笔记:Leader 选举:租约(lease)与心跳」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
在 KV 存储里,“删除”很少是一个真正的 delete。尤其当底层是 LSM:
发布于:
发布于:
发布于:
发布于:
复制 + quorum 的系统一旦允许在故障/分区下继续接受写,就必须回答:当同一 key 出现并发写时,系统如何定义“最终值”?
发布于:
发布于:
复制系统长期运行一定会产生副本分歧(divergence)。原因不是“实现有 bug”,而是现实世界的常态:
发布于:
发布于:
发布于:
分片解决了“把 keyspace 切开”与“扩缩容迁移”的问题,但它不解决可靠性。要让 KV 存储在节点故障、网络分区下仍可用,需要引入复制。复制引入了新的核心问题:
发布于:
这一篇聚焦 KV 存储做成“多机可扩展系统”时绕不开的第一件事:数据怎么分片、请求怎么路由、扩缩容怎么再均衡。主题看起来像“hash 环”,但工程上真正决定可用性与性能的是:
发布于:
发布于:
发布于:
发布于:
发布于:
发布于:
发布于:
发布于:
本文是KV存储系列的第 1 篇,先介绍KV存储的核心概念和基本抽象。
发布于:
发布于:
发布于:
NUMA(Non-Uniform Memory Access)机器上,“同样是内存访问”并不等价:访问本地 NUMA 节点的内存更快,访问远端节点更慢,且会引入额外互连流量。对延迟敏感服务而言,NUMA 问题经常表现为:
发布于:
mmap 把“文件”与“内存地址空间”连接起来:读写文件内容可以变成对内存的 load/store。它常用于:
发布于:
发布于:
线上常见的“IO 抖动”现象里,page cache 与 writeback(回写)经常是主角:吞吐看起来没变,但 P99/P999 延迟突然上升,甚至出现周期性尖刺。
发布于:
发布于:
本文深入解析分支预测失败导致的流水线 flush 机制、性能影响和优化方法。
发布于:
这篇笔记把 IO 多路复用当作一个“代价模型”问题:在大量连接/FD 下,如何以更低的 CPU 成本判断哪些 FD 可读/可写。常见路径:
发布于:
本文深入解析超时与重试机制如何导致流量放大,以及如何通过合理的策略避免这一问题。
发布于:
本文深入解析内存屏障(fence)的必要性、工作原理、常见场景和工程实践。
发布于:
这篇笔记整理三类经常一起出现的同步原语:mutex、futex、条件变量。重点不是 API 记忆,而是把“为什么快 / 为什么慢 / 为什么会卡住”拆成可观测的机制:
发布于:
本文深入解析四层(L4)和七层(L7)负载均衡的工作原理、适用场景、性能特征和工程实践。
发布于:
本文深入解析 SIMD(Single Instruction, Multiple Data)的工作原理、适用场景、性能边界和工程实践。
发布于:
本文深入解析 Linux CFS(Completely Fair Scheduler)的工作原理、vruntime 机制、调度策略和工程实践。
发布于:
本文深入解析拥塞控制的核心概念,以及 CUBIC 和 BBR 两种算法的设计差异、适用场景和工程实践。
发布于:
本文深入解析性能诊断的核心指标:IPC、cache miss 和 branch miss,以及它们之间的关系和诊断方法。
发布于:
本文深入解析 io_uring 的设计原理、工作机制、适用场景和工程实践。
发布于:
本文深入解析 TLS 握手的工作原理、延迟来源、会话复用机制和工程优化实践。
发布于:
本文深入解析 Cache line 的工作原理、伪共享(false sharing)的机制与影响,以及工程实践中的定位与优化方法。
发布于:
发布于:
本文深入解析 TCP 重传机制:RTO(Retransmission Timeout)和 fast retransmit 的工作原理、性能影响和工程实践。
发布于:
发布于:
发布于:
本文深入解析 HTTP/2 的核心特性:多路复用、流控、头部压缩,以及传输层队头阻塞问题。
发布于: