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
咱们继续用数字村的故事,这次村里要处理“时间”这个神奇又重要的维度!村里开了一家专业的“时间管理局”,专门处理两种不同精度的时间记录需求:
故事:数字村的时间管理局
在数字村里,时间就像一条无形的河流,记录着每件事发生的瞬间。为了精确捕捉这些瞬间,村里成立了时间管理局。管理局里有两个核心部门,分别处理不同精度的时间记录:
标准时间登记处 (
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万年左右的时间!覆盖了几乎人类所有需要记录的时间范围。
- 灵活输入:字符串和数字时间戳都能收,方便不同来源的数据。
高精度时间实验室 (
date_nanos
) - 日期/时间类型(纳秒精度)- 主管: 纳博士
- 招牌: “洞察瞬息,纳秒必争!” (最高精度到纳秒)
- 记录方式:
- 纳博士只接受一种高精度的“时间凭证”:
- 超级时间流水号 (
纳秒时间戳
):村民需要提供一个从 “纪元起点”(1970年1月1日 00:00:00 UTC) 开始计算的、精度极高的流水号:1696141815123456789
(这表示自纪元起点已经过去了 1696141815123456789 纳秒)
- 超级时间流水号 (
- 纳博士只接受一种高精度的“时间凭证”:
- 记录什么:
- 科学实验的精确触发时间(物理、化学实验中需要记录粒子碰撞、反应开始的精确纳秒时刻)。
- 金融高频交易的订单到达时间(微秒甚至纳秒级的差异可能决定交易成败)。
- 分布式系统的超精细事件排序(需要区分在同一毫秒内发生的数百万个事件的先后顺序)。
- 性能分析中的函数执行耗时(精确测量某段代码执行了 152.345 纳秒)。
- 特点:
- 超高精度:纳秒 (1/10亿秒)。1秒 = 10亿纳秒!这是
date
类型(毫秒)精度的100万倍! - 范围受限:为了追求极致精度,牺牲了时间范围。只能记录大约从 1970年 到 2262年 的时间。对于需要记录古代历史或遥远未来的场景不适用。
- 输入要求严格:只接受纳秒时间戳(长整数)。虽然也支持格式化的日期字符串输入,但在底层存储时,其精度仍然是纳秒级的。
- 超高精度:纳秒 (1/10亿秒)。1秒 = 10亿纳秒!这是
故事总结:
数字村的时间管理局,让村民们能按需记录时间的流逝:
- 日常记录,毫秒足矣 (
date
): 如果你需要记录生日、订单时间、登录时间、一般日志时间,找标准时间登记处就对了!它精度够用(毫秒)、范围超广(几乎无限制)、输入灵活(字符串或毫秒/秒级时间戳)。 - 科研金融,纳秒必争 (
date_nanos
): 如果你在进行超高速实验、高频交易、需要极端精确的事件排序或性能分析,必须找高精度时间实验室!它能捕捉到纳秒级的差异,但代价是时间范围受限(1970-2262),且主要使用纳秒时间戳输入。
记住:不是精度越高越好! 选择哪种时间类型,取决于你的业务场景对精度和时间范围的实际需求。时间管理局的两个部门各司其职,共同守护着数字村的时间线!