快速数据检索,无需在表上建立索引,每10秒较短的时间间隔插入一次数据

问题描述

我正在从第三方来源获取具有20K行的表中的数据,在该数据源中,无法更改表的填充方式。

在第三方上,表格填写如下

  1. 每隔15秒大约有7K行新数据就会出现
  2. 在任何给定时间,只有最后三个时间戳可用,其余数据将被删除
  3. 表上没有索引。由于不可避免的原因,都无法请求该请求,并且插入过程可能很慢。

我知道以下情况

  1. 行锁以及在层次结构中在插入数据时将采用其他锁。
  2. 使用无锁选择仍然存在问题
  3. 在临时表中将数据放在本地的情况下,因为我们正在联接表,所以在进行提取时不存在与任何其他表的联接。
  4. 当第三方停止数据插入时,数据将在100毫秒至122毫秒内到达。
  5. 开启服务需要3到5秒钟。

任何帮助/建议/方法都应事先得到赞赏。

解决方法

以下是一个相当高端的解决方案。根据您所说的,我相信它会起作用,但是有很多细节需要解决。

简而言之:表分区。

  • 在此表上设置分区方案
  • 根据我最近读过的article,可以使用未索引的堆完成此操作
  • 每15秒加载一次数据吗?那么分区需要基于这15秒间隔

对于给定的数据负载(即每15秒一次):

  • 创建“下一个”分区
  • 加载数据
  • 将新分区(新数据)切换到主表中
  • 切换最旧的分区(一次仅显示三个时间段的数据,对吧?
  • 删除“已退休”的分区

尽管可能高效有效,但这将非常混乱。我看到的最大问题是,如果他们不能添加简单的索引,我看不到他们如何设置表分区。

另一个类似的技巧是设置分区视图,本质上是“滚动自己的分区”。就像这样:

  • 具有一组结构相同的表
  • 创建视图UNION ALLing表
  • 在数据加载时,创建一个新表,将数据加载到该表中,然后通过ALTER VIEW包含该最新表并删除最旧的表。

与分区解决方案相比,这可能具有更严重的锁定/阻止问题,尽管这在很大程度上取决于读取活动的强度。而且,当然,它比仅添加索引要复杂得多。