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.
