私たちのプロジェクトでは、ロットファイルを1つの大きなファイルに結合します。4〜12GBと想定します。
次に、クライアント要求を処理するサーバーを作成する必要があります。
各リクエストクライアントは、この大きなファイルの一部を取得するか、新しいファイルをこの大きなファイル(テール)にプッシュしたいと考えています。
では、これを低レイテンシで行うための最良の方法は何でしょうか?
RandomAccessFile
?InputStream
?
私たちのプロジェクトでは、ロットファイルを1つの大きなファイルに結合します。4〜12GBと想定します。
次に、クライアント要求を処理するサーバーを作成する必要があります。
各リクエストクライアントは、この大きなファイルの一部を取得するか、新しいファイルをこの大きなファイル(テール)にプッシュしたいと考えています。
では、これを低レイテンシで行うための最良の方法は何でしょうか?
RandomAccessFile
?InputStream
?
チャンクを1つのファイルに再結合しない場合、最高のパフォーマンスが得られます。次のステップは、NIOのFileChannelを使用することです。
Linuxを使用している場合はcat
、bashシェルでコマンドを使用してファイルを結合することをお勧めします。効率的で、他のプログラミング言語を必要としません。
例
cat file1.txt file2.txt >> file_combine.txt
ここで必要なのはReentrantReadWriteLockだと思います。
このロックにより、同時に読み取り操作と一度に1つの書き込み操作のみが可能になります。すべての読み取り操作の前に読み取りロックを取得し、読み取りが終了した後に解放することができます。そして、すべての書き込み操作の前に書き込みロックを行い、その後解放します。
クライアントに上記のコードを呼び出してもらいます。それが役に立てば幸い。
final ReadWriteLock lock = new ReentrantReadWriteLock();
public void checkFile(String yourData) {
lock.readLock().lock();
boolean toWrite = false;
// Read the file, check for data and update toWrite accordingly
lock.readLock().unlock();
if (toWrite) {
lock.writeLock().lock();
// write the data to the file
lock.writeLock().unlock();
}
}