package implementations;
import com.basho.riak.client.RiakClient;
import com.basho.riak.client.RiakObject;
import com.basho.riak.client.request.RequestMeta;
import com.basho.riak.client.response.FetchResponse;
import com.basho.riak.client.response.MapReduceResponse;
import core.BenchDB;
/**
* Copyright 2011 Thibault Dory
* Licensed under the GPL Version 3 license
*/
/**
*
* @author Thibault Dory
*
*/
public class riakDB extends BenchDB{
RiakClient riak;
@Override
public int connectNode(String nodeAddress) {
int ret;
try{
riak = new RiakClient("http://"+nodeAddress+":8098/riak");
ret = 1;
}catch(Exception e){
e.printStackTrace();
ret = -1;
}
return ret;
}
@Override
public String readDB(String ID) {
RiakObject o;
String ret = null;
FetchResponse r = riak.fetch("test", ID,RequestMeta.readParams(2));
if (r.hasObject()){
o = r.getObject();
ret = o.getValue();
}
return ret;
}
@Override
public int updateDB(String ID, String newValue) {
int ret;
try {
RiakObject o = new RiakObject(riak,"test",ID,newValue.getBytes("UTF8"));
o.store(RequestMeta.writeParams(2, 2).setQueryParam("returnbody", "false"));
ret = 1;
} catch(Exception e){
e.printStackTrace();
ret = -1;
}
return ret;
}
@Override
public int writeDB(String ID, String Value) {
return updateDB(ID, Value);
}
public void searchDB(String keyword){
String job = "{\"inputs\":\"test\",\"query\":[{\"map\":{\"language\":\"javascript\",\"source\":\"" +
"function(v, keyData, arg) { var words = v.values[0].data.split(' '); var keyword = arg; " +
"var results = []; for ( var i=0; i<words.length; i++ ) { if(words[i].toLowerCase() == keyword.toLowerCase() ){ " +
"temp = {}; temp[words[i]] = [v.key]; results.push(temp); } } return results; }\",\"arg\":\""+keyword+"\"}}" +
",{\"reduce\":{\"language\":\"javascript\",\"source\":\"" +
"function(v) { var r = {}; for (var i in v) { for(var w in v[i]) { if (w in r) r[w] = r[w].concat(v[i][w]); " +
"else r[w] = v[i][w]; } } ret = []; for (var key in r){ temp ={}; temp[key] = r[key]; ret.push(temp); } return ret; }\"" +
"}},{\"reduce\":{\"language\":\"javascript\",\"source\":\"function(v) { var r = []; for(var i in v){ " +
"for(var w in v[i]){ for(var id in v[i][w]){ temp = {}; temp[v[i][w][id]] = 1; r.push(temp); } } } return r; }\"}}" +
",{\"reduce\":{\"language\":\"javascript\",\"source\":\"function(v) { r = {} ; for(var i in v){ " +
"for(var w in v[i]){ if(w in r) r[w] += v[i][w]; else r[w] = v[i][w]; } } return [r]; }\"}}],\"timeout\": 12000000}";
MapReduceResponse tempRes = riak.mapReduce(job);
//System.out.println(tempRes.getBodyAsString());
}
@Override
public void close() {
}
}