编写正则表达式过滤器以解析以反向时间戳顺序存储的日期范围

时间:2018-03-15 18:35:09

标签: javascript node.js regex bigtable

我必须使用正则表达式过滤器按日期在Google Cloud BigTable中解析一系列行键,其中rowkey中的每个日期都根据Unix Epoch存储为反向时间戳(1月1日00:00:00) ,1970)。

例如,给定Date d = "2018-03-09T10:48:00.000Z",自Unix时代以来MS中的这个日期是d.valueOf() = 1520592480000。在JavaScript中,允许的最大整数为Number.MAX_SAFE_INTEGER = 9007199254740991,因此我们通过区分来计算 d 的反向日期 r var r = Number.MAX_SAFE_INTEGER - d其中{ {1}}。

给定两个反向日期 r1 r2 ,如何在RE2中编写正则表达式以获取此范围内的所有日期字符串?我正在尝试使用NodeJS(有限文档)在BigTable中使用反向时间戳行键查找范围内的所有日期,所以如果有任何比这更容易的解决方案,你知道我也会接受这些!

由于

2 个答案:

答案 0 :(得分:1)

Javascript最大整数的变通办法是使查找不自然和高效。

我建议以Java和Bigtable都易于理解的方式表示行,同时保持自然顺序和过滤属性。

如果需要反转以防止出现热点,则可以尝试仅反转部分时间戳(10秒?)或在键中加盐(可以在https://cloud.google.com/bigtable/docs/schema-design-time-series的“ Salting”部分中进行检查)。

答案 1 :(得分:0)

没有一种使用纯正则表达式来处理整数范围的好方法,只能使用字符范围: https://stackoverflow.com/a/7861720/643848 https://github.com/google/re2/wiki/Syntax

此外,如果您可以表达查询以利用字典行键来进行过滤/扫描,那么Bigtable将更加高效,例如,如果您可以设置模式以使用更简单的查询来表达想要的范围,就像RowRange(https://cloud.google.com/bigtable/docs/reference/data/rpc/google.bigtable.v2#rowrange)一样。

您可能还想考虑只发出更广泛的查询,然后进行更多处理和过滤客户端。