Distributed transactional key-value database with ACID guarantees, multi-language bindings (Python, Go, Java, Ruby, C), and layered data model abstractions.
pkg:github/apple/foundationdb@7.4.x
npx @tessl/cli install tessl/pypi-foundationdb@7.4.0FoundationDB is a distributed, transactional key-value database designed to handle large volumes of structured data across clusters of commodity servers. It provides ACID transactions with strict serializability, automatic data distribution and rebalancing, and fault tolerance through replication.
import fdb
# Select API version (required first)
fdb.api_version(740)
# Open database connection
db = fdb.open()
# Use transactional decorator for automatic retry
@fdb.transactional
def set_value(tr, key, value):
tr[key] = value
return tr[key]
# Execute transaction
result = set_value(db, b'hello', b'world')See Quick Start Guide for detailed setup instructions.
pip install foundationdbgo get github.com/apple/foundationdb/bindings/gocom.apple:foundationdbgem install fdbAll operations occur within ACID transactions providing serializable isolation. Use transactional wrappers (@transactional, Transact(), run()) for automatic retry on conflicts.
Read operations return Future objects. Block explicitly to retrieve results (.wait(), .MustGet(), .join()).
import fdbimport "github.com/apple/foundationdb/bindings/go/src/fdb"import com.apple.foundationdb.*;require 'fdb'#include <foundationdb/fdb_c.h>| Operation | Python | Go | Java |
|---|---|---|---|
| Select API Version | fdb.api_version(740) | fdb.MustAPIVersion(740) | FDB.selectAPIVersion(740) |
| Open Database | fdb.open() | fdb.MustOpenDefault() | fdb.open() |
| Create Transaction | db.create_transaction() | db.CreateTransaction() | db.createTransaction() |
| Get Value | tr.get(key) | tr.Get(key) | tr.get(key) |
| Set Value | tr.set(key, value) | tr.Set(key, value) | tr.set(key, value) |
| Commit | tr.commit().wait() | tr.Commit().Get() | tr.commit().join() |
@fdb.transactional
def my_operation(tr, ...):
tr[key] = value
return resultdb.Transact(func(tr fdb.Transaction) (interface{}, error) {
tr.Set(key, value)
return result, nil
})db.run(tr -> {
tr.set(key, value);
return result;
});| Feature | Description | Reference |
|---|---|---|
| Key-Value Operations | Read/write individual keys and ranges | API Reference |
| Atomic Operations | Conflict-free mutations (add, max, min, etc.) | API Reference |
| Tuple Layer | Type-safe structured key encoding | Tuple Layer |
| Subspace Layer | Namespace isolation with prefixing | Subspace Layer |
| Directory Layer | Hierarchical directory management | Directory Layer |
| Multi-Tenancy | Isolated tenant namespaces | API Reference |
| Watches | Key change notifications | API Reference |
| Versionstamps | Transaction version embedding | API Reference |
| Snapshot Reads | Non-conflicting reads | API Reference |
FoundationDB uses error codes for failures. Common codes:
1007 - transaction_too_old: Transaction exceeded maximum duration1020 - not_committed: Transaction conflicted1021 - commit_unknown_result: Commit status unknownUse transactional wrappers for automatic retry on retryable errors.
@transactional, Transact(), run() over manual management