133 个版本 (49 个重大变更)
新 0.49.1 | 2024 年 8 月 19 日 |
---|---|
0.48.0 | 2024 年 7 月 29 日 |
0.45.1 | 2024 年 3 月 2 日 |
0.44.0 | 2023 年 12 月 31 日 |
0.3.0 | 2022 年 3 月 25 日 |
#12 在 文件系统
每月下载量 58,516
在 61 个 Crates 中使用 (39 直接使用)
3MB
60K SLoC
Apache OpenDAL™: 自由访问数据
OpenDAL 提供了一个统一的数据访问层,使用户能够无缝且高效地从各种存储服务中检索数据。
有用链接
服务
OpenDAL 支持以下存储 服务
类型 | 服务 |
---|---|
标准存储协议 | ftp http sftp webdav |
对象存储服务 | azblob cos gcs obs oss s3 b2 openstack_swift upyun vercel_blob |
文件存储服务 | fs alluxio azdls azfile chainsafe compfs dbfs gridfs hdfs hdfs_native ipfs webhdfs |
消费者云存储服务 | aliyun_drive gdrive onedrive dropbox icloud koofr pcloud seafile yandex_disk |
键值存储服务 | cacache cloudflare_kv dashmap 内存 etcd foundationdb persy redis rocksdb sled redb tikv atomicserver |
数据库存储服务 | d1 mongodb mysql postgresql sqlite surrealdb |
缓存存储服务 | ghac memcached mini_moka moka vercel_artifacts |
基于 Git 的存储服务 | huggingface |
Layers
OpenDAL 支持以下存储 layers 来扩展行为
名称 | 依赖 | 描述 |
---|---|---|
AsyncBacktraceLayer |
async-backtrace | 为底层服务添加高效的异步函数逻辑 '堆栈' 追踪。 |
AwaitTreeLayer |
await-tree | 为基于 actor 的应用程序向底层服务添加 await-tree。 |
BlockingLayer |
tokio | 为非阻塞服务添加阻塞 API 支持。 |
ChaosLayer |
rand | 为稳健性测试向底层服务注入混乱。 |
ConcurrentLimitLayer |
tokio | 添加并发请求限制。 |
DtraceLayer |
probe | 在 Linux 上支持用户静态定义的跟踪(简称 USDT)。 |
LoggingLayer |
log | 为每个操作添加日志。 |
MetricsLayer |
metrics | 为每个操作添加度量。 |
MimeGuessLayer |
mime_guess | 根据操作路径中的文件扩展名自动添加 Content-Type 。 |
FastraceLayer |
fastrace | 为每个操作添加 fastrace。 |
OtelTraceLayer |
opentelemetry::trace | 为每个操作添加 opentelemetry::trace。 |
PrometheusClientLayer |
prometheus_client | 为每个操作添加 Prometheus 度量。 |
PrometheusLayer |
prometheus | 为每个操作添加 Prometheus 度量。 |
RetryLayer |
backon | 为暂时失败的操作添加重试。 |
ThrottleLayer |
governor | 向底层服务添加带宽速率限制器。 |
TimeoutLayer |
tokio | 为每个操作添加超时,以避免缓慢或意外的挂起操作。 |
TracingLayer |
tracing | 为每个操作添加跟踪。 |
快速入门
use opendal::Result;
use opendal::layers::LoggingLayer;
use opendal::services;
use opendal::Operator;
#[tokio::main]
async fn main() -> Result<()> {
// Pick a builder and configure it.
let mut builder = services::S3::default();
builder.bucket("test");
// Init an operator
let op = Operator::new(builder)?
// Init with logging layer enabled.
.layer(LoggingLayer::default())
.finish();
// Write data
op.write("hello.txt", "Hello, World!").await?;
// Read data
let bs = op.read("hello.txt").await?;
// Fetch metadata
let meta = op.stat("hello.txt").await?;
let mode = meta.mode();
let length = meta.content_length();
// Delete
op.delete("hello.txt").await?;
Ok(())
}
示例
名称 | 描述 |
---|---|
基本 | 展示如何使用opendal操作存储服务。 |
并发上传 | 展示如何并发上传到存储服务。 |
分片上传 | 展示如何对存储服务执行分片上传。 |
贡献
查看CONTRIBUTING指南以获取有关开始贡献此项目的更多详细信息。
品牌
第一个和最突出的提及必须使用全称:任何个人使用(网页、手册、幻灯片等)都必须使用Apache OpenDAL™的全称。根据上下文和写作风格,您应足够频繁地使用全称,以确保读者清楚地了解OpenDAL项目和OpenDAL软件产品与ASF作为母组织之间的关联。
有关更多详细信息,请参阅Apache产品名称使用指南。
许可证和商标
基于Apache License,版本2.0:http://www.apache.org/licenses/LICENSE-2.0
Apache OpenDAL、OpenDAL和Apache是Apache软件基金会的注册商标或商标。
依赖项
~9–61MB
~1M SLoC