YYW'S BLOG

知识的分享就是知识的获得
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

KDB+性能分析:内存篇

Posted on 2008-07-20 22:50  阿武  阅读(4080)  评论(1编辑  收藏  举报

      经过一个多星期的折腾终于搞定房子的事了,租到了一个还比较不错的单间,长这么大终于有一个属于自己的空间了,在这之前还在朋友那里寄宿了一个星期,也是长这么大第一次感觉到了“无家可归”的酸楚,每天下班后都不想回去,只是到处乱转,没有目的,转到时间差不多了就去吃饭然后回去那个不属于我的地方,当然还是特别感谢我的朋友的,幸亏有他们,要不这一星期都不知道要在哪座天桥下安家了。也是因为这样子,Q语言初学者系列暂时被耽搁了,虽然关心它的朋友并不多,但我还是想继续完成它,既然开始了,就总要有个结局。

 

     扯了一些题外话,下面开始进入今天的内容,KDB数据库相对于其它关系型数据库最大的优点就是效率高,特别是对于那些基于列的数据的运算表现更加出色,但它也并不是十全十美的,例如它是一个基于内存的数据库,这也就是说它的效率很大的一个原因就是依赖于数据在内存中的高速传输,这可比硬盘要快得多了。今天我就对它的内存占用率做了一个测试,使用的是开发版本,也就是32位版本,而且运行时间只能是2小时,所以这也是这个测试最多能完成的时间,当前使用的测试是每插入1000行做一次内存使用情况跟所消耗时间的记录,最终结果如下: 

 

     图中的蓝线代表的是数据库所占用的内存,红线代表的是数据库真正使用的内存,绿线表示每插入1000条数据所需要的时间。

     测试所使用的数据如下:

    

 

      从测试结果中我们可以看到数据库启动后会事先向操作系统申请60多M的内存,虽然这么多很多都是被闲置着的,但这么做的好处是当往里面添加数据的时候程序不需要再向操作系统申请内存,这节约了时间。测试发现只要数据量在50万行左右内存基本不会有增加,但如果还有新的数据添加进来,数据库又会一次性申请大量的内存,再接下去还是这样的操作,当数据达到350万行的时候,内存占用情况是400M左右。我想这还是一个可以接受的范围。再看下面的绿线,随着表中数据的不断增加,添加一行记录所需要的时间也在平滑地增长,这可不是什么好消息,不知道关系型数据库是不是也是这样的情况,这个还没有测试过。

 

     测试所使用的程序:

      1、KDB+数据库,测试所使用的是最新版本2.4;

      2、KdbTester 开发语言为C#,用于产生测试数据;

      3、KdbTestReporter 开发语言为JAVA,使用JFreeChart开源组件来生成报表。

 

另外 

测试机器的配置如下:
====================================
CPU:    Intel Core 2 Duo E4300
主板:   升技 AB9
内存: 金士顿 DDR2 667 1G x2
显卡:   影驰 GeForce 8600GT 魔灵
硬盘:   酷鱼7200.10 SATAII 8M 250G
电源: Tt 金刚450(W3009)
机箱:   航嘉 H001

 

操作系统是Vista sp1

 

为了不让等待的时间太过于无聊,所以自始自终机器都是边跑测试边放电影