TRIP数据库的1到1000

来源:互联网 发布:科目二驾考模拟软件 编辑:程序博客网 时间:2024/06/18 16:00

TRIP数据库的1到1000

作者:刘斌

         TRIP数据库具有对数据库拆分和合并的能力,当一个数据库的数据量过大时,就可以队这个数据库进行拆分,拆分完成后,又可以同时打开多个数据库进行检索。安装在同一台设备上的TRIPmananger可以管理多个数据库,而不影响检索速度,这些数据库可以存放在不同的介质上,如U盘,移动硬盘,以及光盘中。有些数据中心,已经建立了基于TRIP数据库的光盘数据库,将数据存放在光盘上。TRIP数据库可以同时打开250个数据库进行检索而且TRIP数据库的检索速度要比其他数据库快上许多倍。本文通过实验检测了TRIP数据库拆分数据库的能力,以及使用TRIPmananger来管理超过1000个数据库的能力。

1.什么是数据库拆分

数据库的拆分就是把一个数据库部分记录提取出来,装入到另外一个较小的数据库中,可以简单的理解为,一个大的数据库被分割为了多个小的数据库,每个小的数据库具有大数据库的部分记录。

2.数据库拆分的前提-相同的数据库结构

TRIP数据库拆分的前提是被拆分的数据库和拆分成的数据库要具有相同的数据库结构,如果两者的数据库结构完全不一致,则无法进行数据库的拆分操作。如果两者仅有部分字段的属性相同(字段名和字段类型均相同),则在拆分的过程中,只有相同部分的字段的记录才会有大数据库拆分到小数据。仅有两者的字段个数,类型,名称完全一致时,大数据库的记录才会被完整的拆分到小数据库中。使用TRIPmananger对数据库的clone功能,可以快速生成一个机构完全相同的数据库。在TRIP的Java接口中,可以使用TdbControlObject的db.deepCopy()方法来复制一个结构相同的数据库。

3.如何进行数据库的拆分

TRIP数据库的拆分可以分为以下四步:

 

1.      建立结构相同的数据库

2.      打开要被拆分数据库

3.      查找需要拆分的记录

4.      将查找的记录装入要拆分到的数据库

 

假设指定如下:

被拆分数据库:DEMO,拆分至数据库: DEMO_01,DEMO_02;拆分1-50条记录到DEMO_01,51-99条记录到DEMO_02;则拆分分步骤如下:

1.      建立与DEMO数据库结构相同的数据库DEMO_01,DEMO_02;

2.      BASE DEMO

3.      F R=1 TO 50

4.      INS COP=DEMO_01WH S=0

5.      F R=51 TO 99

6.      INS COP=DEMO_01WH S=1

4.拆分1个数据库为1000个数据库

调用TRIP的JAVA接口,通过以下代码实现了将一个TRIP数据库拆分为1000个数据库,

在测试过程中,记录了拆分所用的时间。因TRIP数据库的一个回话,一次最多只能打开250个数据库,因为,在程序中,每拆分250个数据库,就需要重新获取一次会话,本次实验记录的时间将TRIP获取每次会话的时间记录在内了。
测试数据如下:

测试开始时间:ThuMay 04 17:15:49 SGT 2017

测试结束时间:ThuMay 04 17:18:00 SGT 2017

用时:131497ms

 

public static void main(String[] argsthrows TdbException {

        long start=System.currentTimeMillis();

        System.out.println(new Date());

//获取session会话

        session=Login().acquire();

        for (int i = 1; i <= 1000; i++) {

           TdbDatabaseDesign db = new TdbDatabaseDesign(session);

           TdbControlObject to = new TdbControlObject();

           to.getDatabase();

//指定被拆分的数据库

           db.get("DEMO_TEST");

//创建结构相同的数据库

           db.deepCopy("DEMO_TEST"+inew TdbControlObject());

           TdbCclCommand command = new TdbCclCommand(session);

           String comm1 = "BASE DEMO_TEST" ;

//将DEMO_TEST数据库的1-99条记录拆分到每个数据库中

           String comm2 = "F r = 1 to 99";

           String comm3 = "INS COP =" + "DEMO_TEST"+i + "  WH s=0";

           command.execDirect(comm1);

           command.execDirect(comm2);

           command.execDirect(comm3);

//达到同时打开数据库的上限,结束会话,重新获取

           if(i%249==0){

              session.logout();

              pool.close();

              session=Login().acquire();

           }

       }

        System.out.println(System.currentTimeMillis()-start);

        System.out.println(new Date());

    }

}

 

原创粉丝点击