nimble

facebookincubatorApache-2.0活跃维护

面向大规模列式数据集的可扩展文件格式,用 C++ 实现,支持压缩与编码,适合机器学习训练和数据分析场景下的高效存储。

New and extensible file format for storage of large columnar datasets.

暂无版本744star98fork同步于 2026-11-07 07:33 UTC

怎么上手

由 README 提炼,执行前请确认
git clone [email protected]:facebookincubator/nimble.git
cd nimble
make
硬件要求按 README 说明

README 未说明显存或 GPU 型号要求;编码设计上声称对 SIMD 和 GPU 友好,但 GPU 支持尚未实现。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

Meta 开源的新列式文件格式,面向数千列的宽表场景,目标是替代 Parquet 和 ORC

面向大规模列式数据集的可扩展文件格式,用 C++ 实现,支持压缩与编码,适合机器学习训练和数据分析场景下的高效存储。

核心能力

  • 用 Flatbuffers 组织元数据,高效访问大段元数据
  • 采用块编码而非流编码,解码时内存占用可预测
  • 编码与物理布局解耦,支持用户扩展并级联递归编码
  • 编码选择策略可插拔,逻辑类型与物理编码类型分离
  • 元数据组织更轻量,支撑数千到数万列和流

容易踩的坑

项目仍在开发中,不提供稳定性和版本保证;构建前需先安装 flatbuffers、protobuf、folly、velox 等一长串系统依赖;代码目前与 Velox 紧耦合,Velox 以子模块形式固定在特定 commit。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    The Nimble File Format

    Linux Build Velox

    Nimble (formerly known as ”Alpha”) is a new columnar file format for large datasets created by Meta. Nimble is meant to be a replacement for file formats such as Apache Parquet and ORC.

    Watch this talk to learn more about Nimble's internals.

    Nimble has the following design principles:

    • Wide: Nimble is better suited for workloads that are wide in nature, such as tables with thousands of columns (or streams) which are commonly found in feature engineering workloads and training tables for machine learning.

    • Extensible: Since the state-of-the-art in data encoding evolves faster than the file layout itself, Nimble decouples stream encoding from the underlying physical layout. Nimble allows encodings to be extended by library users and recursively applied (cascading).

    • Parallel: Nimble is meant to fully leverage highly parallel hardware by providing encodings which are SIMD and GPU friendly. Although this is not implemented yet, we intend to expose metadata to allow developers to better plan decoding trees and schedule kernels without requiring the data streams themselves.

    • Unified: More than a specification, Nimble is a product. We strongly discourage developers to (re-)implement Nimble's spec to prevent environmental fragmentation issues observed with similar projects in the past. We encourage developers to leverage the single unified Nimble library, and create high-quality bindings to other languages as needed.

    Nimble has the following features:

    • Lighter metadata organization to efficiently support thousands to tens of thousands of columns and streams.

    • Use Flatbuffers instead of thrift/protobuf to more efficiently access large metadata sections.

    • Use block encoding instead of stream encoding to provide predictable memory usage while decoding/reading.

    • Supports many encodings out-of-the-box, and additional encodings can be added as needed.

    • Supports cascading (recursive/composite) encoding of streams.

    • Supports pluggable encoding selection policies.

    • Provide extensibility APIs where encodings and other aspects of the file can be extended.

    • Clear separation between logical and physical encoded types.

    • And more.

    Nimble is a work in progress, and many of these features above are still under design and/or active development. As such, Nimble does not provide stability or versioning guarantees (yet). They will be eventually provided with a future stable release. Use it at your own risk.

    Build

    Nimble's CMake build system is self-sufficient and able to either locate its main dependencies or compile them locally. In order to compile it, one can simply:

    $ git clone [email protected]:facebookincubator/nimble.git
    $ cd nimble
    $ make
    

    To override the default behavior and force the build system to, for example, build a dependency locally (bundle it), one can:

    $ folly_SOURCE=BUNDLED make
    

    Nimble builds have been tested using clang 15 and 16. It should automatically compile the following dependencies: gtest, glog, folly, abseil, and velox. You may need to first install the following system dependencies for these to compile (example from Ubuntu 22.04):

    $ sudo apt install -y \
        git \
        cmake \
        flatbuffers-compiler \
        protobuf-compiler \
        libflatbuffers-dev \
        libgflags-dev \
        libunwind-dev \
        libgoogle-glog-dev \
        libdouble-conversion-dev \
        libevent-dev \
        liblz4-dev \
        liblzo2-dev \
        libelf-dev \
        libdwarf-dev \
        libsnappy-dev \
        libssl-dev \
        bison \
        flex \
        libfl-dev \
        pkg-config \
        clang \
        clang-format
    

    Although Nimble's codebase is today closely coupled with velox, we intend to decouple them in the future.

    Advance Velox Version

    Nimble integrates Velox as a Git submodule, referencing a specific commit of the Velox repository. The Velox badge at the top of this README shows the current commit and how far behind it is from Velox main.

    See what changed since the current Velox commit.

    Advance Velox when your changes depend on code in Velox that is not available in the current commit, or when the submodule falls too far behind. To update the Velox version, follow these steps:

    git -C velox checkout main
    git -C velox pull
    git add velox
    

    Build and run tests to ensure everything works. The pre-commit hook will automatically update the Velox compare link in this README. Submit a PR, get it approved and merged.

    License

    Nimble is licensed under the Apache 2.0 License. A copy of the license can be found here.