首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有数据结构/概念的名称,其中加载了数据集的某些区域?

是否有数据结构/概念的名称,其中加载了数据集的某些区域?
EN

Software Engineering用户
提问于 2018-01-10 23:34:55
回答 2查看 129关注 0票数 4

在工作中,我正在处理这样一种情况,即我们有大量的时间序列数据,并且需要一次向用户显示其中的部分。数据实际上有无限多的记录,因此客户端不可能一次加载整个数据集。但是,请求数据部分的API调用是缓慢/昂贵的,因此我希望缓存已经加载的数据客户端,而不必重新请求它。

比方说,当你在网上观看一段视频,前后跳过时。播放机根据用户当前试图观看的内容下载视频片段,并将其存储起来,以防用户再次观看该片段。

不过,在我的用例和视频示例之间有一些不同:

  • 我的数据集很稀少。可能有几个星期内没有数据点的地区。我需要区分“无数据”和“未加载”。
  • 我的数据集没有离散段。在HLS或DASH视频中,流被分割成段(通常为10秒长),这些段提供了加载应该发生的离散间隔。我的数据可以在任意两个时间点之间加载,而且由于用户可以放大或缩小数据,这些点之间的距离甚至可能不一样。
  • 我的数据集是无界的。在视频中,视频有一个清晰的起点和结尾。在我的数据集中,您可以从理论上无限地向前和倒退。(虽然在实践中,长度受后端存储日期的限制,但时间仍然很长。)

我在编程方面是自学的,我不知道这个概念的名字,但我觉得一定有一个。我有能力实现我需要自己的东西,但我希望避免重新发明轮子。

EN

回答 2

Software Engineering用户

发布于 2018-01-10 23:52:46

如果不是因为缺少离散的部分,我会认为这是一种页面缓存/替换算法。仅仅因为用户选择任意范围并不一定意味着您仍然无法检索包含该范围的一组页面,对吗?数据集中的行是否有一个自动递增的id?如果是这样,那么您可以轻松地将数据划分为由固定数量的记录组成的页面。为了检索包含数据的页面,您可以简单地使用模块化算法,即查找id,然后查找do (id mod n),其中n是页大小,以获得包含页面的第一条记录;对于范围末尾的页面,可以使用do (id mod n) +n。如果您的数据没有此功能,那么您可能会从历史上生成数字,并从现在开始自动生成它们?

https://en.wikipedia.org/wiki/Page_替换_算法

Id还考虑使用某种库。不确定您的语言,但快速搜索显示了这个有趣的项目,您可以参考:

https://github.com/vpetrigo/caches

票数 1
EN

Software Engineering用户

发布于 2018-01-11 07:40:33

不确定这是否是您已经考虑的内容:但是考虑到您的用例,您可能会从一个非常简单的缓存算法中获得很多好处,通过这个算法,您可以在缓存中维护一个单变量长度段。当您超出了左或右的界限时,只需将段增长到所需的数量(最好是所需数量的几倍,以避免进一步的查询)。同样,如果放大,则扩展段的两端。放大,显然不需要改变段。您可能需要限制段的最大大小,在这一点上,如果您向左移动,则会从右侧丢失相应的部分,反之亦然。移动到一个完全不同的段应该保留与旧段交集的数据,并丢弃新段之外的数据。对于这个实现,您可能需要一个高效实现的双结束列表(https://github.com/petkaantonov/deque)。

这不能很好地工作的一个用例是,当用户在两个不相交的段之间切换时,这两个段的大小超过了最大段的大小,或者如果他们跳过几个远程数据区域。

不幸的是,我不知道这样的算法.

要记住的另一个想法是100%确定瓶颈在哪里。您是否确信优化不佳的不是datatable或查询(例如索引)。可能是数据库资源不足,或者是编组大量数据的速度,或者是将数据加载到javascript对象的方式效率低下,或者是网络往返的延迟等。

票数 -1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/363788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档