Hello Florian,
thanks for your answers. Here is some feedback and wild suggestions about the doc. "hope it helps"
The documentation has currently 2 parts called "Users guide" and "Developers guide". The first has materials for researchers, architects, packagers and application developpers. The second is for scalaris contributors (coding implementors and researchers).
I "externaly" suggest to have more parts each dedicated to a "work/hack/use" case (research being also a case):
- Introduction: scalaris is a powerfull DBMS, backed by tons of research, has transactions, wikipedia example, replication and data locality, flexible storage backend, links to slides.
- For researchers. Scientific and academic view. Topics, concepts, papers, professors, students, thesis, results. Thinks like gossip, chord, vivaldi.
- For scalaris developpers. How/where all is implemented. Design choices. Contributor community (website, source code, issue tracker) and coding guidelines.
- For packagers (say Linux/BSD distros). How to download, build and test the builds. How to report issues.
- For datacenter sysops. Some nice use case with 3 data centers (from wiki example?). Some information about network topology, bandwidth and latency, switching failover, routing(firewalling), nodes distribution in all 3 places and installation of the scalaris packages and their configuration files. How to monitor the distributed cluster's activity. How to backup and restore if suitable storage backend+use.
- For application architects. How to size the cluster, tune replication, data locality, uses of transactions or simple read/write.
- For application developpers. ClientS-ServerS connections. The client API and its guidelines. code snippets.
The idea is to make each profile efficient with scalaris and not lost in other's issues. (of course everybody can read all, curiosity is great).
I think my questions about (simple)high level use case fall in the two last parts. (which node(s)/IP/port to connect to? which client module?)
For example, here is a memo I wrote myself about playing with hanoidb:
{ok, Tree} = hanoidb:open("dadb.hanoidb").
ok = hanoidb:put(Tree, <<"key1">>, <<"val1">>).
ok = hanoidb:put(Tree, <<"key2">>, <<"val2">>).
{ok,<<"val1">>} = hanoidb:get(Tree, <<"key1">>).
{ok,<<"val2">>} = hanoidb:get(Tree, <<"key2">>).
ok = hanoidb:close(Tree).
% also:
ok = hanoidb:delete(Tree, <<"key1">>),
not_found = hanoidb:get(Tree, <<"key1">>)
% key expiry:
ok = hanoidb:put(Tree, <<"foo">>, <<"bar">>, 2), % 2 sec
{ok, <<"bar">>} = hanoidb:get(Tree, <<"foo">>),
ok = timer:sleep(3000), % 3000 ms
not_found = hanoidb:get(Tree, <<"foo">>)
I think It is an easy way to get "hands on" a neat software project (beginning with simple "how to" from the existing manual). Then (new?) contributors can write more sophisticated materials.
I hope this makes sense.
Pierre M.