問題タブ [niofsdirectory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1367 参照

multithreading - 複数のスレッドを持つ Lucene NIOFSDirectory および SimpleFSDirectory

私の基本的な質問は、同じインデックスでクエリ (読み取り) を行う必要がある複数のスレッドがある場合に、NIOFSDirectory と SimpleFSDirectory のインスタンスを作成/使用する適切な方法は何ですか。さらに要点:クエリを実行して結果を取得する必要があるスレッドごとに XXXFSDirectory のインスタンスを作成する必要があります(その後、同じスレッドですぐに閉じます)、または「グローバル」(シングルトン)を作成する必要があります?) すべてのスレッドに渡され、すべてのスレッドが同時にそれを使用するインスタンス (そして、クエリが完了したときにそれを閉じるのは各スレッド次第ではありません)?

詳細は次のとおりです。

NIOFSDirectory と SimpleFSDirectory の両方のドキュメントを読みましたが、得たものは次のとおりです。

  • どちらもマルチスレッドをサポートしています。

NIOFSDirectory : " java.nio の FileChannel の位置読み取りを使用する FSDirectory 実装。これにより、複数のスレッドが同期せずに同じファイルから読み取ることができます。 "

SimpleFSDirectory : " java.io.RandomAccessFile を使用した FSDirectory の単純な実装。ただし、このクラスは、複数のスレッドが同じファイルから読み取るときに同期するため、同時実行パフォーマンスが低下します (複数のスレッドがボトルネックになります)。通常は、代わりに NIOFSDirectory または MMapDirectory を使用することをお勧めします。 . "

  • NIOFSDirectory は、マルチスレッドのコンテキストで SimpleFSDirectory よりも適しています (基本的には高速です) (上記を参照)。

  • NIOFSDIrectory は、Windows ではうまく機能しません。Windows では、SimpleFSDirectory が推奨されます。ただし、*nix OS では NIOFSDIrectory が正常に動作し、マルチスレッド時のパフォーマンスが向上するため、SimpleFSDirectory よりも推奨されます。

"注: Sun の JRE での FileChannel.read の実装方法にバグがあるため、NIOFSDirectory は Windows では推奨されません。実装の内部では、明らかに位置が同期されています。 "

私がこれを尋ねている理由は、ターゲット OS が Linux であり、NIOFSDirectory を使用してインデックスから読み取るが、そのインスタンスが (各スレッドからの) 要求ごとに作成される実際のプロジェクトを見てきたことです。クエリが完了して結果が返されると、スレッドはそのインスタンスを閉じます (次のリクエストなどで新しいインスタンスを作成するためだけに)。したがって、これが本当に単一の NIOFSDirectory インスタンスをすべてのスレッドで共有し、アプリケーションの起動時にそれを開いて、特定の (マルチスレッド) ジョブが終了したときに閉じるよりも、本当に優れたアプローチであるかどうか疑問に思っていました。 ..

さらに言えば、Webアプリケーションの場合、 NIOFSDirectory のインスタンスを作成し、それをアプリケーションコンテキストに配置し、すべてのサーブレットがそれを共有して使用し、同じコンテキストリスナーを使用するコンテキストリスナーのようなものを用意する方が良いのではないでしょうか?アプリがシャットダウンすると閉じますか?

0 投票する
0 に答える
791 参照

java - Java 7 zipfs: ファイルもフォルダーです

Java 7 の ZipFS サポートを使用しています。

https://gist.github.com/stain/5591420

少し奇妙に感じる動作を示しています。基本的に、ZIP ファイル システムを作成し、任意の名前のファイルを作成し、さらに同じ名前のフォルダーを作成できます。

この理由は、内部的にフォルダーの名前に「/」が追加されるためと思われますが、この新しい名前は返されないため、ファイルが成功した直後に Files.isDirectory() が false を返すという奇妙な状況になります。 createDirectory()。

したがって、接尾辞として「/」がある限り、両方を使用することもできます。ルートのディレクトリ リストを作成すると、このようにリストされます。

現在、ZIP 形式自体は、ZIP ファイル内のエントリのみを処理するため (同じ名前の複数のエントリを許可する場合でも)、これを許可していますが、「FileSystem」の通常の使用では、通常、同じ名前の複数のエントリは許可されません。フォルダを2回作成しようとするとわかるように。

生成された ZIP ファイルは、infozip、7Zip、および Windows 8 で正しく参照できます。しかし、ネイティブ ファイル システムはそのような二重性をサポートしていないため、解凍しようとすると明らかに失敗します。

これは機能ですか、バグですか、それともその中間ですか?