Я столкнулся с аналогичной проблемой с одним из моих проектов. У нас была огромная иерархия, которая будет постоянно расти. Мне нужно было пройти его быстро, а затем найти нужную группу после некоторых сложных проверок. Вместо того, чтобы перейти на SQL Server и почесывать голову, как я могу эффективно это делать, когда я знал, что рекурсивные запросы являются единственным жизнеспособным решением. Но знаете ли вы, есть ли какая-либо оптимизация в рекурсивных запросах. Есть ли какая-либо гарантия того, что ваша иерархия не будет увеличиваться в будущем, и в один прекрасный день вы узнаете, что ваши рекурсивные запросы слишком медленны для использования в производстве?
Итак, я решил сделать снимок Neo4J. Это графическая база данных со множеством полезных алгоритмов встроенного, удивительно быстрого обхода с достойной документацией и примерами. Храните иерархию в Neo4J и иерархии доступа, используя сервис Thrift (или что-то еще). Да, вам нужно будет написать код, который будет интегрировать ваши SQL-запросы с Neo4J, но у вас будет масштабируемое и более надежное решение.
Упование вы считаете это полезным.
То, что вы отстаиваете, является моделью «материализованного пути». Этот подход легко понять, но неэффективен для некоторых операций, см. Http://vadimtropashko.wordpress.com/2008/08/09/one-more-nested-intervals-vs-adjacency-list-comparison/ – 2008-09-28 07:18:44
Это большой вопрос ... – anbanm 2008-09-28 07:35:17