java - HBase 中辅助浮点索引的排序顺序

标签 java floating-point indexing hbase endianness

我正在尝试在 HBase 中实现类似搜索引擎的东西。除了这确实是一个多么好的主意(找出原因就是这样做的原因)之外,我还需要支持浮点值的“范围查询”。创建倒排索引将是执行此操作的默认方法,将浮点值映射到单独数据结构中的行键。然而,为了使其作为索引,我需要能够从范围的低点到高点发出扫描(至少,这是我当前的理论)。

由于 HBase 按字节数组排序,如果 float 的字节表示中的第一位为 1 表示负值,0 表示正值(不符合浮点值顺序),则以浮点开头的行键不会为我提供可用的索引。因此,我不知道如何创建这个索引。

我是否采取了一种愚蠢的方法,或者以下其中一种方法会更好?

将 float 转换为一对整数值,一个在小数点之前,一个在小数点之后:

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 对行键使用自定义比较器(不知道如何执行此操作)。

最佳答案

如果您希望 hbase 对它们进行正确排序,您需要使用不同的方法将值序列化为 byte[]。查看https://github.com/ndimiduk/orderly 。 另外,我相信 Lily 库也可以做到这一点。

关于java - HBase 中辅助浮点索引的排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398025/

相关文章:

java - 通知 postgres 对 java 应用程序的更改

java - 在 JTable 中禁用用户编辑

java - 此 C# 泛型方法模式的等效 Java 实现是什么

java - 将浮点值分配给 double 值

python - 类型错误 : a float is required

Javascript 的几何方法 : Zero isn't exactly zero, 是吗?

Mysql 多行索引

java - 克隆具有同一类的父级和子级的对象

java - 如何在 C++ 模板中实现 Java Generics Self-bounded types 的等价物

seo 问题 : where should my blog sitemap. xml live