FabricTableService
Distributed database on Service Fabric which uses ESENT as the storage engine
Install / Use
/learn @ReubenBond/FabricTableServiceREADME
#Service Fabric Table Service An ESENT-based database on Service Fabric. Demonstrates how to write a distributed, reliable database which uses Service Fabric for replication.
The ReliableTable<TKey, TValue> class can take part in transactions along with Service Fabric's existing IReliableDictionary & IReliableQueue providers.
Suggestions welcome via Twitter: @ReubenBond or GH issues :)
Example:
In your StatefulService's RunAsync method, obtain a reference to a table:
var journal = await this.StateManager.GetOrAddAsync<ReliableTable<string, byte[]>>("journal");
Then, access the table from one of your service's methods like so
public async Task Insert(string key, string partition, byte[] value)
{
using (var tx = this.StateManager.CreateTransaction())
{
journal.SetValue(tx, key, value);
await tx.CommitAsync();
}
}
Ideas for improvement:
- Use a wholly managed database to avoid calls into native code.
- Alternatively: chunkify the marshalling via a native library.
- Use ProtoBuf for serialization of operations, instead of manual binary serialization.
- Profile & improve performance.
For a higher performance database, implement the IStateProvider2 interface manually and replicate the database journal instead of the application-level operations (is that possible with ESENT?). This implementation uses the TransactionalReplicator from Service Fabric, which maintains its own transaction log, ESENT also maintains a transaction log internally, so there is a duplication of effort.
I give zero guarantees about any of this.
Credits to ManagedEsent which this project borrows from and leverages.
Related Skills
feishu-drive
349.9k|
things-mac
349.9kManage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database)
clawhub
349.9kUse the ClawHub CLI to search, install, update, and publish agent skills from clawhub.com
postkit
PostgreSQL-native identity, configuration, metering, and job queues. SQL functions that work with any language or driver
