Skip to content
📖0 阅读·🤍0 点赞

ES常用Dates(时间类型)故事版

  • date:JSON 没有日期数据类型,因此 Elasticsearch 中的日期可以是以下三种

    • 包含格式化日期的字符串,例如 "2015-01-01"、 "2015/01/01 12:10:30"
    • 时间戳,表示自"1970年 1 月 1 日"以来的毫秒数/秒数。
  • date_nanos:此数据类型是对 date 类型的补充。但是有一个重要区别。date 类型存储最高精度为毫秒,而date_nanos 类型存储日期最高精度是纳秒,但是高精度意味着可存储的日期范围小,即:从大约 1970 到 2262

咱们继续用数字村的故事,这次村里要处理“时间”这个神奇又重要的维度!村里开了一家专业的“时间管理局”,专门处理两种不同精度的时间记录需求:


故事:数字村的时间管理局

在数字村里,时间就像一条无形的河流,记录着每件事发生的瞬间。为了精确捕捉这些瞬间,村里成立了时间管理局。管理局里有两个核心部门,分别处理不同精度的时间记录:

  1. 标准时间登记处 (date) - 日期/时间类型(毫秒精度)

    • 主管: 标叔
    • 招牌: “记录时刻,毫厘不差!” (最高精度到毫秒)
    • 记录方式:
      • 标叔非常灵活,接受两种主要的“时间凭证”:
        • 时间便签 (格式化字符串):村民可以直接写一张便签,按约定的格式写下时间,比如:
          • "2023-10-01" (只记录到天)
          • "2023-10-01T08:30:15" (记录到秒)
          • "2023/10/01 08:30:15.123" (记录到毫秒)
        • 时间流水号 (时间戳):村民也可以提供一个从 “纪元起点”(1970年1月1日 00:00:00 UTC) 开始计算的流水号:
          • 1696141815123 (这表示自纪元起点已经过去了 1696141815123 毫秒)
          • 也接受秒数 (1696141815),标叔会自动乘以1000转换成毫秒。
    • 记录什么:
      • 村民的出生日期 (birthday: "1990-05-15")
      • 订单的创建时间 (created_at: "2023-10-01T14:22:33.456")
      • 事件的发生时间戳 (event_timestamp: 1696141815123)
      • 日志的记录时间 (log_time: "2023-10-01 08:30:15")
    • 特点:
      • 精度:毫秒 (1/1000秒)。对于绝大多数日常应用(记录订单时间、用户操作时间、日志时间)完全够用。
      • 范围广:可以记录从公元元年左右一直到公元后3万年左右的时间!覆盖了几乎人类所有需要记录的时间范围。
      • 灵活输入:字符串和数字时间戳都能收,方便不同来源的数据。
  2. 高精度时间实验室 (date_nanos) - 日期/时间类型(纳秒精度)

    • 主管: 纳博士
    • 招牌: “洞察瞬息,纳秒必争!” (最高精度到纳秒)
    • 记录方式:
      • 纳博士只接受一种高精度的“时间凭证”:
        • 超级时间流水号 (纳秒时间戳):村民需要提供一个从 “纪元起点”(1970年1月1日 00:00:00 UTC) 开始计算的、精度极高的流水号:
          • 1696141815123456789 (这表示自纪元起点已经过去了 1696141815123456789 纳秒)
    • 记录什么:
      • 科学实验精确触发时间(物理、化学实验中需要记录粒子碰撞、反应开始的精确纳秒时刻)。
      • 金融高频交易订单到达时间(微秒甚至纳秒级的差异可能决定交易成败)。
      • 分布式系统超精细事件排序(需要区分在同一毫秒内发生的数百万个事件的先后顺序)。
      • 性能分析中的函数执行耗时(精确测量某段代码执行了 152.345 纳秒)。
    • 特点:
      • 超高精度:纳秒 (1/10亿秒)。1秒 = 10亿纳秒!这是date类型(毫秒)精度的100万倍
      • 范围受限:为了追求极致精度,牺牲了时间范围。只能记录大约从 1970年 到 2262年 的时间。对于需要记录古代历史或遥远未来的场景不适用。
      • 输入要求严格:只接受纳秒时间戳(长整数)。虽然也支持格式化的日期字符串输入,但在底层存储时,其精度仍然是纳秒级的。

故事总结:

数字村的时间管理局,让村民们能按需记录时间的流逝:

  • 日常记录,毫秒足矣 (date): 如果你需要记录生日、订单时间、登录时间、一般日志时间,找标准时间登记处就对了!它精度够用(毫秒)、范围超广(几乎无限制)、输入灵活(字符串或毫秒/秒级时间戳)。
  • 科研金融,纳秒必争 (date_nanos): 如果你在进行超高速实验、高频交易、需要极端精确的事件排序或性能分析,必须找高精度时间实验室!它能捕捉到纳秒级的差异,但代价是时间范围受限(1970-2262),且主要使用纳秒时间戳输入。

记住:不是精度越高越好! 选择哪种时间类型,取决于你的业务场景对精度时间范围的实际需求。时间管理局的两个部门各司其职,共同守护着数字村的时间线!