【问题标题】:Best practice to divide a big task in ASP.net MVC在 ASP.net MVC 中划分大任务的最佳实践
【发布时间】:2014-01-27 19:50:30
【问题描述】:

在我的 ASP.Net MVC4 项目中,我有一个方法可以保存用户输入的数据。保存完成后,同一页面会重新加载新值。

但是,在一项新要求中,我们有一个耗时的索引重建,以便在用户保存数据时添加搜索功能。虽然我们成功地完成了它,但重建是一项耗时的任务。因此,用户需要等待相当长的时间才能获得回发操作才能看到刷新的页面。

所以我想知道是否有一个好的做法来分解这个项目。正如我们之前所说,一旦数据保存在数据库中,控件应该返回给用户。而重建应该在后台进行。

以前的函数原型。

function saveData()
{
   //Do Saving
   Return Success
}

当前函数

function saveData()
    {
       //Do Saving
       // Rebuild Index
       Return Success
    }

现在我可以在重建之前返回成功,我还需要在后端进行重建。

我们认为的一种方法是,由于我们在 Azure 中,我们可以创建一个工作角色来运行这个很少的时间间隔。然而,这是一个很大的开销,因为我们可能不会让用户不时地更新他们的个人资料。但是当他们这样做时,它应该运行。

是否可以使用任何内置的 ASp.net / C# 功能或架构来实现这一点?异步?

【问题讨论】:

  • 老实说,最佳实践应该规定您不必在每次更新记录时都重建索引。
  • 感谢 Moo,由于我们使用的是 Lucine Search,因此必须重建索引才能影响搜索功能中的新更改。
  • 您不能在 ASP.NET 内部执行此操作,因为除非您等待线程完成,否则您只会获得线程中止。当然,这几乎是没有用的。我建议创建一个侦听 MSMQ 队列并将消息从 Web 应用程序放入队列的 Windows 服务。
  • 感谢 Keith,由于我们使用的是 Azure,我想它应该是一个工作角色(然后是一个实例 :))。这些 C# 中的异步编程是什么,对我的 MVC 架构有帮助吗?
  • 您可以采用网络服务方法。异步调用它。开火就忘了!

标签: c# asp.net asp.net-mvc asp.net-mvc-4 azure


【解决方案1】:

我认为你不需要一直重建 lucene 索引,你需要做的就是删除数据的旧索引并添加新索引。使用这种方法,它会很快。代码 sn -p 如下图 -

private static void _addToLuceneIndex(SampleData sampleData, IndexWriter writer) {
    // remove older index entry
    var searchQuery = new TermQuery(new Term("Id", sampleData.Id.ToString()));
    writer.DeleteDocuments(searchQuery);

    // add new index entry
    var doc = new Document();

    // add lucene fields mapped to db fields
    doc.Add(new Field("Id", sampleData.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
    doc.Add(new Field("Name", sampleData.Name, Field.Store.YES, Field.Index.ANALYZED));
    doc.Add(new Field("Description", sampleData.Description, Field.Store.YES, Field.Index.ANALYZED));

    // add entry to index
    writer.AddDocument(doc);
} 

参考 - http://www.codeproject.com/Articles/320219/Lucene-Net-ultra-fast-search-for-MVC-or-WebForms

【讨论】:

  • 感谢拉米,感谢您的建议。虽然我们通过使用 Task.Factory.Startnew() 解决了这个问题。我们将寻求实施您对我们项目的建议。
猜你喜欢
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 2021-05-25
相关资源
最近更新 更多