RavenDbはクエリ時間中に何も計算を行わないことが多くあります。例えば、ここでRavenDBの特徴の一つは、それがクエリ中に全く 計算を実行していないということですAyendeの記事"The Pain of Implementing LINQ Providers"RavenDbクエリ中の計算を行います
からの引用です。クエリのすべてのデータがすでに になっています。つまり、非常に良いクエリ速度を達成できます。
同時に、クエリ中に計算を行うことができるライブプロジェクション機能があります。例えば、ここで私が使用して計算をソートし、合計:
TransformResults = (database, post) => from post in posts
order by post.DateTime
select new
{
Id = post.Id,
CommentsCount = post.Comments.Sum()
}
のでRavenDbはそれがない、その場で計算を行うことができますでしょうか? 私は、クエリ時に実際に計算(ソート)する必要があるもう1つの例を提供することにしました。タスク:私たちは地図インデックス結果をソートすることができません。この場合、
public class LastPostsCommentsIndex: AbstractIndexCreationTask<Post>
{
public class IndexResult
{
public string BlogId {get; set;}
}
public class PostComment
{
public string PostId { get; set; }
public DateTime DateTime { get; set; }
public string Author { get; set; }
public string Text { get; set; }
}
public LastPostsCommentsIndex()
{
Map = posts => from post in posts
select new { BlogId = post.BlogId };
TransformResults = (database, posts) => from post in posts
from comment in post.Comments
orderby comment.DateTime descending
select new { PostId = post.Id, DateTime = comment.DateTime, Author = comment.Author, Text = comment.Text };
}
}
- 私たちは、上の結果をソートする必要があります。特定のblogidのための10件の最後のポストのコメントを(私たちは私たちのブログシステム上のブログの多くを持っていると仮定)を選択飛行機。
私はそれを明確にしたかっただけです。実際には、TransformResults中にいくつかのより重く、クロスドキュメント計算を行うことが可能かどうかはわかりません。 – SiberianGuy
もう少し考えました。少なくとも、私はTransformResultsをソートすることができます。 – SiberianGuy
Hm、「TransformResultsのソート」の意味を理解していません。 –