纪元时间作为字符串比较
Epoch time as string comparison
我正在通过 Phoenix 使用 HBase DB,我需要比较两个纪元时间戳字符串。
方法 to_number("ts") 需要很长时间才能计算大量数据。
比较两个纪元时间戳字符串而不将它们转换为数字或任何其他转换的最佳做法是什么。
使用字符串比较适用于相同长度的数字,例如 456 < 654。
但是对于不同长度的数字,它可能会失败,例如 456 < 65.
我考虑过在插入过程中的每个数字前加零,这样所有字符串的长度都相同,但必须有更好的方法来做到这一点。
字符串按字典顺序进行比较,您必须在查询时依赖 TO_NUMBER() 或在 insert/query 时依赖 LPAD(),lpadding 数字字符串是一种常见的做法,特别是在Hadoop 或 HBase(用于行键)。
无论如何,您应该考虑将该时间戳存储为 4B 整数或 8B 长,而不是 +10B 字符串。您将能够直接比较它们并且您还将保存 space,特别是如果它是您的行键的一部分(在 hbase 中,行键在每个存储的单元格上)。
- 对于标准 posix 时间戳(以秒为单位),您可以将其存储为整数,或者如果您想为 2038 年做好准备,请使用较长的 http://en.wikipedia.org/wiki/Year_2038_problem :)
- 对于以毫秒为单位的时间戳,您需要将它们存储为 long。
我正在通过 Phoenix 使用 HBase DB,我需要比较两个纪元时间戳字符串。 方法 to_number("ts") 需要很长时间才能计算大量数据。
比较两个纪元时间戳字符串而不将它们转换为数字或任何其他转换的最佳做法是什么。
使用字符串比较适用于相同长度的数字,例如 456 < 654。 但是对于不同长度的数字,它可能会失败,例如 456 < 65.
我考虑过在插入过程中的每个数字前加零,这样所有字符串的长度都相同,但必须有更好的方法来做到这一点。
字符串按字典顺序进行比较,您必须在查询时依赖 TO_NUMBER() 或在 insert/query 时依赖 LPAD(),lpadding 数字字符串是一种常见的做法,特别是在Hadoop 或 HBase(用于行键)。
无论如何,您应该考虑将该时间戳存储为 4B 整数或 8B 长,而不是 +10B 字符串。您将能够直接比较它们并且您还将保存 space,特别是如果它是您的行键的一部分(在 hbase 中,行键在每个存储的单元格上)。
- 对于标准 posix 时间戳(以秒为单位),您可以将其存储为整数,或者如果您想为 2038 年做好准备,请使用较长的 http://en.wikipedia.org/wiki/Year_2038_problem :)
- 对于以毫秒为单位的时间戳,您需要将它们存储为 long。