5 个版本 (3 个破坏性更新)
0.3.0 | 2024年8月7日 |
---|---|
0.2.0 | 2024年7月17日 |
0.1.1 | 2024年6月11日 |
0.1.0 | 2024年6月3日 |
0.0.1 | 2024年4月5日 |
#329 in 解析器实现
每月309,559 次下载
在 15 个 仓库中使用(直接使用 2 个)
440KB
9K SLoC
delta-kernel-rs
Delta-kernel-rs 是一个实验性的 Delta 实现,专注于与各种查询引擎的互操作性。它目前只支持读取。
Delta Kernel 项目是一个 Rust 和 C 库,用于构建可以读取(很快也将写入)Delta 表的 Delta 连接器,而无需了解 Delta 协议细节。这是 Java Delta Kernel 的 Rust/C 等价物。
库
Delta-kernel-rs 分成几个不同的库
- kernel: 实际的核心内核库
- acceptance: 通过 Delta Acceptance Tests 验证正确性的验收测试
- derive-macros: 用于存放我们的 derive-macros 的库
- ffi: 使 delta-kernel-rs 能够从
C
或C++
使用的功能。有关更多信息,请参阅 ffi 目录。
构建
默认情况下,我们只构建 kernel
和 acceptance
库,这也会构建作为依赖的 derive-macros
。
要开始,请通过 rustup 安装 Rust,克隆仓库,然后运行
cargo test
这将构建内核,运行所有单元测试,获取 Delta Acceptance Tests 数据,并对其运行验收测试。
作为库,通常您会希望将 delta-kernel-rs
添加到您的 Cargo.toml
中作为依赖项。例如
delta_kernel = "0.3"
版本和 API 稳定性
我们打算遵循语义化版本控制。然而,在0.x
行中,API仍然是不稳定的。因此,我们可能在次要版本(即0.1
-> 0.2
)中打破API,但我们将不在补丁版本(即0.1.0
-> 0.1.1
)中打破API。
文档
- API 文档
- architecture.md 文件描述内核架构(目前为wip状态)
示例
有一些示例程序展示了如何使用delta-kernel-rs
与delta表交互。它们位于/kernel/examples
目录中。
开发
delta-kernel-rs仍在积极开发中,但遵循大多数Rust项目采用的习惯。
概念
有一些关键概念有助于理解内核
Engine
特质封装了所有功能和引擎或连接器需要提供给Delta内核以读取Delta表的功能。DefaultEngine
是我们上述特质的默认实现。它位于/engine/default
,为所有Engine
功能提供参考实现。DefaultEngine
使用arrow作为其内存数据格式。Scan
是从表中读取数据的入口点。
设计原则
一些应考虑的设计原则
- 异步操作应仅存在于
Engine
实现中。核心内核完全不使用异步。我们不希望强加一个完整的异步运行时给引擎或连接器。DefaultEngine
确实大量使用异步。但它不依赖于特定的运行时,实现可以提供基于tokio、smol、async-std或所需任何内容的“执行器”。目前只提供了一个基于tokio的执行器。 - 最小的
Table
API。内核有意通过快照API公开表的不可变版本的概念。这鼓励用户更准确地思考Delta表的状态。 - 优先使用构建器风格API而不是面向对象的API。
- 启用了一组“简单”的默认功能,以提供基本功能,同时尽可能地减少依赖。
- API约定以明确哪些操作涉及I/O,例如在方法签名中检索类型词。
提示
- 在开发时,
rust-analyzer
是你的朋友。使用rustup component add rust-analyzer
- 如果使用
emacs
,eglot和lsp-mode都提供了与rust-analyzer
的优秀集成。rustic也是一个不错的选择。 - 在vscode中开发时,有时在
.vscode/settings.json
中配置rust-analyzer会非常方便。
{
"editor.formatOnSave": true,
"rust-analyzer.cargo.features": ["default-engine", "acceptance"]
}
- 可以使用以下命令轻松查看crate的文档:
cargo docs --open
- 代码覆盖率可通过codecov提供,使用cargo-llvm-cov。有关本地安装/运行的说明,请参阅他们的文档。
依赖项
~5–24MB
~399K SLoC