聊聊claudb的DatabaseCleaner
时间:2022-07-23
本文章向大家介绍聊聊claudb的DatabaseCleaner,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
序
本文主要研究一下claudb的DatabaseCleaner
DatabaseCleaner
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/data/DatabaseCleaner.java
public class DatabaseCleaner {
private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseCleaner.class);
private final DBServerContext server;
private final DBConfig config;
private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
public DatabaseCleaner(DBServerContext server, DBConfig config) {
this.server = server;
this.config = config;
}
public void start() {
executor.scheduleWithFixedDelay(this::clean,
config.getCleanPeriod(), config.getCleanPeriod(), TimeUnit.SECONDS);
}
public void stop() {
executor.shutdown();
}
private void clean() {
LOGGER.debug("cleaning database: running");
server.clean(Instant.now());
LOGGER.debug("cleaning database: done");
}
}
- DatabaseCleaner的start方法每隔config.getCleanPeriod()(
默认30
)秒调度执行clean方法;clear方法执行server.clean(Instant.now())
clean
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/ClauDB.java
public class ClauDB extends RespServerContext implements DBServerContext {
//......
public void clean(Instant now) {
executeOn(Observable.create(observable -> {
getState().evictExpired(now);
observable.onComplete();
})).blockingSubscribe();
}
//......
}
- ClauDB的clean方法执行getState().evictExpired(now)
evictExpired
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/DBServerState.java
public class DBServerState {
//......
public void evictExpired(Instant now) {
for (Database database : databases) {
database.evictableKeys(now).forEach(database::remove);
}
}
//......
}
- evictExpired方法执行database.evictableKeys(now).forEach(database::remove)
evictableKeys
claudb-1.7.1/src/main/java/com/github/tonivade/claudb/data/Database.java
public interface Database {
//......
default ImmutableSet<DatabaseKey> evictableKeys(Instant now) {
return entrySet()
.filter(entry -> entry.get2().isExpired(now))
.map(Tuple2::get1);
}
//......
}
- evictableKeys方法遍历entrySet,找出DatabaseValue的isExpired为true的ImmutableSet
小结
DatabaseCleaner的start方法每隔config.getCleanPeriod()(默认30
)秒调度执行clean方法;clear方法执行server.clean(Instant.now())
doc
- 海量数据迁移之冲突数据筛查(r2 第1天)
- sqlldr加载性能问题的排查 (r2第2天)
- sqlplus无法启动的问题及解决(3) (25天)
- sqlplus无法启动的问题及解决(2) (25天)
- 10g升级至11g exp的问题解决(23天)
- redo日志文件学习(22天)
- 数据库文件的迁移
- excel文件内容导入数据库的问题及解决(20天)
- 10g,11g数据泵的导入问题及解决(19天)
- ORACLE 11g导入9i dump的问题及解决
- 服务器增加内存后无法重启数据库的问题及解决 (36天)
- 分区表放入keep pool,recycle pool的问题及解析(34天)
- 临时表空间故障处理 (33天)
- 关于物化视图疑问(32天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Ubuntu如何轻松编译openJDK详解
- 详解Linux下Tomcat开启查看GC信息
- Centos7.4 zabbix3.4.7源码安装的方法步骤
- CentOS7环境搭建python3以及与python2实现共存的方法
- centos7.0安装离线JDK1.8方法详解
- ubuntu中swap(虚拟内存)设置方法
- 详解Linux监控重要进程的实现方法
- CentOS环境下安装Redis3.0及phpredis扩展测试示例
- 使用Apache commons-cli包进行命令行参数解析的示例代码
- 详解如何在Ubuntu 16.04上增加Swap分区
- Mac本地文件上传到CentOS云服务器方法
- linux中把.c的文件编译成.so文件
- Ubuntu16.04 中 locate文件查找命令
- Ubuntu 16.04与Apache虚拟主机配置的步骤详解
- Linux删除目录下的文件的10种方法小结