【问题标题】:How to use sliding window on Oracle table?如何在 Oracle 表上使用滑动窗口?
【发布时间】:2018-11-05 05:45:06
【问题描述】:

我有一个在 Oracle 中实时获取的表(记录)。我需要从该表中提取数据并计算每分钟添加到数据库中的条目数。然后将此统计信息转储到新表“统计信息”中。如何以滑动窗口的方式有效提取数据?

表结构:

RecordId       NUMBER(10)    ---- Unique random value for every row        
RecordTime     VARCHAR2(64)  ---- Timestamp in YYYY-MM-DD HH24:MI:SS

查询应该类似于:

select substr(RecordTime, 1, 16), count(*) 
from Records 
group by substr(RecordTime, 1, 16);

表中预计每分钟大约有 500000 个新行,所以我需要对这个数据库表进行滑动窗口操作。如果类似队列的操作更好,那么也请告诉我。

【问题讨论】:

  • 究竟为什么要将时间戳值存储为 VARCHAR2?
  • 为什么您的查询不符合您的要求?好像和你描述的一样。

标签: sql database oracle sliding-window


【解决方案1】:

首先,最好将RecordTime 作为日期字段,以便您可以在其上创建索引并对其进行查询。使用 substr() 你会错过这一点。

其次,像Influx 这样的时间序列数据库更适合这个用例。你可以考虑使用它。

【讨论】:

  • 感谢您的回复。第1点真的很明显,我会记住的。但是我真的无法更改数据库,也无法使用其他框架。如果是这样,考虑到这么大的容量,我相信 Apache Spark 是最好的选择。将来我什至可以处理繁重的数据操作。那么能否请您告诉我是否可以使用 Oracle 完成类似的操作?
  • 如果您有其他几个分析用例,您当然可以设置 spark。结果可能会保存在像 Cassandra 这样的列式数据存储中。结果也可能存储在 Oracle 中,但这取决于您的想法。
  • 另外,你的recordId是Number(10)。由于您期待 500_000 records per minute,因此您将在大约 14 天后开始看到非唯一的 recordIds。
  • 我只能使用 Oracle 来完成这项任务。那么是否可以以队列或滑动窗口的方式从 Oracle 表中提取值?如果是,您能否详细说明那部分?现在,处于测试阶段,15 天的数据就足够了。
  • 您可以在某处维护偏移量last_read_till。在每次迭代中,从这个时间戳中读取一定数量的记录,并用最近记录的recordTime更新它(假设recordTime总是增加)
猜你喜欢
  • 2015-02-19
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多