0

我正在通过 Phoenix 使用 HBase DB,我需要比较两个时代时间戳字符串。to_number("ts") 方法计算大量数据所需的时间太长。

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

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

我考虑在插入过程中的每个数字之前种植零,以便所有字符串的长度相同,但必须有更好的方法来做到这一点。

4

1 回答 1

1

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

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

  • 对于标准 posix 时间戳(以秒为单位),您可以将其存储为整数,或者如果您想为 2038 年做好准备,请阅读很长的http://en.wikipedia.org/wiki/Year_2038_problem :)
  • 对于以毫秒为单位的时间戳,您需要将它们存储为 long。
于 2015-01-11T08:15:36.720 回答