Achieving 100% consitency

Lukas Schulze lspcity at gmail.com
Mon Aug 29 04:05:13 EDT 2011


A friend of mine found out how it could work: I have to delete the entry
first and after storing it in the database I've to check the result.
It's not the prettiest code I've written before, but without the while-loop
it will work for nearly 97% of my tuples. With the while-loop everything
works fine.

======================================
RiakObject riakIndex = new RiakObject(attrName, attrValue,
indexString.getBytes());
riakIndex.setContentType("text/plain; charset=UTF-8");
try{
//have to be deleted because of cache (?)
 riakPBCClient.delete(attrName, attrValue);
riakPBCClient.store(riakIndex);
RiakObject[] fetched = riakPBCClient.fetch(attrName, attrValue);
 //check whether the entry is correctly stored in the database
while(fetched.length == 0) {//try it until it works...
 riakPBCClient.store(riakIndex);
fetched = riakPBCClient.fetch(attrName, attrValue);
}
 //fetched entry doesn't match our stored one
if(!riakIndex.getValue().equals(fetched[0].getValue())) {
 System.err.println("index match: failed -> " + attrName + "." + attrValue);
}
 }
======================================

Best regards
Lukas


On Mon, Aug 29, 2011 at 9:20 AM, Lukas Schulze <info at lukas-schulze.de>wrote:

> Hi,
>
> thank you for your answers.
> I know that Riak is designed for running on distributed servers.
> But what's about adding lots of data and every tuple depends on another
> one?
> I thought that having only 1 node and disabling replications could solve my
> problems of getting always the latest data from Riak.
>
> Is there another way to achieve 100% consistency in a riak database after a
> very short time?
>
> Best regards
> Lukas
>
>
>
> On Sat, Aug 27, 2011 at 5:43 PM, Ian Plosker <ian at basho.com> wrote:
>
>> Jonathan,
>>
>> Excuse me, that last message should have been addressed to you.
>>
>>  Ian Plosker
>> Developer Advocate
>> Basho Technologies
>>
>>
>> On Aug 27, 2011, at 11:39 AM, Ian Plosker wrote:
>>
>> Lukas,
>>
>> Yes, even for dev you'd be best advised to develop and test your
>> application with the same or similar number of nodes and n, r, and w
>> settings as you would in production. It's good practice to develop
>> applications in a dev/test environment that mirrors the production
>> environment as much as is reasonable/feasible. You can run a single node
>> cluster, but note that this isn't a configuration you'll see in a
>> production.
>>
>>  Ian Plosker
>> Developer Advocate
>> Basho Technologies
>>
>>
>>
>> On Aug 27, 2011, at 5:33 AM, Jonathan Langevin wrote:
>>
>> Even for development-purposes only? Otherwise it seems data would be
>> written n times to the same machine, which is needless in a dev environment
>> with low storage specs...*
>>
>>  <http://www.loomlearning.com/>
>>  Jonathan Langevin
>> Systems Administrator
>> Loom Inc.
>> Wilmington, NC: (910) 241-0433 - jlangevin at loomlearning.com -
>> www.loomlearning.com - Skype: intel352
>> *
>>
>>
>> On Fri, Aug 26, 2011 at 5:01 PM, Ian Plosker <ian at basho.com> wrote:
>>
>>> Lukas,
>>>
>>> Also, we don't advise that you run single node clusters. Riak is designed
>>> to be used in clusters of at least 3 nodes. You can run a multi-node cluster
>>> on a single development machine by downloading the Riak source, and running
>>> "make devrel". Take a look at the Riak Fast Track (
>>> http://wiki.basho.com/The-Riak-Fast-Track.html) for more details.
>>>
>>> Ian Plosker
>>> Developer Advocate
>>> Basho Technologies
>>>
>>> On Aug 26, 2011, at 3:17 PM, Lukas Schulze wrote:
>>>
>>> I'm doing some simple tests with Riak and tried to build something like
>>> an index.
>>> Therefore I created new buckets for some attributes like "name", "street"
>>> and "city".
>>> One entry in the index-bucket "name" is for example "Mueller" and the
>>> value contains all user ids, formatted as an JSON string:
>>> "{id:[1,5,8,13,2,7]}"
>>> The java objects are saved as JSON strings in a separate bucket "users",
>>> the keys in this bucket are the user-ids, the values are the JSON strings.
>>>
>>> If I add 200 users via Java and the RiakPBC client every loop I fetch the
>>> index, add the new user id and store it again in Riak.
>>> But java is too fast, so I receive an old version of the bucket.
>>>
>>> Because I've only one node I set the n-value to 1, r = 1, w = 1 and dw =
>>> 1.
>>> But I have to wait nearly 2 seconds to be mostly sure to get the correct
>>> response. (the computer isn't an high-end machine ;-) )
>>>
>>> Is it possible to be sure that the data will be saved permanently and I
>>> can continue adding users?
>>> Are there any caching methods I can configure?
>>> Can I set the default n-value to 1 so that every newly created bucket
>>> will have this value?
>>> Does Riak have any kind of indexes or is it possible to implement it a
>>> better way?
>>>
>>> In my first version I saved all users in one bucket and iterated over all
>>> of them to find the correct one. But for every single request from the Java
>>> Service to Riak it took nearly 200ms. For a huge amount of entries (10,000)
>>> this isn't practible. Therefore I tried to implement my own indexes.
>>>
>>> The main focus of my question is getting rid of the inconsistent reads.
>>>
>>> Thank you.
>>>
>>> Best Regards
>>> Lukas
>>> _______________________________________________
>>> riak-users mailing list
>>> riak-users at lists.basho.com
>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>
>>>
>>>
>>> _______________________________________________
>>> riak-users mailing list
>>> riak-users at lists.basho.com
>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>
>>>
>>
>> _______________________________________________
>> riak-users mailing list
>> riak-users at lists.basho.com
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>
>>
>>
>> _______________________________________________
>> riak-users mailing list
>> riak-users at lists.basho.com
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20110829/e700c57a/attachment-0001.html>


More information about the riak-users mailing list