【问题标题】:Improve performance ravendb index提高性能 ravendb 索引
【发布时间】:2015-04-28 20:16:59
【问题描述】:

考虑到这种情况:

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 个文档。

我可以做些什么来提高我的索引和性能?

【问题讨论】:

  • 你目前的表现如何?
  • @AyendeRahien 当我更新索引时,重新索引所有文档需要 10/15/20 分钟,这是正常的时间吗?
  • 你有多少文件?请注意,您正在存储所有字段,并且在那里启用了全文搜索。
  • @AyendeRahien 我正在存储所有字段,因为我需要这些字段(不正确?)而且我还需要对姓名和姓氏进行全文搜索;每个索引从 4000 到 10000 个文档
  • 请注意,这可能在邮件列表中处理得更好。您通常不需要将所有字段都存储在索引中。你在哪里运行这个?

标签: c# .net performance indexing ravendb


【解决方案1】:

查看您的查询,您似乎对“姓名”或“姓氏”以特定字母开头的选定记录感兴趣。

您是否考虑过修改您的收藏以包含包含此类信息的字段?例如,如果您有“姓名:Michael”和“姓氏:Smith”,也许您还应该有“FirstLetterName:M”和“FirstLetterSurname:S”并为这些字段添加索引。

【讨论】:

  • “A”和“C”只是一个例子,它们可以是“ant”和“cho”;事实上,我使用 FieldIndexing.Analyzed 来分析需要全文搜索的字段;
猜你喜欢
  • 2014-11-25
  • 2011-09-17
  • 2015-11-17
  • 2016-08-28
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
相关资源
最近更新 更多