HBaseZeroCopyByteString

今日は protobuf のコードと格闘していた.protobuf で宣言された bytes は全て ByteString クラスにマッピングされるのだが,ByteString クラスには 1 つ問題がある.デフォルトでは wrap メソッドを持たないため,copyFrom メソッドを用いる必要があり,ゼロコピー化ができない点だ.com.google.protobuf.LiteralByteString クラスを用いれば可能なのだが,public クラスではないためパッケージ外から参照することができない.

HBase では,これを HBaseZeroCopyByteString を用いて解消している.すなわち,HBase 側に com.google.protobuf パッケージのソースを定義しておいて, public クラスの HBaseZeroCopyByteString 経由で LiteralByteString にアクセスするという方法である.この手法は hadoop-mesos でも使われており,いざというときのために覚えておくと便利である.