plementation of the HAMT data structure to fit our
needs for a confluently persistent map, and used the
map to implement a confluently persistent directed
graph. We then exposed these data structures, with
additional operations such as merging, differencing
and forking, through an API of a web service than can
be accessed by any web-enabled front-end or through
a library binding.
This prototype can be improved in many ways;
the main focus should be on increasing the system’s
speed and making it more storage-efficient. One op-
tion is experimenting with different implementations
for the core versioned map data structures to iden-
tify the fastest and most efficient implementation. For
example, instead of an HAMT, a fully persistent B-
tree (Brodal et al., 2012) or Stratified B-Tree (Twigg
et al., 2011) could be considered. Another important
task is reducing the latency of the system—this can
be tackled by looking into various ways of optimizing
the library binding, such as using sockets, better local
caching and sending batch requests.
On the front-end, the system can be improved by
adding more data structures; adding better security by
using HTTP(s) and encryption; and improving front-
end performance by maintaining the front-end data in
a data structure similar to the back-end.
ACKNOWLEDGEMENTS
The financial assistance of the National Research
Foundation (NRF) towards this research is hereby ac-
knowledged. Opinions expressed and conclusions ar-
rived at, are those of the author and are not neces-
sarily to be attributed to the NRF. The financial and
spatial assistance of the Naspers Media Lab is hereby
acknowledged.
REFERENCES
Bagwell, P. (2001). Ideal hash trees. Technical report.
http://infoscience.epfl.ch/record/64398/files/idealhas
htrees.pdf [Accessed: 2015-11-07].
Bhattacherjee, S., Chavan, A., Huang, S., Deshpande, A.,
and Parameswaran, A. (2015). Principles of dataset
versioning: Exploring the recreation/storage tradeoff.
In 41st International Conference on Very Large Data
Bases, volume 8, pages 1346–1357, Kohala Coast,
Hawaii.
Bitbucket (2015). Git and mercurial code management for
your team. https://bitbucket.org/ [Accessed: 2015-08-
29].
Brodal, G. S., Sioutas, S., Tsakalidis, K., and Tsichlas, K.
(2012). Fully persistent B-trees. In Proc. 23rd An-
nual ACM-SIAM Symposium on Discrete Algorithms,
pages 602–614.
Clojure (2015). Clojure Source Code of the Persistent-
HashMap.java. https://github.com/clojure/ clo-
jure/blob/master/src/jvm/clojure/lang/Persistent
HashMap.java [Accessed: 2015-11-09].
County of Denver (2015). Denver Open Data Catalog:
Checkbook. http://data.denvergov.org/dataset/city-
and -county-of-denver-checkbook [Accessed: 2015-
10-01].
Driscoll, J. R., Sarnak, N., Sleator, D. D., and Tarjan, R. E.
(1986). Making data structures persistent. In Pro-
ceedings of the Eighteenth Annual ACM Symposium
on Theory of Computing, pages 109–121. ACM.
Facebook (2015). Flux. https://facebook.github
.io/flux/docs/overview.html [Accessed: 2015-05-19].
Fette, I. and Melnikov, A. (2011). The WebSocket
Protocol. RFC 6455 (The WebSocket Protocol).
http://tools.ietf.org/html/rfc6455 [Accessed: 2015-
08-01].
Fielding, R. T. (2000). Architectural styles and the design
of network-based software architectures. PhD thesis,
University of California, Irvine.
GitHub (2015). Github – where software is built.
https://github.com/ [Accessed: 2015-08-29].
Google (2015). Google drive – cloud storage and
file backup for photos, docs and more. https://
www.google.com/drive/ [Accessed: 2015-08-29].
Google (2015). LevelDB. http://leveldb.org/ [Accessed:
2015-05-20].
Kantor, I. (2015). Objects JavaScript Tutorial. http://java
script.info/tutorial/objects [Accessed: 2015-08-30].
Kaplan, H. (1995). Persistent data structures. In Mehta, D.
and Sahni, S., editors, Handbook of Data Structures
and Applications. CRC Press.
le Roux, P. B. (2015). DSaaS: A Cloud Service for
Persistent Data Structures. Honours project report,
Stellenbosch University Computer Science Division.
http://cs.sun.ac.za/∼kroon/dsaas/docs/dsaas
report.pdf
[Accessed: 2016-02-15].
Marsland, T. A. (1986). A review of game-tree pruning.
ICCA Journal, 9(1):3–19.
Membrey, P., Plugge, E., and Hawkins, D. (2010). The
Definitive Guide to MongoDB: the NoSQL Database
for Cloud and Desktop Computing. Apress.
Ogden, M. (2015a). maxogden/dat-core. https://github
.com/maxogden/dat-core [Accessed: 2015-08-13].
Ogden, M. (2015b). Versioned Data, Collaborated.
http://dat-data.com/ [Accessed: 2015-08-13].
P´erez, F. and Granger, B. E. (2007). IPython: a system for
interactive scientific computing. Computing in Sci-
ence and Engineering, 9(3):21–29.
Pollock, R. (2015). Git and GitHub for data.
http://blog.okfn.org/2013/07/02/git-and-github-
for-data/ [Accessed: 2015-08-30].
Python (2015). Built-in Types – Python 2.7.10
documentation. https://docs.python.org/2/library/std
types.html♯mapping-types-dict [Accessed: 2015-08-
30].