RavenDb Почему TransformResults помещен в индекс

Почему live projections является частью индекса (свойство TransformResults)? Индекс используется для запроса документа, а проекция используется для преобразования документа. Так почему же они должны быть объединены?

Если бы живые проекции не были частью индекса, можно было бы иметь несколько живых проекций для одного и того же индекса. В результате будет меньше индексов, и я думаю, что производительность RavenDb будет немного лучше.

Обновление. Было бы здорово, если бы динамические прогнозы работали с оператором Select, размещенным в запросе (например, Where для фильтрации).


person SiberianGuy    schedule 27.01.2012    source источник


Ответы (3)


На самом деле это справедливый вопрос. Я думаю, что ответ заключается в том, что размещение TransformResults в индексе является наиболее распространенным вариантом использования, и его было проще реализовать, учитывая существующую структуру индексирования в RavenDB.

Если есть подлинные сценарии, в которых вы хотели бы определить TransformResults во время запроса специальным образом, опубликуйте запрос функции в списке рассылки.

Однако я уверен, что ответ будет

Я бы принял запрос на это

Поскольку вы первый, кто попросит эту функцию ;-)

person Matt Warren    schedule 27.01.2012
comment
Это не та функция, без которой я не могу жить. Но я всегда думал, что проекции работают с оператором Select, поэтому я был удивлен, обнаружив, что проекции работают не с помощью Select. - person SiberianGuy; 27.01.2012
comment
У вас есть несколько вариантов, см. этот ответ stackoverflow.com/a/7836337/4500 - person Matt Warren; 29.01.2012

Поскольку нам нужно место для их размещения, большинство индексов имеют только одну функцию преобразования результата, так что это было хорошее место для этого. Это также уменьшает количество вещей, которые вам нужно знать о RavenDB. В противном случае у вас будет проблема верхнего уровня под названием Transformers, которая обычно используется только с одним индексом, поэтому возникает вопрос, почему они разделены.

person Ayende Rahien    schedule 29.01.2012
comment
Как насчет того, чтобы поместить проекции в метод Select запроса? Так что я могу использовать Order для упорядочивания, Where для фильтрации, и было бы неплохо иметь возможность использовать Select для проецирования. - person SiberianGuy; 29.01.2012
comment
Вы можете сделать это в некоторой степени, см. stackoverflow.com/a/7836337/4500 - person Matt Warren; 29.01.2012

Посмотрите здесь: http://ravendb.net/docs/client-api/querying/handling-document-relationships

Важная часть заключается в следующем:

Функция, объявленная в TransformResults, будет выполняться по результатам запроса.

Это означает, что функция TransformResults будет выполняться во время запроса, а не во время индексации. Это принципиальное отличие, очевидно.

person Daniel Lang    schedule 27.01.2012
comment
Вы правы, они разные. Но вопрос заключался в том, почему они настолько разные, что оба помещены внутри index. Для меня живые прогнозы больше похожи на часть запроса (например, «Где»), чем на часть индекса. - person SiberianGuy; 27.01.2012