简单问题-Sequoiadb数据库脚本批量删除数据
来源:互联网 发布:python ftp上传文件 编辑:程序博客网 时间:2024/05/23 00:02
背景
开发中使用的是巨杉数据库,有一个日志集合是按天存储的,即表集合名称规则一致MyLogData_yyyyMMDD的格式,每天生成一张表。现在有一个问题就是服务器磁盘空间已经被撑满了,需要删掉一段时间的数据。由于涉及的类似结构的表有5张,手动一条条执行dropCL操作太麻烦。
解决办法
首先,sequoiadb数据库提供了执行js的工具脚本,可以将需要执行的一堆操作写入到一个脚本中,通过脚本来执行删除操作。完全用js的语法,内容很简单,就是定义一个数组,存储需要删除的集合的日期,然后for循环调用dropCL方法删表。
编写remove_data.js脚本如下,并将其上传到目标服务器home目录下。
var db=new Sdb('localhost',11810)//定义删除0524-0614日期区间的数据var removeDates = new Array();for(var i=24;i<32;i++){ var date = '201705'+i+''; removeDates.push(date);}for(var i=1;i<15;i++){ var date = '201706'; if(i>9){ date=date+i+''; }else{ date=date+'0'+i; } removeDates.push(date);}//循环调用sequoiadb的dropCL命令for(var i=0;i<removeDates.length;i++){ try{ db.MySpace.dropCL('MyLogData_'+removeDates[i]); }catch(e){ println(e); } try{ db.MySpace.dropCL('MyLogData1_'+removeDates[i]); }catch(e){ println(e); } }
其次,调用命令执行该脚本:
/opt/sequoiadb/bin/sdb -f /home/remove_data.js
延伸思考
首先,js脚本编写需要注意异常捕获问题,for循环中如果有一个集合不存在,脚本执行就会终结,所以将每个dropCL语句放在try-catch中就能保证所有循环都执行。
其次,其实我想能不能利用db.listCollections获取所有的集合,并用循环打印每条集合的记录的总数。这个遍历操作现在还没有实现。还需要研究下Sequoiadb是怎么跟js的语法联系起来综合运用的,官方说就是标准的js语法,但是从我实践的结果来看还是有差异的,比如这个catch(e)的属性跟js的异常对象就不一样。也没有alert和console.log方法,只找到一个println方法。
最后,这个用脚本执行批量sequoiadb命令的功能还是挺好用的,脚本可复用,而且又不用手动重复执行。
扩展运用
刚刚通过官网管理员的提示,终于知道了sequoiadb数据库的命令操作的返回值的类型了,db.listCollections返回的是游标,只能通过游标来遍历,那么我希望打印每个集合总记录数的脚本就能实现了,修正如下:
var db=new Sdb('localhost',11810)var cursor = db.listCollections();while (cursor.next ()){ var obj = cursor.current ().toObj(); var realName = obj['Name']; var indexOf = realName.indexOf("."); var space = realName.substring(0,indexOf); var cl = realName.substring(indexOf+1); var count = db.getCS(space).getCL(cl).count(); println(obj['Name']+",count:"+count);}
截取到space和collection的名称后,再调用函数先获取Space,再获取Collections就能直接获取每个集合的count值了。其实也不复杂,就是js语法的运用了。
结果如下:
- 简单问题-Sequoiadb数据库脚本批量删除数据
- sequoiadb数据库问题排查
- DeleteCommand批量删除数据库数据
- SQL 数据库 批量删除 注入的脚本
- shell脚本实现sequoiadb数据导出功能
- Oracle数据库批量删除数据经验
- mysql 批量删除数据库中的所有数据
- 如何解决使用addBatch()和executeBatch()无法批量增加删除修改数据库数据等问题
- shell脚本来批量创建和删除数据库
- 数据库批量数据插入问题分析
- 数据库批量数据插入问题分析
- 数据库批量数据插入问题分析
- 数据库批量数据插入问题分析
- 数据库批量数据插入问题分析
- 数据库批量数据插入问题分析
- mysql数据库批量插入数据shell脚本实现
- shell脚本批量导入数据到oracle数据库
- 使用简单的方法进行批量删除数据
- 不错的模板收集
- EBS使用fndload工具下载上传请求ldt文件
- 多线程操作哈希表避免死锁
- 开发中sqlite几种常见的使用场景
- 记录心情
- 简单问题-Sequoiadb数据库脚本批量删除数据
- Hadoop之旅(7)— HDFS HA Zookeeper自动故障转移
- jquery.form实现ajax上传文件同时设置headers
- Spring + iBATIS完整示例
- Redis入门指南之复制
- JavaScript学习总结——JavaScript编写类
- Leetcode41. First Missing Positive
- SERVLETJSP Unit05:转发 、 JSP开发常见问题 & Unit09: EL、JSTL
- PhxSQL设计与实现