【发布时间】:2013-05-31 09:37:27
【问题描述】:
为什么live projections 是索引的一部分(TransformResults 属性)?索引用于文档查询,而投影用于文档转换。那么为什么要把它们结合起来呢?
如果实时预测不是索引的一部分,那么同一索引可能会有多个实时预测。结果索引会更少,我猜 RavenDb 的性能会更好一些。
更新。如果将 Select 语句放在查询中(例如过滤的位置)进行实时投影,那就太好了。
【问题讨论】:
为什么live projections 是索引的一部分(TransformResults 属性)?索引用于文档查询,而投影用于文档转换。那么为什么要把它们结合起来呢?
如果实时预测不是索引的一部分,那么同一索引可能会有多个实时预测。结果索引会更少,我猜 RavenDb 的性能会更好一些。
更新。如果将 Select 语句放在查询中(例如过滤的位置)进行实时投影,那就太好了。
【问题讨论】:
这实际上是一个公平的问题。我认为答案是,将TransformResults 放入索引是最常见的用例,并且考虑到 RavenDB 中现有的索引结构,更容易实现。
如果确实存在您希望在查询时定义 TransformResults 的真实场景,请以特别的方式在邮件列表上发布功能请求。
但是我很确定答案会是
我会接受一个拉取请求
因为您是第一个要求此功能的人 ;-)
【讨论】:
因为我们需要一个地方来放置它们,大多数索引只有一个转换结果函数,所以这是一个很好的地方。它还减少了您必须了解的有关 RavenDB 的事情的数量。否则,您将有一个称为 Transformers 的顶级关注点,它通常仅与单个索引一起使用,因此提出了为什么它们被分开的问题。
【讨论】:
看这里:http://ravendb.net/docs/client-api/querying/handling-document-relationships
重要的是:
TransformResults 中声明的函数将在查询结果上执行
这意味着,TransformResults 函数将在查询时执行,而不是在索引时执行。这显然是一个根本的区别。
【讨论】: