2012-01-27 6 views
0

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件の最後のポストのコメントを(私たちは私たちのブログシステム上のブログの多くを持っていると仮定)を選択飛行機。

答えて

2

はい、あなたは正しいです。しかし、これはニトピッキングですね。

誰かがこの文脈で「計算」について語るとき、それはいくつかの文書の計算(Sum、Avg、Countなど)です。

+0

私はそれを明確にしたかっただけです。実際には、TransformResults中にいくつかのより重く、クロスドキュメント計算を行うことが可能かどうかはわかりません。 – SiberianGuy

+0

もう少し考えました。少なくとも、私はTransformResultsをソートすることができます。 – SiberianGuy

+0

Hm、「TransformResultsのソート」の意味を理解していません。 –

関連する問題