All Projects → ReubenBond → FabricTableService

ReubenBond / FabricTableService

Licence: MIT License
Distributed database on Service Fabric which uses ESENT as the storage engine

Programming Languages

C#
18002 projects
powershell
5483 projects

#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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].