From 8ddf2e94df70707b458528a437759b96046d3e01 Mon Sep 17 00:00:00 2001
From: Franck Cuny <franck.cuny@gmail.com>
Date: Tue, 26 Nov 2013 10:36:10 -0800
Subject: Huge update.

Moved all posts from textile to markdown. Updated all the CSS and
styles. Added a new page for the resume.
---
 _posts/2009-12-13-riak-perl-and-kiokudb.textile | 155 ------------------------
 1 file changed, 155 deletions(-)
 delete mode 100644 _posts/2009-12-13-riak-perl-and-kiokudb.textile

(limited to '_posts/2009-12-13-riak-perl-and-kiokudb.textile')

diff --git a/_posts/2009-12-13-riak-perl-and-kiokudb.textile b/_posts/2009-12-13-riak-perl-and-kiokudb.textile
deleted file mode 100644
index c0a51de..0000000
--- a/_posts/2009-12-13-riak-perl-and-kiokudb.textile
+++ /dev/null
@@ -1,155 +0,0 @@
----
-layout: post
-category: perl
-title: Riak, Perl and KiokuDB
----
-
-As I was looking for a system to store documents at <a href="http://linkfluence.net">$work</a>, <a href="http://www.basho.com/Riak.html">Riak</a> was pointed to me by one of my coworkers. I'm looking for a solution of this type to store various types of documents, from HTML pages to json. I need a system that is distributed, faul tolerant, and that works with Perl.
-
-So Riak is a document based database, it's key value, no sql, REST, and in Erlang. You can read more about it <a href="http://riak.basho.com/nyc-nosql/">here</a> or watch an introduction <a href="http://vimeo.com/6973519">here</a>. Like <ahref="http://couchdb.apache.org/">CouchDB</a>, Riak provides a REST interface, so you don't have to write any Erlang code.
-
-One of the nice things with Riak it's that it let you defined the N, R and W value for each operation. This values are:
-
- * N: the number of replicas of each value to store
- * R: the number of replicas required to perform a read operation
- * W: the number of replicas needed for a write operation
-
-Riak comes with library for python ruby PHP and even javascript, but not for Perl. As all these libraries are just communicating with Riak via the REST interface, I've <a href="http://github.com/franckcuny/anyevent-riak">started to write one</a> using AnyEvent::HTTP, and <a href="http://github.com/franckcuny/kiokudb-backend-riak">also a backend for KiokuDB</a>.
-
-h3. Installing and using Riak
-
-If you interested in Riak, you can install it easily. First, you will need the Erlang VM. On debian, a simple
-
-{% highlight bash %}
-sudo aptitude install erlang
-{% endhighlight %}
-
-install everything you need. Next step is to install Riak:
-
-{% highlight bash %}
-wget http://hg.basho.com/riak/get/riak-0.6.2.tar.gz
-tar xzf riak-0.6.2.tar.gz
-cd riak
-make
-export RIAK=`pwd`
-{% endhighlight %}
-
-Now, you can start to use it with
-
-{% highlight bash %}
-./start-fresh config/riak-demo.erlenv
-{% endhighlight %}
-
-or if you want to test it in cluster mode, you can write a configuration like this:
-
-{% highlight erlang %}
-    {cluster_name, "default"}.
-    {ring_state_dir, "priv/ringstate"}.
-    {ring_creation_size, 16}.
-    {gossip_interval, 60000}.
-    {storage_backend, riak_fs_backend}.
-    {riak_fs_backend_root, "/opt/data/riak/"}.
-    {riak_cookie, riak_demo_cookie}.
-    {riak_heart_command, "(cd $RIAK; ./start-restart.sh $RIAK/config/riak-demo.erlenv)"}.
-    {riak_nodename, riakdemo}.
-    {riak_hostname, "192.168.0.11"}.
-    {riak_web_ip, "192.168.0.11"}.
-    {riak_web_port, 8098}.
-    {jiak_name, "jiak"}.
-    {riak_web_logdir, "/tmp/riak_log"}.
-{% endhighlight %}
-
-Copy this config on a second server, edit it to replace the riak_hostname and riak_nodename. On the first server, start it like show previously, then on the second, with
-
-{% highlight bash %}
-./start-join.sh config/riak-demo.erlenv 192.168.0.11
-{% endhighlight %}
-
-where the IP address it the address of the first node in your cluster.
-
-Let's check if everything works:
-
-{% highlight bash %}
-curl -X PUT -H "Content-type: application/json" \
-    http://192.168.0.11:8098/jiak/blog/lumberjaph/ \
-    -d "{\"bucket\":\"blog\",\"key\":\"lumberjaph\",\"object\":{\"title\":\"I'm a lumberjaph, and I'm ok\"},\"links\":[]}"
-
-curl -i http://192.168.0.11:8098/jiak/blog/lumberjaph/
-{% endhighlight %}
-
-will output (with the HTTP blabla)
-
-{% highlight javascript %}
-    {"object":{"title":"I'm a lumberjaph, and I'm ok"},"vclock":"a85hYGBgzGDKBVIsbGubKzKYEhnzWBlCTs08wpcFAA==","lastmod":"Sun, 13 Dec 2009 20:28:04 GMT","vtag":"5YSzQ7sEdI3lABkEUFcgXy","bucket":"blog","key":"lumberjaph","links":[]}
-{% endhighlight %}
-
-h3. Using Riak with Perl and KiokuDB
-
-I need to store various things in Riak: html pages, json data, and objects using KiokuDB. I've started to write a client for Riak with AnyEvent, so I can do simple operations at the moment, (listing information about a bucket, defining a new bucket with a specific schema, storing, retriving and deleting documents). To create a client, you need to
-
-{% highlight perl %}
-my $client = AnyEvent::Riak->new(
-    host => 'http://127.0.0.1:8098',
-    path => 'jiak',
-);
-{% endhighlight %}
-
-As Riak exposes to you it's N, R, and W value, you can also set them in creation the client:
-
-{% highlight perl %}
-my $client = AnyEvent::Riak->new(
-    host => 'http://127.0.0.1:8098',
-    path => 'jiak',
-    r    => 2,
-    w    => 2,
-    dw   => 2,
-);
-{% endhighlight %}
-
-where:
-
- * the W and DW values define that the request returns as soon as at least W nodes have received the request, and at least DW nodes have stored it in their storage backend.
- * with the R value, the request returns as soon as R nodes have responded with a value or an error. You can also set this values when calling fetch, store and delete. By default, the value is set to 2.
-
-So, if you wan to store a value, retrieve it, then delete it, you can do:
-
-{% highlight perl %}
-my $store =
-    $client->store({bucket => 'foo', key => 'bar', object => {baz => 1},})
-    ->recv;
-my $fetch = $client->fetch('foo', 'bar')->recv;
-my $delete = $client->delete('foo', 'bar')->recv;
-{% endhighlight %}
-
-If there is an error, the croak method from AnyEvent is used, so you may
-prefer to do this:
-
-{% highlight perl %}
-use Try::Tiny;
-try {
-    my $fetch = $client->fetch('foo', 'baz')->recv;
-}
-catch {
-    my $err = decode_json $_;
-    say "error: code => " . $err->[0] . " reason => " . $err->[1];
-};
-{% endhighlight %}
-
-The error contains an array, with the first value the HTTP code, and the second value the reason of the error given by Riak.
-
-At the moment, the KiokuDB backend is not complete, but if you want to start to play with is, all you need to do is:
-
-{% highlight perl %}
-my $dir = KiokuDB->new(
-    backend => KiokuDB::Backend::Riak->new(
-        db => AnyEvent::Riak->new(
-            host => 'http://localhost:8098',
-            path => 'jiak',
-        ),
-        bucket => 'kiokudb',
-    ),
-);
-
-$dir->txn_do(sub { $dir->insert($key => $object) });
-{% endhighlight %}
-
-- 
cgit v1.2.3

