2012-01-27 72 views
1

为什么live projections是索引(TransformResults属性)的一部分?索引用于文档查询,而投影用于文档转换。那么他们为什么要合并?RavenDb为什么TransformResults放置在索引

如果实时预测不是指数的一部分,那么可能会对同一指数进行多次实时预测。结果会有更少的索引,我猜RavenDb的性能会好一些。

更新。通过在查询中放置Select语句(例如Where for filtering),可以进行实时投影。

回答

4

这实际上是一个公平的问题。我认为答案是将TransformResults放在索引中是最常见的用例,并且考虑到RavenDB中的现有索引结构,更容易实现。

如果有真实场景,您希望在查询时以特别方式定义TransformResults,请在邮件列表中发布功能请求。

不过我敢肯定的答案将是

我会接受一个拉请求

当你是第一人,要求此功能; - )

+1

这不是我不能没有的功能。但是我总是认为预测是通过Select语句来工作的,所以我很惊讶地发现预测工作不是通过Select。 – SiberianGuy 2012-01-27 13:03:04

+0

你有一些选择,看到这个答案http://stackoverflow.com/a/7836337/4500 – 2012-01-29 17:56:47

2

到这里看看:http://ravendb.net/docs/client-api/querying/handling-document-relationships

最重要的部分是这样的:

在TransformResults声明的功能上的查询结果来执行

这意味着,在TransformResults函数将在查询时执行,而不是索引时间。这显然是一个根本的区别。

+0

你是对的,他们是不同的。但问题是为什么他们如此不同都被置于索引之内。对于我来说,实时投影看起来更像是查询的一部分(比如Where cluase),而不是索引的一部分。 – SiberianGuy 2012-01-27 07:30:50

3

因为我们需要一个地方来放置它们,所以大多数索引只有一个转换结果函数,所以这是一个很好的选择。它也减少了你必须知道的关于RavenDB的事情的数量。否则,你将有一个称为变形金刚的顶级关注点,因为这通常只能用于单个索引,因此引发了问题的原因。

+0

把投影放入查询的Select方法怎么样?所以我可以使用Order来排序,在哪里进行过滤,并且能够使用Select进行投影会很好。 – SiberianGuy 2012-01-29 17:22:54

+0

您可以在某种程度上做到这一点,请参阅http://stackoverflow.com/a/7836337/4500 – 2012-01-29 17:57:28