Wow those are impressive figures. I'll have to give neo4j a go.


On Thu, Dec 1, 2011 at 2:42 AM, Dmytrii Nagirniak <[email protected]> wrote:
> Thanks Jason.
>
> Yes, ancestry is definitely useful.
>
> But I decided to play with neo4j for a bit.
>
> Would be interesting to hear some experience from others with neo4j.
>
> The challenge is the REST API. I can't find "decent" ActiveModel-ish gem for
> it.
> I am not ready (scared?) to embed the database and use JRuby even though it
> seems to be the simplest and easiest way to go.
>
> It's pretty interesting so far. The database size is ~400000 "entries" and
> is under constant "write" load from ~100 Ruby processes.
> Most of the queries take ~3 ms, a bit more complex ones - ~12 ms.
>
> I honestly can't imagine doing anything similar with SQL.
>
>
> Pretty imposed so far if not taking into account that I'll have to pretty
> much throw away all the ActiveRecord code and tests :(
>
> Cheers,
> Dima
> http://www.ApproachE.com
>
>
> On 30/11/2011, at 9:39 PM, Jason Nah wrote:
>
> Not sure if this is still useful...
>
> We've used the ancestry gem (https://github.com/stefankroes/ancestry) with
> great success. It wasn't used in the matter that you described but might
> also be a suitable alternative.
>
> Cheers,
> Jason
>
>
> On 29 November 2011 08:26, Dmytrii Nagirniak <[email protected]> wrote:
>>
>>
>> A node is basically a permission (loaded with the information, such as
>> subject, user, company etc) that is propagated through to the other nodes.
>>
>> Is "propagating changes to all child node recursively" a strategy to
>> improve query performance?
>>
>>
>> Pretty much. So instead of traversing the path "upwards", I can update
>> it's attributes and query on it. It is not always possible/easy to do
>> though.
>> For example:
>> Company1 includes User1.1, User1.2
>> Company2 includes User2
>> Company includes User 3
>>
>> And given the permissions:
>> User1.1 -- Allow read X--> User 3
>> User1.2 -- Allow write X--> User 2
>> User2 -- Allow write X --> User3
>>
>> In this case User3 should be able to read and write, but only when she is
>> a part of Company 2 or 3 (both allow write), not Company 1 (only allowed
>> reading).
>>
>>
>>
>> If so, you might look at an ActiveRecord extension such as my "Arboreal"
>> (shameless plug), or DHH's "acts_as_nested_set", to allow efficient queries
>> on a tree structure.
>>
>> https://github.com/mdub/arboreal
>> https://github.com/rails/acts_as_nested_set
>>
>>
>> I did presentation last year, that included an example of using Arboreal
>> to query down a hierarchy (e.g. of roles or groups) while joining with
>> another table (e.g. permissions).  See page 10 of:
>>
>> http://www.slideshare.net/mdubya/one-project-3-gems
>>
>>
>> I think I remember your talk. I did like it a lot.
>> I currently do something similar to fetch the subtrees using SQL LIKE and
>> paths.
>> The problem there is that I need to query all the parents for a condition.
>> So that even if I retrieve the subtree, I will have to walk upchain on
>> each node to verify the permissions.
>>
>> If I will be able to propagate all the changes down, then it I can just
>> query on the nodes themselves.
>> Although it gets much more complicated as a lot of denormilised data will
>> be stored... Leading me back to graph DBs :)
>>
>>
>> In any case, thanks a lot to everybody for the suggestions. I am a little
>> bit better aware of my options now.
>> I'll actually go and try neo4j... (and will report back if somebody is
>> interested).
>>
>> Cheers,
>> Dima.
>>
>>
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby or Rails Oceania" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/rails-oceania?hl=en.
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby or Rails Oceania" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/rails-oceania?hl=en.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby or Rails Oceania" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/rails-oceania?hl=en.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
or Rails Oceania" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rails-oceania?hl=en.

Reply via email to