Think Distributed

Database and Distributed Systems

java

ByteBuffer の使い方とベストプラクティス

ByteBuffer の使い方をまとめます。 まず、基本的な設計と仕様について。ByteBuffer は以下の特徴を持ちます: 単に byte[] をラップしただけの場合とオフヒープにアロケートしたメモリを保持する場合がある position でメモリ領域の先頭位置から見た、現在の…

Windows Safe fsync in Java

Java fsync Directory の続き。 FileChannel.force は API としてぶっ壊れており、Windows ではディレクトリに対して force を呼ぶと例外が投げられるため(厳密に言えば、この挙動は implementation defined と明記されているが、とはいえ厳しくないか…)、UN…

Create a new file if and only if not exists in Java

今まで Java で「ファイルがなかった時だけ作成する」をやる正しい方法がイマイチよく分かっていなかったのですが、 File.createNewFile() Files.createFile() で FileAlreadyExistsException をキャッチし無視する のいずれかが正しいことを理解しました。 …

Java でディレクトリに対して fsync する

ファイルに対して書き込みをした際に durability を保証するために fsync を呼ぶわけですが、fsync は基本的には(少なくとも ext4 をファイルシステムに使っている場合)親ディレクトリにも fsync を呼んで directory entry の更新も保証してやらないといけま…