首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过去24小时的物化视图

过去24小时的物化视图
EN

Database Administration用户
提问于 2012-12-12 18:45:54
回答 2查看 3.3K关注 0票数 6

我正在收集空间点数据,与之相关的时间戳。我想要为过去的24小时创建这个数据的视图。因为我是通过ArcGIS服务器传输这些空间数据,所以在一个直观的视图(这个视图可以很容易地包含100-200k+点)中存在与管道相关的性能问题。为了长话短说,为了缓解这些性能问题,我创建了数据的物化视图。但是,我希望每3-4分钟更新一次这些数据。

我的问题是,当我将current_timestamp添加到查询中时:

代码语言:javascript
复制
SELECT * 
FROM points 
WHERE timestamp > current_timestamp - interval '24' hour

...this不再可以用作快速刷新。是否有任何方法来纠正这一点,或者它将永远是一个完整的刷新?如果显示了,当涉及更新物化视图的性能时,我应该注意什么(同样,这个数据集很容易是100-200 K点,每秒钟添加3-6点)。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-12-12 19:22:54

可快速刷新的物化视图不能包含像current_timestamp这样的非确定性函数.因此,如果要在物化视图中物化过去24小时的数据,则物化视图每次都需要进行完全刷新。

您需要物化视图吗?您能否维护自己的暂存表,并创建一个每隔几分钟运行一次的自定义作业,删除现在已超过24小时的数据,并插入新数据(直接查询表或创建将新数据写入另一个表的触发器)?如果您需要使用物化视图的查询重写功能,但如果您只是想要查询一个较小的表,则定制代码可能更高效。

或者,您是否可以每天对表进行分区,以便过去24小时的查询始终只需访问最近的两个分区?

票数 7
EN

Database Administration用户

发布于 2012-12-13 09:52:15

您可以创建一个包含过去24小时数据的物化视图。要做到这一点,您将需要创建一个单行表,其中只包含希望返回数据的日期。在执行快速刷新之前,刷新过程需要将此表更新到您想要的日期:

代码语言:javascript
复制
create table tab (x integer primary key, ins_date date);

create table last_time (datetime date primary key);

create materialized view log on tab with rowid;
create materialized view log on last_time with rowid;

insert into tab
select rownum, sysdate-level/20 from dual connect by level <= 100;

insert into last_time values (sysdate-1);

commit;

create materialized view mv
build immediate
refresh fast on demand
as
  select t.*, t.rowid tr, l.rowid lr
  from   tab t, last_time l
  where  t.ins_date >= l.datetime;

select count(*) from mv;

  COUNT(*)
----------
        20 

update last_time set datetime = sysdate;

exec dbms_mview.refresh('mv', 'F');

SELECT x FROM mv;

no rows selected

insert into tab values (101, sysdate);

exec dbms_mview.refresh('mv', 'F');

SELECT x FROM mv;

         X
----------
       101

如果发现需要超过24小时的更多(或更少)数据,则只需酌情更新LAST_TIME表即可。

但是,正如Justin所建议的那样,也值得研究分区。

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

https://dba.stackexchange.com/questions/30302

复制
相关文章

相似问题

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