This is the Riak adapter for sumo_db.
These are some implementation notes you should know:
- This Riak adapter is implemented using Riak Data Types.
- The modeled sumo docs/entities are mapped to Riak Maps.
- This Riak adapter allows nested docs/entities, ang again, those entities are treat them as Riak Maps too.
- Bulk operations such as:
delete_all/1
,delete_by/2
,find_all/1,4
andfind_by/2,4,5
, they were optimized using streaming. Records are streamed in chunks (using Riak 2i to stream keys first), and then the current operation is applied. E.g: supposing we are executing afind_all/1
, all keys are fetched first, and then the values corresponding to each key are fetched (remember that fetch a doc by the key is the fastest way, O(1)). This allows better memory and cpu efficiency. - Query functions were implemented using Riak Search on Data Types, to get better performance and flexibility.
To install/upgrade Riak please follow the instructions in this link: Installing and Upgrading Riak.
Due to the fact that Riak comes with default configuration, we need to
change some parameters required by sumo_db
.
Riak has a main configuration file riak.conf
, which you can find into
your installation path $YOUR_INSTALL_PATH/etc/riak.conf
.
Note: For more information check this link Configuration Files.
First parameter to change is the default Riak backend from Bitcask to LevelDB. This change also enables the use of Riak Secondary Indexes.
storage_backend = leveldb
Then proceed to enable search capabilities:
search = on
Note: For more information check this link Riak Search Settings.
First, let's create and activate a bucket type simply called maps that is set up to store Riak maps:
Because sumo_db_riak
adapter is implemented using Riak Data Types, and docs/entities
are mapped to Riak Maps, we need to create a Riak Bucket Type
for those docs that will be stored.
Taking as example our tests, let's call the bucket type maps
.
$ riak-admin bucket-type create maps '{"props":{"datatype":"map"}}'
$ riak-admin bucket-type activate maps
Now, let's create a search index called sumo_test_index
using the default
schema:
$ curl -XPUT $RIAK_HOST/search/index/sumo_test_index \
-H 'Content-Type: application/json' \
-d '{"schema":"_yz_default"}'
With our index created, we can associate our new sumo_test_index
index with
our maps
bucket type:
$ riak-admin bucket-type update maps '{"props":{"search_index":"sumo_test_index"}}'
Now we can start working with Riak from sumo_db
.
Note: For more information check this link Riak Data Types and Search.
To start use sumo_db
with this Riak adapter sumo_db_riak
is pretty easy, you only has to
follow these steps:
- Add
sumo_db_riak
as dependencies in your project.
{deps, [
{sumo_db_riak, "0.1.0"}
]}.
-
You need at least one doc/entity, let's use sumo_test_people_riak as example.
-
Provide the configuration file, e.g.: test.config.
-
Now you can run your app and start using
sumo
from there.
$ rebar3 shell --config test/test.config
Now you're ready to play with sumo
and Riak:
> sumo:find_all(people).
[]
If you find any bugs or have a problem while using this library, please [open an issue][issue] in this repo (or a pull request :)).