我正在通过phoenix使用hbase db,需要比较epoch时间戳的两个字符串。对于大数据量,计算数字(“ts”)的方法花费的时间太长。比较两个历元时间戳字符串而不将其转换为数字或任何其他转换的最佳实践是什么。使用字符串比较对于相同长度的数字很有效,例如456<654。但对于不同长度的数字,它可能会失败,例如456<65。我考虑过在插入过程中在每个数字之前植入零,这样所有字符串的长度都相同,但必须有更好的方法。
igsr9ssn1#
字符串是按字典顺序比较的,您必须在查询时依赖to\ number()或在插入/查询时依赖lpad(),lpadding numerical string是一种常见的做法,特别是在hadoop或hbase中(对于行键)。无论如何,您应该考虑将时间戳存储为4b整数或8b长度,而不是+10b字符串。您将能够直接比较它们,而且还可以节省空间,特别是如果它是rowkey的一部分(在hbase中,rowkey位于每个存储单元上)。对于标准的posix时间戳(以秒为单位),您可以将其存储为整数,或者,如果您想为2038做好准备,可以使用长时间http://en.wikipedia.org/wiki/year_2038_problem :)对于以毫秒为单位的时间戳,您需要将它们存储为长时间。
1条答案
按热度按时间igsr9ssn1#
字符串是按字典顺序比较的,您必须在查询时依赖to\ number()或在插入/查询时依赖lpad(),lpadding numerical string是一种常见的做法,特别是在hadoop或hbase中(对于行键)。
无论如何,您应该考虑将时间戳存储为4b整数或8b长度,而不是+10b字符串。您将能够直接比较它们,而且还可以节省空间,特别是如果它是rowkey的一部分(在hbase中,rowkey位于每个存储单元上)。
对于标准的posix时间戳(以秒为单位),您可以将其存储为整数,或者,如果您想为2038做好准备,可以使用长时间http://en.wikipedia.org/wiki/year_2038_problem :)
对于以毫秒为单位的时间戳,您需要将它们存储为长时间。