提高性能ravendb指数

时间:2015-02-26 12:38:27

标签: c# .net performance indexing ravendb

考虑这种情况:

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string SecondName { get; set; }
}

class Student : Person
{
}

class Worker : Person
{
}

class PersonViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string FullName { get; set; }
}

public class PersonIndex : AbstractMultiMapIndexCreationTask<PersonViewModel>
{
    public PersonIndex()
    {
        AddMapForAll<Person>(docs => from doc in docs
                                     select new PersonViewModel
                                     {
                                         Id = doc.Id,
                                         Name = doc.Name,
                                         Surname = doc.Surname,
                                         FullName = doc.Name + " " + doc.SecondName + " " + doc.Surname
                                     });

        StoreAllFields(FieldStorage.Yes);

        Indexes.Add(x => x.Id, FieldIndexing.No);
        Indexes.Add(x => x.FullName, FieldIndexing.No);

        Indexes.Add(x => x.Name, FieldIndexing.Analyzed);
        Indexes.Add(x => x.Surname, FieldIndexing.Analyzed);
    }
}

var queryResult = session.Query<PersonViewModel, PersonIndex>()
                                .Where(x => x.Name.StartsWith("A"))
                                .Where(x => x.Surname.StartsWith("C"))
                                .ProjectFromIndexFieldsInto<PersonViewModel>()
                                .ToList();

这只是一个例子,在我的场景中,这样的7/8索引具有更多的映射字段,原始类Person扩展了2个以上的类(15分钟)。 每个索引大约有5000个文档。

我可以做些什么来改善我的索引和表现?

1 个答案:

答案 0 :(得分:0)

查看您的查询,看起来您对所选记录感兴趣,其中“姓名”或“姓氏”以特定字母开头。

您是否考虑过修改您的收藏品以获得包含此类信息的字段?例如,如果您有“姓名:迈克尔”和“姓氏:史密斯”,也许您还应该有一个“FirstLetterName:M”和“FirstLetterSurname:S”并为这些字段添加索引。