
文本检索场景下的分布式索引设计
本文详细记录了 2025 年为推动基研 Rust 生态建设,从 0 到 1 的分布式索引项目的设计与实现过程。 该项目需要解决的问题非常具体:为基于 Parquet 数据文件存储的 TimeSeries DB 做查询加速。 上游 SQL 通常会先给出一个时间范围,如果数据库直接按这个时间窗口去扫描,就很可能把时间窗口里的全部 parquet 都访问一遍。我们的目标不是替代数据库执行 S...

本文详细记录了 2025 年为推动基研 Rust 生态建设,从 0 到 1 的分布式索引项目的设计与实现过程。 该项目需要解决的问题非常具体:为基于 Parquet 数据文件存储的 TimeSeries DB 做查询加速。 上游 SQL 通常会先给出一个时间范围,如果数据库直接按这个时间窗口去扫描,就很可能把时间窗口里的全部 parquet 都访问一遍。我们的目标不是替代数据库执行 S...
记录下 MetaServer 分布式服务开发的经验 在前文《一个时序元数据引擎的实现复盘:从双层 MemTable 到流式合并》中,我们构建了一个针对时序元数据场景深度优化的存储内核。本文将探讨如何将其向上抽象,封装为具备 API 访问能力的分布式服务。 从项目的职责边界来看,我们可以这样进行区分: Key 定位 ...

沉淀一下从零实现 MetaStorage 元数据存储内核的心得体会,记录从 0 到 1 的开发全历程 MetaStorage 不是一个追求通用性的数据库内核,而是一套面向 “时序数据文件元数据检索” 场景、参考 LSM Tree 思想深度定制的存储引擎。 在项目初期,我们也曾尝试过 MySQL、DuckDB 等成熟方案,但在面对 PB 级元数据压力和严酷的查询性能要求时,通用组件的短板...

Benchmark 测试结果表明,集成 Tantivy 全文检索引擎后,MyScaleDB 的文本搜索在响应速度与检索精度上均实现了显著飞跃。➡️ TheNewStack 英文原版链接 🔗 全球数据规模正在快速膨胀,且其中绝大部分都是非结构化数据。传统数据库在处理这类文本数据时往往力不从心,而全文检索 (FTS) 恰恰能够提供一种更自然、更高效的访问方式,让用户按照主题、关键词甚至语义相...
map 函数在不同场景下的设计理念 rust 的 map() 函数设计原则有两种类别: eager(execute immediately): 调用 map 时立刻执行转换逻辑 lazy(wait for use): 调用 map 时会返回一个包装类型, 不会立刻对内部的数据进行转换, 外部执行收集时才会转换. Type Natur...
一、关于 Prelude 机制 在使用 Rust 的 Option 和 Box 时, 我们不需要手动导入相关的模块, 它们都是 Rust 标准库的一部分, 但是它们有着不同的可见性机制。 事实上这些数据结构是通过 Prelude 机制进行自动导入的 std::prelude::v1 包含的内容如下 // 标准库位置:std::prelude::v1 pub use crate::mark...
在排查一个线上问题的过程中,对 Tokio 有了更深入的理解。 问题现象 服务部署在 K8s Pod 中,运行时主要包含两部分: 对外提供实时数据查询的 RPC 接口; 后台持续执行的数据处理任务,用来更新内部状态,保证 RPC 返回结果的正确性。 这两部分都运行在 Tokio 异步 runtime 上。上线后发现,客户端循环请求 RPC 接口时,会概率性出现 time...
学习理解 Datafusion 的 TableSource, TableProvider 之间的关系 一、TableSource 和 TableProvider 的作用 1. TableSource TableSource 是在逻辑查询规划和优化阶段使用的 Trait, 提供: schema 信息 filter 下推能力 table 类型信息 约束条件 (比如主键) ...
在执行对 rust 二进制文件内存分析时, 提示找不到动态库 .so, 因此需要静态编译 rust 二进制文件 安装新平台支持 rustup target add x86_64-unknown-linux-musl 使用下述命令查看当前系统安装的所有 target rustup target list --installed 查看所有的 rust target, 包括目前还未安装...
理解项目中使用到的 dyn Iterator 一、关于 Box 1. 为什么返回值使用 Box 封装? 在 Rust 中,dyn Trait 表示动态分发的 trait 对象,而动态分发的 trait 对象本身无法直接作为函数的返回值,因为其大小在编译时不固定。 具体原因 Iterator 是一个 trait,dyn Iterator 是它的动态版本。 不同的迭代器类型...