Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 81 lines (54 sloc) 2.834 kB
e7e4c1d @sdether updated readme with Rx status
authored
1 Firkin 0.2
802b833 @sdether some cleanup
authored
2 ==========
e7e4c1d @sdether updated readme with Rx status
authored
3 An embeddable Key/Value store for .NET and mono using immutable log journalling and in-memory hashing as its storage back end. Inspired by the Basho BitCask paper located at http://downloads.basho.com/papers/bitcask-intro.pdf. Supports IObservable interface from the Rx framework with Firkin.Reactive, allowing changes to be tailed.
ea64f4f @sdether initial import
authored
4
5 Uses
6 ====
7 - Quickly store and retrieve binary data by unique key
8
9 Installation
10 ============
11 Currently using the driver in the GAC is not supported. Simply copy the driver assembly somewhere and reference it in your project. It should be deployed in your application's bin directory. It is not necessary to reference the test assemblies.
12
e7e4c1d @sdether updated readme with Rx status
authored
13 Dependencies
14 ============
15 Firkin.Reactive, Firkin.Reactive.Test and Firkin.Test.Perf require the Rx Framework to be installed (http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx). Firkin itself does not require Rx.
16
ea64f4f @sdether initial import
authored
17 Patches
18 =======
1cde70f @sdether made perf test app.config aware for easier benchmarking
authored
19 Patches are welcome and will likely be accepted. By submitting a patch you assign the copyright to me, Arne F. Claassen. This is necessary to simplify the number of copyright holders should it become necessary that the copyright need to be re-assigned or the code re-licensed. The code will always be available under an OSI approved license.
ea64f4f @sdether initial import
authored
20
21 Roadmap
22 =======
71155da @sdether more tests, updated readme
authored
23 - Create ``FirkinIndex`` to create secondary indicies into a ``FirkinHash``
24 - Add size (total and active) to ``FirkinHash`` to provide a metric to base merge use on
25 - Put ``FirkinHash`` through some proper benchmarking and concurrency testing
ea64f4f @sdether initial import
authored
26
27 Usage
28 =====
29
802b833 @sdether some cleanup
authored
30 Usage of base store, ``FirkinHash<TKey>``
ea64f4f @sdether initial import
authored
31
32 ::
33
34 // create a new store
35 var store = new FirkinHash<string>(storageDirectory);
36
37 // store a value
38 store.Put(key, valueStream, valueStreamLength);
1cde70f @sdether made perf test app.config aware for easier benchmarking
authored
39
40 // iterate over all files (won't block other reads or writes)
41 foreach(var pair in store) {
42 var key = pair.Key;
43 var valueStream = pair.Value;
44 }
ea64f4f @sdether initial import
authored
45
72440fa Was missing retrieval example
Arne Claassen authored
46 // get a value
47 var valueStream = store.Get(key);
48
ea64f4f @sdether initial import
authored
49 // remove a value
50 var removed = store.Delete(key);
51
52 // get store size
53 var count = store.Count;
54
55 // merge log files to remove overwritten and deleted entries
56 store.Merge(); // does not block reads or writes (mostly)
71155da @sdether more tests, updated readme
authored
57
58 Or use ``FirkinDictionary<TKey,TValue>`` like any ``IDictionary``
59
60 ::
61
62 // create new disk bound dictionary
63 var dictionary = new FirkinDictionary<string,string>(storageDirectory);
ea64f4f @sdether initial import
authored
64
802b833 @sdether some cleanup
authored
65 Some unscientific perf data
66 ===========================
67 The write/random query test of all users from the StackOverflow dump included in the project has shown the following single threaded numbers:
68
69 41k writes/second
993b7af @sdether * Created FirkinStream, a chunked view into a filestream, allowing pa…
authored
70
802b833 @sdether some cleanup
authored
71 80k queries/second
e7e4c1d @sdether updated readme with Rx status
authored
72
73 Using ObservableFirkinHash currently adds a ~20% perf penalty for writes, since it checks the index to determine whether the action is a add or change.
802b833 @sdether some cleanup
authored
74
75
ea64f4f @sdether initial import
authored
76 Contributors
77 ============
78 - Arne F. Claassen (sdether)
79
80
Something went wrong with that request. Please try again.