我想在Azure blob存储中使用AzureDirectory实现Lucene.Net索引。AzureDirectory与Lucene.Net和Azure工作者角色
索引进程从Azure工作者角色运行。
在本地天青模拟器中,我可以处理300万条记录到索引中,搜索速度非常快。
现在我正在尝试将它升级到Azure,并且worker角色开始处理正常。
我遇到的问题是,大约500,000条左右的记录后,工作者角色就会重新开始工作。
我有异常处理,并且在整个代码,异常处理程序和OnStop事件中都使用trace语句进行诊断。来自主代码的跟踪语句出现在诊断表中,并给出了我的记录得到处理的日志,但异常处理和OnStop中的跟踪语句从不出现。
有很多代码需要发布,所以我想我会首先询问是否有人知道使用AzureDirectory对此类Lucene.Net索引的任何限制?
编辑: 我终于设法通过移动一些代码来得到一个异常。 索引磁盘空间不足,出现以下异常。尝试增加空间并将结果返回。
磁盘上没有足够的空间。在 System.IO .__ Error.WinIOError(的Int32的errorCode,字符串maybeFullPath)
在System.IO.FileStream.WriteCore(字节[]缓冲液,的Int32偏移的Int32 计数)在 Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexOutput .FlushBuffer(字节[] b,的Int32偏移的Int32大小)在 Lucene.Net.Store.BufferedIndexOutput.Flush()在 Lucene.Net.Store.BufferedIndexOutput.WriteBytes(字节[] b,的Int32 偏移的Int32长度)在 Lucene.Net.Store.RAMOutputStream.WriteTo(IndexOutput out_Renamed)
在Lucene.Net.Index.StoredFieldsWriter.FinishDocument(PerDoc perDoc)
在Lucene.Net.Index.DocumentsWrit er.WaitQueue.WriteDocument(DocWriter DOC)在Lucene.Net.Index.DocumentsWriter.WaitQueue.Add(DocWriter DOC)在 Lucene.Net.Index.DocumentsWriter.FinishDocument(DocumentsWriterThreadState perThread,DocWriter docWriter)在 Lucene的。 Net.Index.DocumentsWriter.UpdateDocument(书籍DOC,分析 分析仪,期限delTerm)在 Lucene.Net.Index.IndexWriter.AddDocument(书籍DOC,分析 分析仪)
最后更新 所以我现在我的索引器在appr中索引了330万行数据大约5分钟。
我已经回到基于RAM的存储并稍微减少了被索引的数据,我的文档中有3个字段,现在减少到2个。
从蔚蓝的卷筒纸上搜索索引也是闪电般的。
我已将所有人的意见带上,并将在下个月左右对此进行监测。我会很乐意看到它是如何在负载下执行的。
哈,所以我在我的博客上的建议是正确的:)你在哪里存储索引?在Azure存储(BLOB)中? –
是一个blob。默认情况下,AzureDirectory写入磁盘,但在他们的codeplex站点上,他们说他们使用的是使用RAMDirectory,所以现在就试一下。我做了这个改变,它现在还在运行。一旦完成,我会更新。它在〜2mill行之后减慢了waaaaay,所以可能不得不更频繁地尝试提交。今天晚些时候/明天更新!欢呼莱昂! – ozz
好吧,我期待你的发现,有趣的问题:) –