
OpenDAL 项目简介:一个通用的存储接口方案
2025-04-03 发布57 浏览 · 0 点赞 · 0 收藏
务正学以言,无曲学以阿世!
——《史记》
感谢漩涡老师的指教与 NoSQL-CN.org 群的群友,在接下来的工作中我们一定要尽力而为地去少说废话多做事情,要为成为一流的开源科学家而努力。
(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
案例程序解读
#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 项目的参与经历是很好的事情,或许这能够成为我未来许多工作的良好契机)。
感谢 nosql-cn.org 的老师(特别感谢 @bitstring 和 @_Alex 两位老师的宽容),感谢漩涡老师与尚卓燃同志,感谢中国 PG 分会魏波、王其达老师,感谢开放原子开源基金会张凯老师和我的本科生导师袁国铭主任。
期待将来成为一流的开源科学家,建成国内一流的开源社区!
请前往 登录/注册 即可发表您的看法…