查询一个时间段内有效的对象列表
Search list for objects valid in a time range
我有以下数据结构,它描述了一个对象和它有效的时间段。假设下面的数字是unix时间戳。
{
"id": 1234,
"valid_from": 2000
"valid_to": 4000
},
{
"id": 1235,
"valid_from": 1000,
"valid_to": 2200,
}
...
我想快速能够在JavaScript中存储这些项目,然后查询在某个时间有效的项目。
例如,如果我要查询在2100有效的对象,我将得到[1234,1235]。如果我要查询在3999有效的对象,我会得到[1234],而在4999什么也没有。
我将在结构中有大约50-100k项的大小,我希望快速查找速度,但插入和删除可能会更慢。
Items将有重复的valid_from和valid_to值,所以它需要支持重复。项会重叠。
我将需要不断地将数据插入到结构中(可能是初始加载时的批量插入,然后在数据更改时进行一次性更新)。我还将定期修改记录,以便删除和插入。
我不确定以高效的方式解决这个问题的最佳方法是什么?
算法不是我的强项,但如果我知道正确的方法,我可以研究算法本身。
我的想法:
我最初考虑修改二叉搜索树来支持重复键和最近查找,但这只允许我查询> valid_from或 假设您有两个列表:起始/开始和过期/结束。均按时间排序。 给定一个特定的时间,您可以通过二分搜索找到每个列表中符合条件的第一项的位置。您还可以对每个列表进行二进制搜索来执行插入操作。 例如,如果有1000个项目,开始位置为342,则项目1-342是可能的,如果结束位置为901,则终止列表中的项目901-1000是可能的。现在需要交叉两个子列表。 取item id从1-342开始,从901-1000结束,并把它们放在一个单独的数组中(提前分配)。对数组进行排序。遍历数组。当同一个ID在一行中出现两次时,它就是一个命中,一个有效的匹配。
- Rails将JavaScript对象存储到Model的有效方式
- 将JS对象数组转换为嵌套形式的最有效方法
- I'我在页面加载时将整个$_SESSION变量放入一个json对象中.虽然这对我有效,但这是一个好的做法吗
- 如何有效地匹配两个不同 JavaScript 对象上的 id,并将它们合并在一起
- 以有效的方式搜索对象列表 mongo
- Date对象在Chrome中有效,但在Safari、Firefox或IE中无效
- 正在将字符串转换为有效的JSON对象
- 使用一堆 setTimeouts 还是一个 setInterval 来刷新一堆对象更有效
- JSON tv4 对象在 true 且存在其他对象时有效
- JavaScript 中更有效的选项对象
- 为什么这种用于计算数组重复并将其存储到对象中的方法有效
- tizen.filesystem.resolve() error - 对象的内容不包含有效值
- 函数是否是 JavaScript 对象属性的有效键
- JS:为什么这个对象属性不起作用,只有当我把它作为变量放在其中一个方法中时,它才有效
- 使用具有有效 JavaScript 格式的 Json.NET 序列化对象
- 在 JavaScript 中合并多个排序对象数组的最有效方法是什么?
- 有效记忆对象参数
- Javascript:可以访问对象并显示它,但不是该对象的有效属性
- 有没有一种有效的方法来执行不区分大小写的 JavaScript 对象属性名称查找
- 如何检查Joi中的有效对象