EventflowDB
EventflowDB is a database designed with Event Sourcing in mind.
Features
- Stream based, immutable event storage and retrieval
- Global stream for projections
- gRPC API
- HTTP API
- Go client driver
- TLS for both the gRPC and HTTP server
Deployment
The easiest way to get up and running is via Docker containers. To use this you need to install Docker:
Docker installation instructions
Once you've installed Docker, you can execute the following commands to start an EventflowDB instance with a persistent, named volume:
docker volume create eventflowdb
docker run -d -v eventflowdb:/var/lib/eventflowdb/data -p 6543:6543 -p 16543:16543 ghcr.io/eventflowdb/eventflowdb:v0.14.1
Configuration
The following environment variables can be used to alter the configuration:
Environment variable |
Flag |
Default |
Description |
GRPC_ADDR |
--grpc-addr |
:6543 |
The address that the gRPC server uses to listen on |
HTTP_ADDR |
--http-addr |
:16543 |
The address that the HTTP server uses to listen on |
DATA |
--data |
./data |
The folder in which persisted data resides |
TLS |
--tls |
false |
Whether or not to use TLS |
CERT |
--cert |
cert.pem |
The location of the TLS certificate file |
KEY |
--key |
key.pem |
The location of the TLS key file |
ENABLE_PROM |
--enable-prom |
true |
Whether or not the Prometheus endpoint should be enabled |
Usage
EventflowDB is using gRPC with Protobuf as its main method of transport and encoding. The api.proto file is the source of truth for the API.
API Specification:
service EventStore {
rpc AppendToStream(AppendToStreamRequest) returns (AppendToStreamResponse) {}
rpc GetStream(GetStreamRequest) returns (GetStreamResponse) {}
rpc GetEvent(GetEventRequest) returns (Event) {}
rpc GetEventsFromStream(GetStreamRequest) returns (GetEventsFromStreamResponse) {}
rpc ListStreams(ListStreamsRequest) returns (ListStreamsResponse) {}
rpc StreamCount(StreamCountRequest) returns (StreamCountResponse) {}
rpc EventCount(EventCountRequest) returns (EventCountResponse) {}
rpc StreamSequence(StreamSequenceRequest) returns (StreamSequenceResponse) {}
rpc Version(VersionRequest) returns (VersionResponse) {}
}
Versioning
We use SemVer for versioning. For the versions available, see the tags on this repository.
Roadmap
The features on the roadmap in no particular order:
- Authentication
- Client libraries
- Command Line Interface
These may change at any point in the future and will be deleted once they're either implemented or if they won't.
Contributions
Contributions are most welcome. If you are unsure if a certain feature will benefit the project, please open up an issue.
Authors
License
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE.md file for details