Hi Chris, This doesn't really belong on core but I can point you to an alternative solution to prevent the FULL table update. While your solution is imaginative, the fact that it doesn't scale sinks the boat.
http://www.railtie.net/articles/2006/03/31/implement-acts_as_threaded-withou t-a-plugin You can also make use of the :scope parameter to make localized updates. Bob Silva http://www.railtie.net/ > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:rails-core- > [EMAIL PROTECTED] On Behalf Of Chris T > Sent: Thursday, April 06, 2006 2:28 AM > To: [email protected] > Subject: [Rails-core] Acts_as_nested query > > Posted this originally to main rails list, but prob more appropriate for > rails-core. Feel free to shoot me down in flames. I'm pretty much a noob > here, and also in db theory. > > Wondering about using the acts_as_nested for a model but concerned about > the performance overhead of having to rewrite the table each time and > entry is added or removed(and locking it while it's happening or risking > data integrity probs). Wasn't really familiar with the structure so did > a little reading up on it, and one solution to this seems to spreading > the table out, so that [using the table in the API as an example], > instead of: > > ID | PARENT | LEFT | RIGHT | DATA > 1 | 0 | 1 | 14 | root > 2 | 1 | 2 | 7 | Child 1 > 3 | 2 | 3 | 4 | Child 1.1 > 4 | 2 | 5 | 6 | Child 1.2 > 5 | 1 | 8 | 13 | Child 2 > 6 | 5 | 9 | 10 | Child 2.1 > 7 | 5 | 11 | 12 | Child 2.2 > > you would do this: > > ID | PARENT | LEFT | RIGHT | DATA > 1 | 0 | 10 | 140 | root > 2 | 1 | 20 | 70 | Child 1 > 3 | 2 | 30 | 40 | Child 1.1 > 4 | 2 | 50 | 60 | Child 1.2 > 5 | 1 | 80 | 130 | Child 2 > 6 | 5 | 90 | 100 | Child 2.1 > 7 | 5 | 110 | 120 | Child 2.2 > > Then if you added a new entry 8, which was a child of 2, for example, > you could give it a lft of 121 and a rgt of 122, meaning no full-table > re-write. Of course this fails down eventually and does require at least > a partial table rewrite (and you'd prob want to do a multiple of more > than 10 on the entries to begin with), but it would certainly cut down > the probs. Anybody got any comments? There's probably a good reason why > the AR implementation takes the full-rewrite approach, and I'm pretty > much a noob (not a programming background) so feel free to shoot me down > in flames. > > The new table would look like: > > ID | PARENT | LEFT | RIGHT | DATA > 1 | 0 | 10 | 140 | root > 2 | 1 | 20 | 70 | Child 1 > 3 | 2 | 30 | 40 | Child 1.1 > 4 | 2 | 50 | 60 | Child 1.2 > 5 | 1 | 80 | 130 | Child 2 > 6 | 5 | 90 | 100 | Child 2.1 > 7 | 5 | 110 | 120 | Child 2.2 > 8 | 5 | 121 | 122 | Child 2.3 > > Cheers > Chris T > > _______________________________________________ > Rails-core mailing list > [email protected] > http://lists.rubyonrails.org/mailman/listinfo/rails-core _______________________________________________ Rails-core mailing list [email protected] http://lists.rubyonrails.org/mailman/listinfo/rails-core
