- 10M+ 标记(特定时间范围)
- 300k+ 引用对象(视频)
具有如下结构的标记:
{
id: 123,
category: 2,
object: 'A',
start: 10,
end: 25
}
...产生不同类别的范围,如下所示:
category-1: ----------[===========]---------------------------- ref-object: A
category-1: --------------------------[====================]--- ref-object: A
category-1: ------------------[============================]--- ref-object: A
category-1: -----------------[==========================]------ ref-object: C
category-1: ------------------------------[================]--- ref-object: C
category-2: ----[===================]-------------------------- ref-object: A
category-2: -----[==========================]------------------ ref-object: B
category-2: -----[====================]------------------------ ref-object: C
category-2: -------------------------[=================]------- ref-object: C
category-2: ------------[===================================]-- ref-object: C
category-3: ----------------[=============]-------------------- ref-object: A
category-3: ----[===================================]---------- ref-object: A
category-3: -------[=======================================]--- ref-object: B
category-3: ----------------------------[====]----------------- ref-object: C
category-3: -------------[=================]------------------- ref-object: C
现在回答这样的问题:
查找所有具有重叠范围的对象, 最好按重叠时间总和
category 1
排序category 2
我能想到这些步骤
- 查询:从一个类别开始,获取该类别中的所有标记
- 代码:将范围缩小到几个更大的时间跨度(删除多余的时间跨度)
- 查询:获取与这些时间跨度之一匹配的下一个类别的标记
- 代码:将组合范围减少到几个更大的时间跨度(删除多余的时间跨度)
- [...]
- 代码:计算每个项目覆盖的时间跨度并进行相应排序
这是您想要用 SQL 做的事情吗?
这种类型的查询有名字吗?(它们不完全是范围查询,是吗?)
在这种情况下,考虑到数据量,是否存在具有内置功能的数据库?
目前,所有数据都存储在 Apache SOLR 索引中,但也可能存储在 Elasticsearch、InfluxDB 等中