SpecialK is...
- a decentralized, distributed storage mechanism
- a pattern language for building decentralized, distributed applications
See SpecialK/KVDB – A Pattern Language for the Web for further explanation.
To work with SpecialK you will need:
- MongoDB, version 2.6.12 (also tested with version 2.4.14)
- available at https://www.mongodb.com/download-center (go to "Previous Releases")
- Erlang, version 15B03 (also tested with version R14B04) (required to run RabbitMQ)
- RabbitMQ, version 3.0.2 (also tested with version 2.7.1)
- available at http://www.rabbitmq.com/download.html (go to "Older Versions")
- Java Development Kit (JDK), version 7
- available at http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
- alternatively, the OpenJDK can be installed using most common package managers.
- alternatively, Azul's Zulu OpenJDK is available at https://www.azul.com/products/zulu/
- sbt
- available at http://www.scala-sbt.org/
After installing these dependencies, you can clone the SpecialK repo and run tests:
$ git clone https://github.com/synereo/specialk.git
...
$ cd specialk
$ sbt test
NOTE: In order to run these tests, MongoDB and RabbitMQ must be running.
Short answer: it may be possible!
In the case of MongoDB, SpecialK currently uses version 2.6.4 of Casbah. According to the MongoDB compatibility chart, this version of Casbah is only supported for use with MongoDB 2.4.x, though we are successfully using it with version 2.6.x.
In the case of Erlang & RabbitMQ, we encourage all those motivated to try newer versions, and welcome reports of successes or failures!
In the case of the JDK, we have experienced issues with version 8 related to our use of prolog4j. See SOC-101 for more information.
Currently, SpecialK is intended to be used in conjunction with the Agent Service and GLoSEval.
However, it can also be used as a standalone key-value store.
The following files provide an example of setting up a single node to store String
values in MongoDB.
This set of tests may provide additional insight into how such a node may be used, including retrieving values using the Prolog-based query system:
A more complex usage example involving multiple nodes can be found here.
We welcome reports of any issues on the issue tracker.
We are also using JIRA to track issues for this project and the rest of the Synereo Platform: https://synereo.atlassian.net/projects/SOC/issues
- Lucius Gregory Meredith's Agents and Agency in the Internet presentation at the Scala Bay Meetup in Fall 2013.
- Synereo Development Workshops hosted on our YouTube Channel