TimesTen只读缓存组在初始加载时会检查Aging吗?

2024-02-04 12:38

本文主要是介绍TimesTen只读缓存组在初始加载时会检查Aging吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先说为什么要问这个问题,用户的Oracle数据库中有一个非常大的表,存1年的数据,每天1000万条记录。现在需要用TimesTen来做只读缓存,但只需缓存最近一个月的数据,因此申请的内存也只够缓存1个月的。

那么如果TimesTen在初始加载时,先加载所有数据,然后再使用Aging清除数据。那么加载所有数据这一步就会失败,因为内存不过;而且这么做显得有点多余。

所以按照逻辑来说,应该在初始加载时就会利用Aging排除掉不满足条件的数据。

下面来验证一下。

先在Oracle中创建基础表,然后插入1000条数据,注意插入是倒序的,每月一条

create table orders(ord_num int primary key,ship_time date not null);
grant select on orders to cacheadm;DECLAREord_num NUMBER;
BEGINFOR i IN 1..1000 LOOPSELECTnvl(MAX(ord_num), 0)INTO ord_numFROMorders;INSERT INTO orders VALUES (ord_num + 1,ADD_MONTHS(sysdate,-i));COMMIT;END LOOP;
END;
/SQL> select * from orders;ORD_NUM SHIP_TIME
---------- ---------1 23-NOV-202 23-OCT-203 23-SEP-204 23-AUG-205 23-JUL-206 23-JUN-207 23-MAY-208 23-APR-209 23-MAR-2010 23-FEB-2011 23-JAN-20
...

然后创建只读缓存组,启用Aging为1年,清理周期为10分钟:


CREATE READONLY CACHE GROUP "READCACHE" AUTOREFRESH MODE INCREMENTAL INTERVAL 5 MINUTESSTATE PAUSEDFROM"ORATT"."ORDERS" ("ORD_NUM"   NUMBER(38) NOT NULL,"SHIP_TIME" DATE       NOT NULL,PRIMARY KEY("ORD_NUM"))AGING USE SHIP_TIME LIFETIME 366 days CYCLE 10 minutes ONCommand> select * from orders;
0 rows found.

初始加载(LOAD CACHE GROUP ),发现只加载了满足条件的数据,这正是我们要的结果:

Command> select * from orders;
< 1, 2020-11-23 20:38:12 >
< 2, 2020-10-23 20:38:12 >
< 3, 2020-09-23 20:38:12 >
< 4, 2020-08-23 20:38:12 >
< 5, 2020-07-23 20:38:12 >
< 6, 2020-06-23 20:38:12 >
< 7, 2020-05-23 20:38:12 >
< 8, 2020-04-23 20:38:12 >
< 9, 2020-03-23 20:38:12 >
< 10, 2020-02-23 20:38:12 >
< 11, 2020-01-23 20:38:12 >
< 12, 2019-12-23 20:38:12 >
12 rows found.

在手册中关于LOAD CACHE GROUP 的帮助为:

LOAD CACHE GROUP loads all new cache instances from the Oracle database that satisfy the cache group definition and are not yet present in the cache group.

最后补充一点,如果想修改Aging生命周期和检查频率,可使用alter table,可见这些属性都是表的属性,而非缓存组的属性。例如:

alter table "ORATT"."ORDERS"set aging lifetime 1 days;
alter table "ORATT"."ORDERS"set aging cycle 6 hours

这篇关于TimesTen只读缓存组在初始加载时会检查Aging吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677536

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

React 记忆缓存的三种方法实现

《React记忆缓存的三种方法实现》本文主要介绍了React记忆缓存的三种方法实现,包含React.memo、useMemo、useCallback,用于避免不必要的组件重渲染和计算,感兴趣的可以... 目录1. React.memo2. useMemo3. useCallback使用场景与注意事项在 Re

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff