commit | 01f79dbb3938ceac4638752953b84a396d78c0ce | [log] [tgz] |
---|---|---|
author | Nick Vatamaniuc <vatamane@apache.org> | Wed Apr 22 12:25:31 2020 -0400 |
committer | Nick Vatamaniuc <nickva@users.noreply.github.com> | Wed Apr 22 13:16:57 2020 -0400 |
tree | 75a1e04723656f3ecc1753839aa6a7172b034410 | |
parent | b0856d711fd11efd6a0a6b7831ce1a626f933611 [diff] |
Do not commit read-only transactions This might save a round-trip to the network thread [1]. It also follows the recommendation in the C api docs [2]. [1] https://forums.foundationdb.org/t/performance-of-read-only-transactions/1998 [2] https://apple.github.io/foundationdb/api-c.html#c.fdb_transaction_commit However, it turns out in order for the watches to fire the read-only transaction still has to commit, so avoid this optimization if has_watches(Tx) is true.
This project is a NIF wrapper for the FoundationDB C API. Documentation on the main API can be found here.
This project also provides a conforming implementation of the Tuple and Directory layers.
Assuming you have installed the FoundationDB C API library, building erlfdb is as simple as:
$ make
Alternatively, adding erlfdb as a rebar dependency should Just Work ®.
Documentation for installing FoundationDB can be found here for macOS or here for Linux.
A simple example showing how to open a database and read and write keys:
Eshell V9.3.3.6 (abort with ^G) 1> Db = erlfdb:open(<<"/usr/local/etc/foundationdb/fdb.cluster">>). {erlfdb_database,#Ref<0.2859661758.3941466120.85406>} 2> ok = erlfdb:set(Db, <<"foo">>, <<"bar">>). ok 3> erlfdb:get(Db, <<"foo">>). <<"bar">> 4> erlfdb:get(Db, <<"bar">>). not_found
FoundationDB has a custom binding tester that can be used to test whether changes have broken compatibility. See the BINDING_TESTER documentation for instructions on building and running that system.