Azure目录与Lucene.Net和Azure辅助角色

时间:2012-11-19 16:17:19

标签: lucene.net azure-storage azure-worker-roles

我正在尝试使用Azure blob存储中的AzureDirectory实现Lucene.Net索引。

索引过程从Azure辅助角色运行。

在本地azure仿真器中,我可以处理约3百万条记录到索引中,搜索速度非常快。

现在我正在尝试将其添加到实时Azure中,并且辅助角色开始处理正常。

我遇到的问题是,在大约500,000条记录之后,工作者角色会崩溃并重新启动。

我有异常处理,我在整个代码,异常处理程序和OnStop事件中都使用了跟踪语句的诊断。主代码中的trace语句很好地出现在诊断表中,并给出了我的记录处理日志,但异常处理和OnStop中的trace语句从不显示。

有很多代码需要发布,所以我想我最初会先询问是否有人知道这种类型的Lucene.Net索引与AzureDirectory存在任何限制?

修改 我终于设法通过移动一些代码来获得异常。 索引磁盘空间不足,我得到以下异常。试着增加空间并发回结果。

  

磁盘上没有足够的空间。在   System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)
  在System.IO.FileStream.WriteCore(Byte []缓冲区,Int32偏移量,Int32   伯爵   Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexOutput.FlushBuffer(字节[]   b,Int32 offset,Int32 size)at   Lucene.Net.Store.BufferedIndexOutput.Flush()at   Lucene.Net.Store.BufferedIndexOutput.WriteBytes(Byte [] b,Int32   offset,Int32 length)at   Lucene.Net.Store.RAMOutputStream.WriteTo(IndexOutput out_Renamed)
  在Lucene.Net.Index.StoredFieldsWriter.FinishDocument(PerDoc perDoc)
  at Lucene.Net.Index.DocumentsWriter.WaitQueue.WriteDocument(DocWriter)   doc)Lucene.Net.Index.DocumentsWriter.WaitQueue.Add(DocWriter)   doc)at   Lucene.Net.Index.DocumentsWriter.FinishDocument(DocumentsWriterThreadState   perThread,DocWriter docWriter)at   Lucene.Net.Index.DocumentsWriter.UpdateDocument(Document doc,Analyzer   分析仪,Term delTerm)at   Lucene.Net.Index.IndexWriter.AddDocument(Document doc,Analyzer   分析仪)

最终更新 所以我现在让我的索引器在大约5分钟内索引330万行数据。

我已经回到基于RAM的存储并略微减少了索引的数据,我的文档中有3个字段,现在减少到2个。

从天蓝色的webrole中搜索索引也很快。

我已经接受了所有人的评论,并将在接下来的一个月左右对此进行监控。我很想知道它在负载下的表现如何。

2 个答案:

答案 0 :(得分:0)

我之前发布了这个...但是......

它不适用于生产环境......以下是我为什么不能和你能做什么的答案:How to implement Lucene .Net search on Azure webrole

我应该添加运行您自己的Azure VM具有优势,因为您可以条带化磁盘以获得额外的I / O性能(在索引和在RAM外搜索时非常重要)。

这是另一个可能有帮助的答案,但我不同意这种方法:https://azuredirectory.codeplex.com/discussions/402913

编辑:我应该澄清,当我说“工作”时,我的意思是在生产环境中工作。

答案 1 :(得分:0)

我实现了我的AzureDirectory版本here

也许它会对你有所帮助,你最终会用RAMDirectory耗尽内存 - 这只是文档数量的问题。