大纪元时间作为字符串比较

时间:2015-01-11 07:01:16

标签: timestamp hbase epoch phoenix

我正在通过Phoenix使用HBase DB,我需要比较两个字符串的纪元时间戳。 to_number(“ts”)方法花费的时间太长,无法计算大量数据。

比较两个纪元时间戳的最佳做法是什么,而不将其转换为数字或任何其他转换。

使用字符串比较适用于相同长度的数字,例如456< 654。 但是对于不同长度的数量,它可能会失败,例如456< 65。

我考虑在插入进度中的每个数字之前种植零,以便所有字符串具有相同的长度,但必须有更好的方法。

1 个答案:

答案 0 :(得分:1)

字符串按字典顺序进行比较,你必须在查询时依赖TO_NUMBER()或在插入/查询时依赖LPAD(),lpadding数字字符串是一种常见做法,特别是在Hadoop或HBase中(对于行)键)。

无论如何,您应该考虑将时间戳存储为4B整数或8B长而不是+ 10B字符串。您可以直接比较它们,也可以节省空间,特别是如果它是您的rowkey的一部分(在hbase中,rowkey会在每个存储的单元格上运行)。

  • 对于标准posix时间戳(以秒为单位),您可以将其存储为整数,或者如果您想为2038做好准备,请选择较长的http://en.wikipedia.org/wiki/Year_2038_problem :)
  • 对于以毫秒为单位的时间戳,您需要将它们存储为long。