StephenCleary / ArcDb

An ACID .NET relational database
MIT License
17 stars 0 forks source link

ArcDb

An ACID .NET relational database. More specifically, ArcDb is a disk-based, row-oriented OLTP storage engine.

Goals

Use Cases

ArcDb is intended to be embedded within a .NET application. While you could embed it within an ASP.NET application to create a more complete or traditional RDBMS, that is not the core use case of this library.

Goals

Non-Goals

Sub-Goal: Avoiding Pitfalls

There are some common pitfalls when working with databases which ArcDb is attempting to avoid. Hopefully we won't create our own common pitfalls along the way...

Terminology

Technology

See the docs folder for details. To summarize:

Transactions

MVCC (Multi-Version Concurrency Control)

ArcDb implements snapshot semantics by a kind of MVCC, but applied to database folios rather than end-user records:

WALs are merged into the Main file by a maintenance process. WALs can only be merged if they are valid and if all Read Transactions previous to that WAL have completed.

Side effects:

This is similar to copy-on-write implementations, but with ArcDb the copies always go into the WAL instead of the Main database file. It's also similar to multicomponent LSM trees and how they depend on compaction, but ArcDb uses B-trees instead of LSM trees; ArcDb does use WAL-scoped bloom filters in the same way as LSMs.

Using copy-on-write B-trees with WALs while insisting on full transaction isolation has an interesing result: ArcDb completely fails the RUM conjecture. Mutable B-Trees optimize for reads; immutable LSMs optimize for writes; and relaxing isolation optimizes for memory. ArcDb optimizes for none of these. As such, it may be useful as a performance baseline for database systems that do optimize for one of those concerns.

Limitations

Comparison with SQLite

SQLite is currently the most common embedded relational database. ArcDb has several design differences with the out-of-the-box SQLite experience: