3

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

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

在本地 azure 模拟器中,我可以将大约 300 万条记录处理到索引中,搜索速度非常快。

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

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

我有异常处理,并且在整个代码、异常处理程序和 OnStop 事件中都使用带有跟踪语句的诊断。来自主代码的跟踪语句很好地出现在诊断表中,并为我提供了正在处理的记录的日志,但来自异常处理和 OnStop 的跟踪语句从未出现。

有很多代码要发布,所以我想我首先要问是否有人知道 AzureDirectory 对这种类型的 Lucene.Net 索引有任何限制?

编辑: 我终于设法通过移动一些代码来获得异常。索引磁盘空间不足,我得到以下异常。将尝试增加空间并将返回结果。

磁盘空间不足。在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
在 System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count) 在 Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexOutput.FlushBuffer(Byte[ ] b, Int32 offset, Int32 size) at Lucene.Net.Store.BufferedIndexOutput.WriteBytes(Byte[] b, Int32 offset, Int32 length) at Lucene.Net.Store.BufferedIndexOutput.Flush() at Lucene.Net.Store。 RAMOutputStream.WriteTo(IndexOutput out_Renamed)
在 Lucene.Net.Index.StoredFieldsWriter.FinishDocument(PerDoc perDoc)
在 Lucene.Net.Index.DocumentsWriter.FinishDocument(DocumentsWriterThreadState perThread, DocWriter docWriter) 在 Lucene.Net.Index.DocumentsWriter.WaitQueue.Add(DocWriter doc) 在 Lucene.Net.Index.DocumentsWriter.WaitQueue.WriteDocument(DocWriter doc) 在Lucene.Net.Index.IndexWriter.AddDocument(文档文档,分析器分析器)上的 Lucene.Net.Index.DocumentsWriter.UpdateDocument(文档文档,分析器分析器,术语 delTerm)

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

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

从 azure webrole 中搜索索引也非常快。

我已经听取了每个人的意见,并将在下个月左右对此进行监控。我很想看看它在负载下的表现。

4

2 回答 2

0

我之前发过这个。。。但是。。。

它不适用于生产环境......这是我为什么不适用以及您可以做什么的答案:如何在 Azure webrole 上实现 Lucene .Net 搜索

我应该补充一点,运行您自己的 Azure VM 具有优势,因为您可以对磁盘进行条带化以获得额外的 I/O 性能(在 RAM 外部进行索引和搜索时很重要)。

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

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

于 2012-11-19T20:53:42.637 回答
0

我在这里实现了我的 AzureDirectory 版本

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

于 2012-11-20T15:23:32.563 回答