Azure cosmosdb CosmosDB-为搜索时间间隔而优化的存储日期时间

Azure cosmosdb CosmosDB-为搜索时间间隔而优化的存储日期时间,azure-cosmosdb,Azure Cosmosdb,我需要存储以其开始/结束时间表示的间隔,精度为10分钟 使用CosmosDB的最佳实践是什么? 我需要能够有这样的查询 获取从给定日期开始的所有时间间隔 获取在给定日期结束的所有时间间隔 ISO表示法似乎不太适合这种情况。 我也不确定unix时间戳是否正确 其他选项包括将日、月、年、小时、分钟存储为ints 有什么最佳实践吗 附言。 一般情况下,我需要以下查询: 提供与id为{id}的间隔在同一日期开始的间隔 或 给我所有比id={id}的interval长的时间间隔如果我是处理此场景的人,

我需要存储以其开始/结束时间表示的间隔,精度为10分钟

使用CosmosDB的最佳实践是什么? 我需要能够有这样的查询

  • 获取从给定日期开始的所有时间间隔
  • 获取在给定日期结束的所有时间间隔
ISO表示法似乎不太适合这种情况。 我也不确定unix时间戳是否正确

其他选项包括将日、月、年、小时、分钟存储为
int
s

有什么最佳实践吗

附言。 一般情况下,我需要以下查询:

提供与id为{id}的间隔在同一日期开始的间隔


给我所有比id={id}的interval长的时间间隔

如果我是处理此场景的人,我会将日期和时间间隔保存为unix时间戳,类似于cosmos db中的
\u ts
系统列

如您所知,unix时间戳是一个数字,表示自1970年1月1日以来经过的秒数。因此,您可以使用它(计算)以10分钟的精度查询开始/结束时间


顺便说一句,unix时间戳格式仍然可以通过cosmos db查询中的UDF进行转换,请参见此案例:

为什么ISO格式的日期不合适?@James嗯,虽然我的主要两个查询是“获取所有日期”,但总的来说,我不喜欢将日期存储为字符串的想法。由于缺少对
date
类型的自然支持,在cosmos db端进行任何类型的日期相关计算都是不可能的,或者效率低下。当然,我们可以为转换使用UDF,但将其作为某种支持的类型使用看起来更灵活。除非您打算进行提取或差异计算,否则ISO 8601格式的UTC日期将很好,因为它们将按字典顺序存储-因此像before/after/between等范围查询将很好。就性能而言,这些字段将被编入索引,因此,除非您有一个性能/效率低下的特定用例,否则我不会假设这种情况。@James您完全正确。对于通过静态参数的查询,最好使用ISO格式的UTC日期,因为它们确实可以进行词汇比较。但是,如果我明天想得到,例如,
所有比id={intervalid}的间隔长的间隔
,那么我就会遇到麻烦。它的just string表示限制可以通过使用自然支持的类型来减轻。至少这是我的2美分。如果您需要计算差异,那么根据我之前的评论,是的,Unix时间戳会更有意义。但是,FWIW您没有将此作为要求包含在您的问题中。谢谢您的回复!是的,unix时间戳是我目前最接近的解决方案。让我问你一件事:当你需要在UDF中而不是在应用程序端进行特定转换时,你能想到任何真实世界的用例吗?