Menu

OpenDAL Overview

Relevant source files

This document provides a high-level introduction to Apache OpenDAL™, its core architecture, and fundamental concepts. It covers the overall system design, main components, and how they work together to provide unified data access across diverse storage services.

For detailed implementation guides of specific storage services, see Storage Services. For language-specific usage patterns, see Language Bindings. For command-line tools and applications built on OpenDAL, see Applications and Tools.

What is OpenDAL

Apache OpenDAL™ (/ˈoʊ.pən.dæl/, pronounced "OH-puhn-dal") is an Open Data Access Layer that enables seamless interaction with diverse storage services through a unified API. OpenDAL's development is guided by its vision of One Layer, All Storage and core principles of Open Community, Solid Foundation, Fast Access, Object Storage First, and Extensible Architecture.

OpenDAL abstracts away the complexity of working with different storage backends by providing a consistent interface that works across cloud object storage, file systems, databases, key-value stores, and more. Whether you're accessing AWS S3, local filesystem, Redis, or any of the 40+ supported services, the API remains the same.

Sources: README.md1-9 core/Cargo.toml20 core/README.md1-15

System Architecture

OpenDAL follows a layered architecture with the Rust core at the center, providing unified access through the Operator API to various storage services, with extensive language bindings and applications built on top.

Sources: README.md13-152 core/src/services/mod.rs18-207 core/Cargo.toml49-217

Core Components

The OpenDAL core consists of three primary components that work together to provide the unified data access layer: the Operator API, Storage Services, and the Layer System.

Operator - The Unified API

The Operator is OpenDAL's main entry point that provides a consistent interface for all storage operations. It abstracts the underlying storage implementation and provides both asynchronous and blocking APIs.

Sources: core/src/types/operator/builder.rs25-71 core/src/types/operator/builder.rs127-133 core/src/types/operator/builder.rs163-295

Storage Services and Schemes

OpenDAL supports diverse storage services through a unified Scheme enum and service implementation pattern. Each service implements the Access trait to provide consistent behavior.

Sources: core/src/types/scheme.rs25-171 core/src/types/scheme.rs194-307 core/src/services/mod.rs18-207

Layer System

OpenDAL's layer system provides cross-cutting concerns like retry logic, logging, metrics, and error handling. Layers wrap the core Access implementation to add functionality without modifying the underlying storage logic.

Layer TypeExamplesPurpose
ObservabilityLoggingLayer, MetricsLayer, TracingLayerMonitoring and debugging
ReliabilityRetryLayer, TimeoutLayer, ErrorContextLayerError handling and resilience
PerformanceConcurrentLimitLayer, ThrottleLayerResource management
EnhancementMimeGuessLayer, CompleteLayerFeature augmentation

Sources: core/README.md101-159 core/Cargo.toml84-109

Supported Storage Services

OpenDAL provides a comprehensive ecosystem of storage service support through feature flags. Each service is implemented as an optional feature to minimize binary size and compilation dependencies.

Service CategoryImplementation PatternExample Services
Cloud Object StorageHTTP-based with authenticationservices-s3, services-azblob, services-gcs
File SystemsNative protocol implementationsservices-fs, services-hdfs, services-sftp
Key-Value StoresClient library integrationsservices-redis, services-etcd, services-rocksdb
DatabasesSQL/NoSQL protocol adaptersservices-postgresql, services-mysql, services-mongodb

The service feature flags in Cargo.toml enable selective compilation:

Sources: core/Cargo.toml111-217 core/src/services/mod.rs22-204 README.md153-227

Language Bindings Ecosystem

OpenDAL provides native bindings for multiple programming languages, each offering idiomatic APIs while maintaining functional consistency with the Rust core.

Sources: README.md13-82 bindings/nodejs/package.json1-99 bindings/java/pom.xml33-35

Key Design Principles

OpenDAL's architecture embodies several key design principles that guide its implementation:

Unified API Surface: All storage operations use the same method signatures regardless of the underlying storage service. Whether reading from S3 or a local filesystem, the API is op.read("path").await.

Zero-Cost Abstractions: The layer system and builder pattern use Rust's type system to eliminate runtime overhead. Layers are composed at compile time through static dispatch.

Feature-Based Compilation: Storage services are gated behind feature flags, allowing applications to include only the services they need and minimize binary size.

Object Storage First: The API design prioritizes object storage semantics (immutable objects, eventual consistency) while providing compatibility layers for other storage paradigms.

Extensible Architecture: The Access trait and layer system provide clear extension points for adding new storage services and cross-cutting functionality.

Sources: core/src/docs/upgrade.md1-9 core/Cargo.toml49-53 README.md8-10