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 からのインデックスの検索も非常に高速です。
私は皆のコメントを取り入れており、来月かそこらでこれを監視します. 負荷がかかった状態でどのように動作するか興味があります。