Object-store durability
Keep the complete database under one bucket prefix instead of operating a separate storage fleet.
Store durable key-value data directly in object storage. Readers scale independently; compaction runs on separate compute.
IsleDB is an embedded Go library. Your compute can come and go while the database stays durable, shared, and available through the object store you already operate.
Keep the complete database under one bucket prefix instead of operating a separate storage fleet.
Add reader processes for lookups, scans, snapshots, and change consumption without moving the dataset.
Run writers, readers, and maintenance as separate services, scheduled jobs, or ephemeral workers.
One writer commits updates to shared object storage. Any number of readers open the same database. Maintenance runs independently on the compute you choose.
Commits key-value updates.
Holds durable shared database state.
Scale without moving the data.
A typical embedded LSM engine compacts on the same machine that serves application traffic. IsleDB lets a dedicated maintenance process perform that work through shared object storage.
m, err := db.OpenMaintenance(ctx,
isledb.DefaultMaintenanceOptions(),
)
if err != nil { return err }
runErr := m.Run(ctx)
closeCtx, cancel := context.WithTimeout(
context.Background(), 30*time.Second,
)
defer cancel()
closeErr := m.Close(closeCtx)
return errors.Join(runErr, closeErr)
Reads, writes, and background compaction compete for the same local resources.
The maintenance worker can run elsewhere while application processes continue serving traffic.
Open a database for one bucket prefix. Flush writer updates when they should become visible, refresh readers when immediate freshness matters, and run maintenance where it fits your deployment.
// Open a database in one object-store prefix.
db, err := isledb.Open(ctx,
"s3://my-bucket?region=us-east-1",
isledb.DBOptions{Prefix: "prod/users"},
)
if err != nil { return err }
defer db.Close()
w, err := db.OpenWriter(ctx,
isledb.DefaultWriterOptions(),
)
if err != nil { return err }
defer w.Close(ctx)
if err := w.Put(ctx, []byte("user:42"), profile); err != nil {
return err
}
if err := w.Flush(ctx); err != nil { return err }
r, err := db.OpenReader(ctx,
isledb.DefaultReaderOpenOptions("./cache"),
)
if err != nil { return err }
defer r.Close()
value, found, err := r.Get(ctx, []byte("user:42"))
Identify the changed key and operation without storing another copy of each PUT value.
Include committed PUT values when consumers need to reconstruct historical mutations.
Each consumer chooses a starting point, reads an ordered page with count and byte limits, saves its position, and resumes later.
Deploy on AWS, Google Cloud, Azure, private S3-compatible storage, or local files without changing how your application writes, reads, scans, or consumes changes.
Keep the database under one S3 bucket prefix or use an S3-compatible service.
Use Google Cloud Storage for durable KV data shared by many readers.
Store the database in an Azure Blob container with the same Go API.
Develop locally or use an S3-compatible private cloud with one data model.
IsleDB favors large, durable, append-shaped workloads where shared storage and independently scalable compute matter more than single-digit millisecond latency.
IsleDB is an embedded Go library that keeps durable database state in your bucket.
It retrieves values by key while using an object or blob store as the durable storage layer.
Yes. It runs inside Go applications and provides native writer, reader, change-feed, and maintenance APIs.
Yes. A maintenance process can perform compaction on separate compute against the shared database.
Yes. Choose the matching bucket URL and credentials while keeping the same database API.
Choose a transactional serving database for sub-10ms latency, joins, or multi-key transactions.
Write your first key, add readers when you need them, and run compaction wherever it fits.