2012-11-19 98 views
3

我想在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个。

从蔚蓝的卷筒纸上搜索索引也是闪电般的。

我已将所有人的意见带上,并将在下个月左右对此进行监测。我会很乐意看到它是如何在负载下执行的。

+0

哈,所以我在我的博客上的建议是正确的:)你在哪里存储索引?在Azure存储(BLOB)中? –

+0

是一个blob。默认情况下,AzureDirectory写入磁盘,但在他们的codeplex站点上,他们说他们使用的是使用RAMDirectory,所以现在就试一下。我做了这个改变,它现在还在运行。一旦完成,我会更新。它在〜2mill行之后减慢了waaaaay,所以可能不得不更频繁地尝试提交。今天晚些时候/明天更新!欢呼莱昂! – ozz

+0

好吧,我期待你的发现,有趣的问题:) –

回答

0

我之前张贴了这个...但是...

它不会在生产环境中工作......这是我在回答为什么它不和你可以做什么:How to implement Lucene .Net search on Azure webrole

我应该添加运行您自己的Azure虚拟机具有优势,因为您可以为磁盘提供额外的I/O性能(在索引和搜索外部RAM时很重要)。

这里是另外一个答案,可能会帮助,但我不与做法不以为然:https://azuredirectory.codeplex.com/discussions/402913

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

+0

感谢你的巴特,看到更新的问题。 – ozz

0

我实现我的版本AzureDirectory here

也许它会帮助你,你总是会最终耗尽与RAMDirectory RAM - 它只是一个文件数量的问题。

+0

谢谢Karell,我会检查一下。你有关于RAMDirectory的声明的任何统计信息? – ozz

+0

另外,当使用默认设置时,我的磁盘空间不足,因此这就是为什么我将其移动到RAM – ozz

+0

无论哪种情况,您都在处理有限的资源。 Azure虚拟机没有无限制的磁盘或内存。在使用本地缓存的情况下(如果它满了,应该刷新),你应该没问题。但是,当实例出现时,请准备好以初始启动成本进行命中,因为它会为首次搜索下载缓存文件。我通常在实例启动事件上添加一个小的查询,以便它立即开始下载/创建缓存。遗憾的是,我没有你们的数据/统计数据 - 我一直在进行一段时间的分析。 –

相关问题