ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

FASTER 研究论文导读:从 SIGMOD 核心 KV 存储到 CPR 恢复、弹性扩展与缓存优化的论文—源码对照地图

FASTER 研究论文导读:从 SIGMOD 核心 KV 存储到 CPR 恢复、弹性扩展与缓存优化的论文—源码对照地图 数据库缓存KV存储【免费下载链接】FASTERFast persistent recoverable log and key-value store cache, in C# and C.项目地址https://gitcode.com/gh_mirrors/fa/FASTER点击查看免费下载导读本文围绕仓库官方研究索引页 docs/_docs/95-research-papers.md 展开完整梳理 FASTER 项目十年研究脉络中的 10 篇代表性论文涵盖核心系统、单机恢复、扩展性、分布式恢复、缓存与二级索引六大主题。同时给出每篇论文在当前 C#/C 仓库中的对应实现路径、关键 API 与测试用例帮助读者建立论文概念 → 源码证据的双向映射快速上手源码阅读与二次开发。论文索引总览官方按主题分组的 FASTER 研究路线图95-research-papers.md是 FASTER 文档站Technical Details技术细节版块下的官方论文索引页与 90-td-introduction.md技术细节入口其中收录了主论文与恢复论文的入口链接同属一个系列。该页面按6 个研究方向、收录了2018—2022 年间 10 篇论文每一篇都与仓库中可定位的具体实现一一对应主题论文发表场合仓库对照核心系统FASTER: A Concurrent Key-Value Store with In-Place UpdatesSIGMOD 2018FASTER.cs、LightEpoch.cs核心系统FASTER: An Embedded Concurrent Key-Value Store for State ManagementPVLDB 2018同上系统论文的期刊版核心系统Performant Almost-Latch-Free Data Structures Using Epoch ProtectionDaMoN 2022LightEpoch.cs、EpochProtectedVersionScheme.cs单机恢复Concurrent Prefix Recovery: Performing CPR on a DatabaseSIGMOD 2019Recovery.cs、IndexRecovery.cs扩展性Achieving High Throughput and Elasticity in a Larger-than-Memory StorePVLDB 2021arXiv:2006.03206CacheStore 示例、ResizableCacheStore 示例分布式恢复Asynchronous Prefix Recoverability for Fast Distributed StoresSIGMOD 2021cs/remoteFASTER.server / FASTER.client缓存CompuCache: Remote Computable Caching using Spot VMsCIDR 2022读缓存ReadCache设施与缓存示例缓存Redy: Remote Dynamic Memory CachePVLDB 15(4), 2022同上二级索引FishStore: Fast Ingestion and Indexing of Raw DatademoVLDB 2019关联研究系统仓库内未含实现二级索引FishStore: Faster Ingestion with Subset HashingSIGMOD 2019同上原文档在每篇论文后附有 PDF 外链微软研究院 / arXiv / 作者主页。本文不重复输出外部链接读者可回到原文档页 95-research-papers.md 获取全文这里聚焦论文主题与仓库源码的对应关系。核心系统FASTER 的两篇奠基论文与无锁化数据结构的证明文档Core FASTER System小节收录了三篇论文构成了整个项目最底层的技术支柱。论文 1FASTER 主论文SIGMOD 2018Badrish Chandramouli, Guna Prasaad, Donald Kossmann, Justin Levandoski, James Hunter, Mike Barnett.FASTER: A Concurrent Key-Value Store with In-Place Updates. 2018 ACM SIGMOD International Conference on Management of Data (SIGMOD 18), Houston, TX, USA, June 10, 2018.论文 2嵌入式系统版PVLDB 2018同一作者团队。FASTER: An Embedded Concurrent Key-Value Store for State Management. PVLDB 2018, Rio de Janeiro, Brazil, August 2018.论文 3Epoch 保护机制DaMoN 2022Tianyu Li, Badrish Chandramouli, Sam Madden.Performant Almost-Latch-Free Data Structures Using Epoch Protection. DaMoN, 2022.论文要义混合日志 就地更新 无锁并发FASTER 论文提出的核心模型是一个主哈希索引叠加在一条横跨内存与磁盘的 hybrid log混合日志之上。写入路径支持in-place update就地更新即对热数据直接在现有位置修改而不是追加从而同时获得内存 KV 存储的读性能和日志型存储的写吞吐当内存不足时数据以 page 为单位换入换出到外部存储本地磁盘或云端。这正是文档 25-fasterkv-recovery.md 开头所复述的架构描述FASTER basically consists of a primary hash index operating over a hybrid log that spans disk and main memory。在 C# 仓库中这一模型的落点清晰可循顶层入口 FASTER.cs 定义FasterKV其 Checkpoint/Recover 系列公开 API 正是论文checkpoint-based recovery的实现面TakeFullCheckpointAsync/TakeIndexCheckpointAsync/TakeHybridLogCheckpointAsyncFASTER.cs#L312-L409Recover()的多个重载FASTER.cs#L427-L479就地更新与 RMW 的具体实现在 cs/src/core/Index/FASTER/Implementation 目录下InternalUpsert.cs、InternalRMW.cs、InternalRead.cs、InternalDelete.cs分别对应 UPSERT / RMW / READ / DELETE 四条操作路径混合日志的分页分配与管理在 cs/src/core/AllocatorBlittableAllocator.cs、VarLenBlittableAllocator.cs、GenericAllocator.cs等内存页调度与溢出相关测试可见 paging_test.h 与 malloc_fixed_page_size_test.ccC 端。Epoch 保护论文 3 对应的核心数据结构Almost-Latch-Free几乎无锁论文描述的 epoch protection 机制在仓库中就是 LightEpoch.cs。从源码可以看到其精妙设计LightEpoch.cs#L15-L103缓存行对齐常量kCacheLineBytes 64线程状态表按缓存行对齐以避免伪共享线程表容量kTableSize max(128, ProcessorCount * 2)随机器核心数自适应drain list大小 16 的EpochActionPair环形槽存放当某个 epoch 变得安全可回收后要执行的动作如内存页回收、索引扩容回调两个全局水位CurrentEpoch全局当前纪元与SafeToReclaimEpoch可安全回收的最新纪元——这正是论文中延迟回收deferred reclamation的落地形态。基于 epoch 的版本化方案还有专门实现 EpochProtectedVersionScheme.cs其行为由 SimpleVersionSchemeTest.cs 覆盖另有一组基准测试 LightEpochTests.cs 用于度量 epoch 保护的开销。C 端同样移植了该机制见 light_epoch.h。单机恢复Concurrent Prefix RecoveryCPRSIGMOD 2019文档Single-Node Recovery小节仅收录一篇但它是 FASTER 恢复模型的理论基石Guna Prasaad, Badrish Chandramouli, Donald Kossmann.Concurrent Prefix Recovery: Performing CPR on a Database. SIGMOD 2019, Amsterdam, Netherlands, June 2019.CPR 的核心理念文档 25-fasterkv-recovery.md 专门用一节介绍了 CPR 的通俗解释CPR 基于周期性 group commit组提交但刻意不使用昂贵的 WAL预写日志因为 WAL 会毁掉 FASTER 的高性能。取而代之的是两条支柱前缀语义提交状态被描述为会话 i 中直到序号 Ti 的所有操作均已持久化而不是逐个操作确认异步增量检查点用非阻塞的增量 checkpointing 代替 WAL 实现可扩展、无瓶颈的组提交。用户侧模型每个会话session的操作Read/Upsert/RMW携带单调递增的序列号调用 checkpoint API 后每个会话最终收到一个commit point包含 (1) 一个序列号保证该序号之前且之后不含的所有操作已随该 checkpoint 持久化(2) 一个可选的 exception list列出因会话在 checkpoint 时刻不活跃而未提交的操作。源码中的 CPR 落点CPR 在仓库中的实现集中在 cs/src/core/Index/Recovery 目录Recovery.cs 是恢复主流程RecoveryStatus类Recovery.cs#L17-L51用ReadStatus/FlushStatus两个环形缓冲跟踪每页的读取与落盘进度配合SemaphoreSlim实现同步/异步两种等待语义RecoverHybridLogRecovery.cs#L610按 checkpoint 类型分发恢复路径Snapshot走RecoverHybridLogFromSnapshotFileRecovery.cs#L734FoldOver直接在主日志上回放索引的模糊恢复fuzzy recovery即索引 checkpoint 与日志 checkpoint 不必精确对齐实现在 IndexRecovery.cs#L25-L85RecoverFuzzyIndex/RecoverFuzzyIndexAsync其单测可见 ComponentRecoveryTests.cs#L167-L185公开 API 层Recover(int numPagesToPreload -1, bool undoNextVersion true, long recoverTo -1)支持恢复到指定序列号recoverTo这对应 CPR 论文的前缀恢复能力FASTER.cs#L427。一个最小可运行的 CPR 使用范式文档 25-fasterkv-recovery.md 给出的示例在 SimpleRecoveryTest.cs 等测试中有同构实现完整展示了周期检查点 崩溃后恢复 会话续跑三步曲// 1. 周期性地发起 FoldOver 日志检查点非阻塞 (_, _) fht.TakeHybridLogCheckpointAsync(CheckpointType.FoldOver).GetAwaiter().GetResult(); // 2. 崩溃重启后恢复 fht.Recover(); // 3. 用相同会话 ID 续跑ResumeSession 返回 CommitPoint // 其中 UntilSerialNo 即已持久化的前缀序号 using var session fht.ResumeSession(new SimpleFunctionslong, long(), s1, out CommitPoint cp); var seq cp.UntilSerialNo 1; // 从断点之后继续发操作其中TakeHybridLogCheckpointAsync支持CheckpointType.Snapshot把内存日志整体快照到独立 snapshot 文件可配tryIncremental增量快照与CheckpointType.FoldOver直接落主日志、写小元数据文件info.dat天然增量。C 移植版同样具备完整恢复能力见 cc/README.md恢复状态机在 recovery_status.h日志元数据读取示例在 cc/playground/recovery-info恢复测试见 f2_recovery_test.cc。扩展性Larger-than-Memory StorePVLDB 2021文档Scale-Out小节Chinmay Kulkarni, Badrish Chandramouli, Ryan Stutsman.Achieving High Throughput and Elasticity in a Larger-than-Memory Store. Proc. VLDB Endow. Volume 14, Issue 8, 2021原文标注 arXiv:2006.03206。论文要义与仓库对应这篇论文探讨的是 FASTER 作为内存放不下的存储时的扩展能力如何在不牺牲吞吐的前提下利用比内存更大的数据集并保持弹性伸缩。对应到仓库最直接的落地机制是read cache读缓存混合日志的主日志main log常驻最近写入的数据而读缓存用独立的内存页集合为写少读多的工作负载缓存磁盘侧数据从而把读放大压到最低。配置入口非常直观var logSettings new LogSettings { LogDevice log, ObjectLogDevice objlog, // 启用读缓存缓存逻辑位于主日志之外专门服务磁盘页的重复读 ReadCacheSettings useReadCache ? new ReadCacheSettings() : null, // PageSizeBits 12, // 4K 页低内存占用演示 // MemorySizeBits 20 // 主日志内存 1M };这段代码取自 cs/samples/CacheStore/Program.cs#L32-L39。LogSettings中的MemorySizeBits/PageSizeBits分别以 2 的幂定义主日志内存总量与页大小二者共同决定混合日志的分页调度节奏。相关工程实践还有ResizableCacheStore 示例用CacheSizeTracker/LogSizeTracker动态调整缓存与日志容量体现论文的elasticity主题示例中同样以ReadCacheSettings构造读缓存见 Program.cs#L351测试侧读缓存链与正确性由 ReadCacheChainTests.cs、NativeReadCacheTests.cs、ObjectReadCacheTests.cs 覆盖并发玩法见 cs/playground/CacheStoreConcurrent。C 端对应的扩展形态则走向了双层索引架构F2Kv类f2.h#L20将热存储内存哈希索引 MemHashIndex 冷存储磁盘两层索引 ColdIndex配对成一个整体mem_index.h#L39、cold_index.h#L44可视为 Larger-than-Memory 方向在 C 移植版上的延续演化。分布式恢复Asynchronous Prefix RecoverabilitySIGMOD 2021文档Distributed Recovery小节Tianyu Li, Badrish Chandramouli, Jose M. Faleiro, Samuel Madden, Donald Kossmann.Asynchronous Prefix Recoverability for Fast Distributed Stores. SIGMOD 2021, Virtual Event, China, June 2021.论文要义把单机的 CPR 前缀恢复思想推广到多节点每个分片shard独立维护自己的提交前缀节点间以异步方式传播提交信息使得分布式存储即使在不同节点故障与恢复进度不一致的情况下也能在全局范围内给出可验证的一致性恢复语义避免传统两阶段提交的同步开销。仓库中的分布式实现虽然仓库以单机 FASTER 核心为主体但cs/remote/目录完整承载了远程化remote方向服务端cs/remote/src/FASTER.server 提供FasterServerTcpFasterServerTcp.cs、FixedLenServer、VarLenServer、GenericServer等底层会话由 BinaryServerSession.cs 处理请求-响应的编解码与异步回填客户端cs/remote/src/FASTER.client 的ClientSession.cs、ClientSessionAsync.cs、FasterKVClient.cs提供与本地IClientSession对齐的调用面测试cs/remote/test/FASTER.remote.test 中的FixedLenBinaryTests.cs、VarLenBinaryTests.cs、FixedLenBinaryPubSubTests.cs覆盖了远程读写、订阅与畸形请求处理入门示例FixedLenServer、FixedLenClient、VarLenServer、VarLenClient。缓存方向CompuCache 与 RedyCIDR / PVLDB 2022文档Caching小节收录两篇论文Q. Zhang, P. Bernstein, D. Berger, B. Chandramouli, V. Liu, B. T. Loo.CompuCache: Remote Computable Caching using Spot VMs. CIDR, 2022.Q. Zhang, P. Bernstein, D. Berger, B. Chandramouli.Redy: Remote Dynamic Memory Cache. PVLDB, 15(4), 2022.这两篇论文是同一研究线在远端可计算缓存方向的延伸CompuCache 探讨利用 Spot VM 的闲置算力在远端做可下推计算的缓存Redy 则是面向远端动态内存的缓存系统。需要说明的是这两套系统属于相关研究项目本仓库并未包含其实现它们之所以出现在 FASTER 的论文索引中是因为 FASTER 本身就是cache store混合定位的载体。仓库内最接近的工程实体是上文提到的读缓存read cache与 CacheStore 示例该示例注释明言 This sample shows the use of FASTER as a cache key-value store以及在 CacheStoreConcurrent 中把ReadCacheSettings作为开关与 KV 存储并用的实践。二级索引与数据摄取FishStoreVLDB 2019 / SIGMOD 2019文档Secondary Indexing小节Badrish Chandramouli, Dong Xie, Yinan Li, Donald Kossmann.FishStore: Fast Ingestion and Indexing of Raw Data. VLDB 2019, Los Angeles, California, USA, August 2019demo paper。Dong Xie, Badrish Chandramouli, Yinan Li, Donald Kossmann.FishStore: Faster Ingestion with Subset Hashing. SIGMOD 2019, Amsterdam, Netherlands, June 2019.FishStore 瞄准的是原始数据的高速摄取与索引通过subset hashing子集哈希对无模式数据流做按需、低成本的索引构建支撑二级索引类查询。需要如实说明FishStore 是 FASTER 研究线下的独立系统从当前仓库目录结构看并未包含其源码实现FASTER 核心自身聚焦于点查询point lookup之上的主索引。若要理解索引到底长什么样可读 C 端的两类主索引定义——内存热索引 MemHashIndex 与磁盘冷索引 ColdIndex注释明确写着 On-disk, two-level hash index它们展示了 FASTER 主索引由内存桶表到溢出桶/磁盘分页的多级结构这与 FishStore 论文中哈希 分层存储的思路一脉相承。把论文读进代码仓库导航指南论文索引页是理论入口若要亲手验证每个概念推荐按下面的映射路径深入均为仓库内已有文件想验证的论文概念优先阅读整体架构hash index hybrid logdocs/_docs/20-fasterkv-basics.md、cs/src/core/Index/Common/LogSettings.cs磁盘读的生命周期PendingContext → AsyncIOContext → CompletePendingdocs/_docs/82-code-structure.mdCPR / checkpoint / 恢复docs/_docs/25-fasterkv-recovery.md、Recovery.cs、SimpleRecoveryTest.cs、RecoveryChecks.csEpoch / 无锁并发LightEpoch.cs、SimpleVersionSchemeTest.cs读缓存 / 大内存扩展CacheStore 示例、ResizableCacheStore 示例、ReadCacheChainTests.cs远程化 / 分布式cs/remote/README.md、FasterServerTcp.cs、FASTER.remote.test自定义类型与就地更新cs/samples/StoreCustomTypes、cs/samples/StoreVarLenTypes、cs/src/core/Index/FASTER/Implementation/InternalRMW.csC 移植版含 F2 双层索引cc/README.md、docs/_docs/29-fasterkv-cpp.md、f2.h、cold_index.hFASTER Log可恢复日志库docs/_docs/40-fasterlog-basics.md、FasterLog.cs、FasterLogSettings.cs结语一条推荐的研读路径对刚接触 FASTER 的读者建议按主论文SIGMOD 2018→ CPRSIGMOD 2019→ 扩展PVLDB 2021→ 分布式SIGMOD 2021的顺序阅读前两篇解决单机为什么快、怎么恢复后两篇解决怎么变大、怎么跨机。每读一篇回到上表的仓库对照项去翻对应源码——你会发现文档中抽象的概念几乎都能在 cs/src/core、cc/src、cs/remote 中找到逐行的实现细节这正是论文索引页最有价值的用法它不仅是文献清单更是整个 FASTER 代码库的阅读地图。赞分享数据库缓存KV存储【免费下载链接】FASTERFast persistent recoverable log and key-value store cache, in C# and C.项目地址https://gitcode.com/gh_mirrors/fa/FASTER点击查看免费下载相关推荐DeepSeek-R1 模型从下载到跑通推理零门槛全流程指南DeepSeek R1 模型从下载到跑通推理零门槛全流程指南 本文带你跑通 DeepSeek R1 这一大规模推理模型的完整链路从版本选型、权重下载到单卡基础模型大模型人工智能DeepSeek从论文到代码Kronos论文核心观点与GitHub开源实现对照解读从论文到代码Kronos论文核心观点与GitHub开源实现对照解读 Kronos作为首个面向金融市场语言的开源基础模型通过创新性的双层架构解决了金融时间人工智能大模型基础模型预训练金融科技终极指南如何通过VasSonic框架实现Hybrid应用首屏秒开优化终极指南如何通过VasSonic框架实现Hybrid应用首屏秒开优化 VasSonic是腾讯VAS团队开发的轻量级高性能Hybrid框架专为加速Androi移动开发前端后端上一篇Android-AdvancedRecyclerview与Kotlin协程实现异步加载的拖拽列表终极指南下一篇NGINX Unit路由配置高级请求匹配与流量控制实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表