闲杂小记(七)

数据库迁移方案:


方案一:

init:

比如某一天0:00-23:59把老数据迁移至新表(假设需要一天),但是有一个问题:比如在0:00已经迁移到新表的数据,在12:00的时候老表数据update了,则新表中的数据是还未更新的。

job:定时任务,每隔一段时间进行一次老表到新表数据迁移

解决方案:

insert:比较老数据的update_time和中间表的create_time比较,如果没有中间表,则插入,如果有,则update

update:同上

delete:老表数据删除,同事去新表也把数据删除

打标签:

server处理:批处理

user触发:属于打散处理,减小数据库压力和并发压力

方案二:

init:选择一小段时间停止服务器运行,将老表数据全部迁移到新表

实时:(需要修改老接口)

增:老表新增的同时对新表进行新增

删:老表删除的同时对新表数据进行删除

改:老表修改的同时对新表数据进行删除


EasyUI分析和覆盖:

config: {

    action: {
        edit: 'checkRefuse.do',
        remove: 'checkPass.do'
    },
    //自定义事件
    event: {

        edit: function (callback) {
            var record = Utils.getCheckedRows();
            if (Utils.checkSelectOne(record)) {
                $.messager.confirm('确认', '确认此操作?', function (r) {
                    if (r) {
                        jeecg.progress();
                        var arr = [], idKey = 'id'; //主键名称
                        $.each(record, function (i, record) {
                            arr.push('id=' + record[idKey]);
                        });
                        var data = arr.join("&");
                        jeecg.deleteForm('checkRefuse.do', data, function (result) {
                            jeecg.closeProgress();
                            // this.event.refresh;
                            refresh();
                            //回调函数
                            if (jQuery.isFunction(callback)) {
                                callback(result);
                            }
                        });
                    }
                });
            }
        },
    },
    dataGrid: {

toolbar: [{id: 'btnadd', text: '新建群', btnType: 'add'},
    {id: 'btnedit', text: '更新群', btnType: 'edit'},
    {id: 'btnedit', text: '解散群', btnType: 'remove'},
    {
        //自定义按钮,并自定义处理方法
        id: 'btnedit', text: '发送消息', btnType: 'edit'
        , handler: 'send'
    }]
//获取窗口
var SendWin = {send: $("#send-win")}
//定义全局变量
var ids ;
//初始化窗口,给窗口添加按钮
var initSendWin = function () {
    if (SendWin.send && SendWin.send[0]) {
        //判断页面是否设置buttons,如果没有设置默认按钮
        var btns = SendWin.send.attr("buttons");
        if (!btns) {
            //设置 保存,关闭按钮
            SendWin.send.dialog({
                buttons: [
                    {
                        text: '发送',
                        handler: save
                    }, {
                        text: '取消',
                        handler: close
                    }
                ]
            });
        }
        //Win.edit.find("#btn-submit").click(Events.save); //保存事件
        //Win.edit.find("#btn-close").click(Events.close);//关闭窗口
    }
}
//自定义方法
var send = function (callback) {
    //获取选择行
    var records = Utils.getCheckedRows();
    if (Utils.checkSelect(records)) {
        var arr = [], idKey = 'groupId'; //主键名称
        $.each(records, function (i, record) {
            arr.push(record[idKey]);
        });
        ids=arr;
        //调用方法初始化窗口
        initSendWin();
        //打开窗口
        $("#send-win").dialog('open');
        Form.send.resetForm();
        //刷新
        refresh();
        //回调函数
        if (jQuery.isFunction(callback)) {
            callback();
        }

    }


};
var Utils = {
    //获取选择行
    getCheckedRows: function () {
        return $('#data-list').datagrid('getChecked');
    },
    //校验是否有选择行
    checkSelect: function (rows) {//检查grid是否有勾选的行, 有返回 true,没有返回true
        var records = rows;
        if (records && records.length > 0) {
            return true;
        }
        jeecg.alert('警告', '未选中记录.', 'warning');
        return false;

    },
    //校验是否选择单行
    checkSelectOne: function (rows) {//检查grid是否只勾选了一行,是返回 true,否返回true
        var records = rows;
        if (!Utils.checkSelect(records)) {
            return false;
        }
        if (records.length == 1) {
            return true;
        }
        jeecg.alert('警告', '只能选择一行记录.', 'warning');
        return false;
    }
}

var Form = {
    search: $("#searchForm"),
    add: $("#addForm"),
    edit: $("#editForm"),
    send: $("#sendForm")
}
var refresh = function (callback) {
    var param = Form.search.serializeObject();
    $('#data-list').datagrid('reload', param);
    //回调函数
    if (jQuery.isFunction(callback)) {
        callback();
    }
};

var save=function (callback) {


    var message = document.getElementById('message').value;
    var data= "ids="+ids+"&input="+message;
    //ajax请求
    $.ajax({
        type: "POST",
        url: "send.do",
        data:data,
        success: function(msg){
        }
    });
    //关闭窗口
    SendWin.send.dialog('close');
    if (jQuery.isFunction(callback)) {
        callback(data);
    }

};

//关闭按钮事件
var close=function (callback) {
    $.messager.confirm('确认', '你确认关闭窗口?', function (r) {
        if (r) {
            SendWin.send.dialog('close');
            //回调函数
            if (jQuery.isFunction(callback)) {
                callback(data);
            }

        }
    });
};
检验原则:

一切接收到的数据都是不可信的:

就像坐地铁:进站时需要安检,出站时则不需要

DB查询到的结果,HTTPCLIENT传入的数据,页面传入的数据都需要做校验,前三者都是不可控的;自己程序内部定义的方法传入的参数按理来说也需要校验,但是如果自己控制的好的话时可以不用校验的,这部分是可控的


测试原则:

普通值:正常测试数据,测试程序基本功能

边界值:临界值,测试程序边界

容错值:错误值,测试程序容错性,对错误数据处理


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值