1

HBase に検索エンジンのようなものを実装しようとしています。これがいかに優れたアイデアであるかは別として (これを行う理由を見つけることが)、浮動小数点値の「範囲クエリ」をサポートする必要があります。これを行うデフォルトの方法は逆索引を作成し、浮動小数点値を別のデータ構造の行キーにマッピングします。ただし、これがインデックスとして機能するには、範囲の下限から上限までスキャンを発行できる必要があります (少なくとも、それが私の現在の理論です)。

HBase はバイト配列で注文するため、浮動小数点数のバイト表現の最初のビットが負の値の場合は 1、正の場合は 0 であるため、行キーを浮動小数点で開始しても使用可能なインデックスが得られません。値 (これは浮動小数点数順ではありません)。そのため、このインデックスを作成する方法に途方に暮れています。

私はこれに対してばかげたアプローチを取っていますか、それとも次のいずれかがうまく機能しますか?

浮動小数点を整数値のデュオ (小数点の前後に 1 つずつ) に変換します。

BigDecimal[] doubleValue = 
    new BigDecimal((Double) value).divideAndRemainder(BigDecimal.ONE);
byte[] valueBytes = new byte[16];
System.arraycopy(Bytes.toBytes(doubleValue[0].longValue()), 0, valueBytes, 0, 8);
System.arraycopy(Bytes.toBytes(doubleValue[1].longValue()), 0, valueBytes, 8, 8);

どういうわけか、行キーにカスタム コンパレータを使用するように HBase を説得します (これを行う方法がわかりません)。

4

1 に答える 1

1

hbase で値を適切に並べ替えたい場合は、別のアプローチを使用して値を byte[] にシリアル化する必要があります。https://github.com/ndimiduk/orderlyをチェックしてください。あるいは、Lily ライブラリーでもこれができると思います。

于 2012-11-16T00:00:32.523 に答える