OpenDAL 项目简介:一个通用的存储接口方案

OpenDAL 项目简介:一个通用的存储接口方案

文一

2025-04-03 发布57 浏览 · 0 点赞 · 0 收藏

务正学以言,无曲学以阿世!
——《史记》

感谢漩涡老师的指教与 NoSQL-CN.org 群的群友,在接下来的工作中我们一定要尽力而为地去少说废话多做事情,要为成为一流的开源科学家而努力。

img

(OpenDAL Logo, 寓意 “Open Data Access Layer”,开放的数据访问层)

OpenDAL 解决了怎样的问题?

就像 Linux VFS 一样,对下封装不同的数据存储基座(如对象存储、KV 存储、文件系统)的使用细节,对上提供统一一致的数据访问接口(如使用 C++、C、Java 语言开发数据应用时,可以使用几乎一致的语义来存储数据)。

OpenDAL 使用怎样的语言来进行开发?

绝大多数的 OpenDAL 组件使用 Rust 进行开发(同各个语言的结合接口使用对应的语言进行编写)。

如何尝试 OpenDAL:以 C++ 程序为例

# 假定平台为 类 Linux
git clone https://github.com/apache/opendal.git
cd opendal/examples/cpp
cmake .
make
./basic-example

img

案例程序解读

#include "opendal.hpp" // 引入 OpenDAL 接口

#include <string>
#include <vector>
#include <iostream>

int main() {
  std::vector<uint8_t> data = {'a', 'b', 'c'};

  // OpenDAL 使用 Operator 封装着每一个数据源
  // 使用 `memory`(内存)数据源
  opendal::Operator op = opendal::Operator("memory");

  // 将 data 写入到数据源中一个被命名为 `test` 的区域
  op.write("test", data);

  // 自数据源 `test` 中提取数据
  // res 将会是 data 的一个完整的拷贝
  auto res = op.read("test"); // res == data
  // 输出 res 需要使用如下代码
  // for (auto element : res)
  //    std::cout << element;
  // std::cout << endl; // 美化输出形式

  // 使用读取器进行提取
  auto reader = op.reader("test");
  std::string res2;
  // 使用读取器数据流进行提取
  opendal::ReaderStream stream(std::move(reader));
  stream >> res2; // res2 == "abc"
  // 输出最终存储的结果(字符串形式)
  std::cout<<res2<<std::endl;
}

写在最后

本文的写作灵感源自于我提交的 Issue(有 Apache 项目的参与经历是很好的事情,或许这能够成为我未来许多工作的良好契机)。

img

感谢 nosql-cn.org 的老师(特别感谢 @bitstring 和 @_Alex 两位老师的宽容),感谢漩涡老师与尚卓燃同志,感谢中国 PG 分会魏波、王其达老师,感谢开放原子开源基金会张凯老师和我的本科生导师袁国铭主任。

期待将来成为一流的开源科学家,建成国内一流的开源社区!

请前往 登录/注册 即可发表您的看法…