3

Azure BLOB ストレージ内で AzureDirectory を使用して Lucene.Net インデックスを実装しようとしています。

インデックス作成プロセスは、Azure ワーカー ロールから実行されます。

ローカルの Azure エミュレーターでは、最大 300 万件のレコードをインデックスに処理でき、非常に高速に検索できます。

今、私はそれをライブ Azure に取り込もうとしていますが、worker ロールは正常に処理を開始します。

私が抱えている問題は、約 500,000 件のレコードの後、worker ロールが失敗して再起動することです。

例外処理があり、コード全体、例外ハンドラー、および OnStop イベントの両方でトレース ステートメントを使用して診断を使用しています。メイン コードからのトレース ステートメントは診断テーブルに問題なく表示され、処理中のレコードのログが表示されますが、例外処理と OnStop からのトレース ステートメントは表示されません。

投稿するコードがたくさんあるので、AzureDirectory を使用したこのタイプの Lucene.Net インデックスに関する制限を誰かが知っているかどうかを最初に尋ねることから始めようと思いましたか?

編集: 小さなコードを移動することで、ようやく例外を取得することができました。インデックスのディスク容量が不足しているため、次の例外が発生します。スペースを増やしてみて、結果を投稿します。

ディスクに十分な空き容量がありません。System.IO.__Error.WinIOError(Int32 errorCode、文字列の多分フルパス)
で System.IO.FileStream.WriteCore(Byte[] バッファー、Int32 オフセット、Int32 カウント) で Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexOutput.FlushBuffer(Byte[ ] b、Int32 オフセット、Int32 サイズ) の Lucene.Net.Store.BufferedIndexOutput.Flush() の Lucene.Net.Store.BufferedIndexOutput.WriteBytes(Byte[] b、Int32 オフセット、Int32 の長さ) の Lucene.Net.Store. RAMOutputStream.WriteTo(IndexOutput out_Renamed)
at Lucene.Net.Index.StoredFieldsWriter.FinishDocument(PerDoc perDoc)
Lucene.Net.Index.DocumentsWriter.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(Document doc、Analyzer アナライザー、Term delTerm) at Lucene.Net.Index.IndexWriter.AddDocument(Document doc、Analyzer アナライザー)

最終更新 これで、約 5 分で 330 万行のデータにインデックスを付けるインデクサーができました。

RAM ベースのストレージに戻し、インデックスを作成するデータをわずかに減らしました。ドキュメントには 3 つのフィールドがありましたが、現在は 2 つに減っています。

azure webrole からのインデックスの検索も非常に高速です。

私は皆のコメントを取り入れており、来月かそこらでこれを監視します. 負荷がかかった状態でどのように動作するか興味があります。

4

2 に答える 2

0

前にも投稿したけど…

実稼働環境では機能しません...なぜ機能しないのか、何ができるのかについての私の答えは次のとおりです。Azure webroleにLucene .Net検索を実装する方法

追加の I/O パフォーマンスのためにディスクをストライプ化できるため、独自の Azure VM を実行すると利点があることを追加する必要があります (RAM の外部でのインデックス作成および検索時に重要です)。

役立つかもしれない別の回答を次に示しますが、このアプローチには同意しません: https://azuredirectory.codeplex.com/discussions/402913

編集:「作業」と言うときは、本番環境での作業を意味することを明確にする必要があります。

于 2012-11-19T20:53:42.637 に答える
0

私のバージョンの AzureDirectory をここに実装しました

多分それはあなたを助けるでしょう、あなたは常に最終的にRAMDirectoryでRAMを使い果たします-それは単にドキュメントの数の問題です.

于 2012-11-20T15:23:32.563 に答える